一尘不染

写的最佳缓冲区大小(2)

linux

假设我想在syscall 上的ext3Linux文件系统上写入1 GB的数据write(2),这种情况发生在非常 繁忙的环境中
(许多相似的I / O并发)。什么是在区间的最佳缓冲区大小,说,[4 kB, 4 MB]这样做,当

  1. 不使用O_DIRECT打开标志,或者
  2. 使用O_DIRECT

请没有“自己检查”的答案-我想从“文件系统”的家伙那里得到一些答案。


阅读 305

收藏
2020-06-03

共1个答案

一尘不染

正如评论中所讨论的那样,我认为确切的大小并不重要,假设是:

  • 文件系统大小的一小部分(请参阅Joachim Pileborg的建议stat(".")等)
  • 2的幂(因为计算机和类似它们的内核)
  • 不太大(例如,适合处理器内部的某些缓存,例如L2缓存)
  • 在内存中对齐(例如,使用调整为页面大小posix_memalign)。

因此,介于16kB和几兆字节之间的2的幂应该适合。大部分时间都花在读取磁盘上。在此范围内,文件系统和磁盘基准测试相当平稳。

4 KB似乎通常是页面大小和磁盘块大小。

当然,在使用创建mke2fs文件系统块大小的文件系统时,您甚至可以调整内容,甚至进行调整。

我敢打赌,最佳选择实际上取决于您的硬件(SSD,硬盘?)和系统(及其负载)。

2020-06-03