Car*_*s00 3 c c++ linux filesystems gcc
假设我想在文件中写入1 GB的数据,比如说ext3
使用write(2)
系统调用的Linux文件系统,这种情况发生在一个非常繁忙的环境中(许多类似的I/O很简洁).什么是在区间的最佳缓冲区大小,说,[4 kB, 4 MB]
这样做,当
O_DIRECT
开放标志,或O_DIRECT
?请不要"自己检查"答案 - 我想从"文件系统"人那里得到答案.
根据我的经验,答案更多地依赖于底层设备和硬件而不是文件系统本身 - 即设备上的缓冲区缓存,以及设备以小块等方式写入的功能 - 但是你永远不应该写入尺寸小于文件系统块大小(stat(.)
可能大约4kb) - 同样,你不应该超越CPU的L2/L3高速缓存大小,在许多情况下可以低至512kb.
鉴于SSD设备和类似像 64KB的作为操作的单元,然后我会建议的缓冲区大小64KB-128KB是最优化-这也符合我的作为具有最高吞吐量的实际经验.
正如评论中所讨论的那样,我认为确切的大小并不重要,假设它是:
stat(".")
等)posix_memalign
).因此,16k字节和几兆字节之间的2的功率应该是合适的.大部分时间都花在阅读磁盘上.文件系统和磁盘基准测试在该范围内非常平坦.
4Kbytes似乎通常是页面大小和磁盘块大小.
当然,在制作mke2fs
文件系统块大小时,您可以调整内容,甚至调整.
我敢打赌,最优化实际上取决于您的硬件(SSD,硬盘?)和您的系统(及其负载).