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

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

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

答案1

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

它取决于磁盘、控制器、CPU、应用程序、操作系统、其他系统负载、内核版本、使用的文件系统以及大概十几个我现在记不住的其他东西。

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

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

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

相关内容