我应该使用多大的缓冲区来最大化磁盘 I/O 带宽?(16Kb、32Kb、64Kb 等)

chr*_*tek -6 linux bandwidth hard-drive io

我试图通过类似于 BufferedOutputStream 的缓冲 FileChannel 尽可能快地写入文件。我想知道每次写入调用应该使用的最佳数据块是什么以最大化带宽?我在 Ubuntu Linux 上。

Ton*_*nny 6

对于这样的问题,没有“一刀切”的完美答案。这种事情是无法预测的。

这取决于磁盘、控制器、CPU、应用程序、操作系统、其他系统负载、内核版本、使用的文件系统以及可能我现在无法快速记住的其他十几种事情。

通常越大越好,但通常会有一个收益递减点。
对于任何给定的系统,反复试验是确定的唯一方法。

即使您为您的开发环境解决了这个问题,您也必须为该软件需要在其上运行的每个其他系统再次执行所有操作。

最好进行一些有限的测试,然后选择一个在大多数预期目标系统上表现“足够好”的“合理”值。