美文网首页
write(2)最佳的缓冲大小

write(2)最佳的缓冲大小

作者: 东东东东东东丶 | 来源:发表于2018-06-29 08:40 被阅读0次

    原文:Optimal buffer size for write(2)

    翻译:

    前说一下,我想要写1GB的数据到文件中,在Linux ext3文件系统中使用 write(2)系统调用,发生了非常繁忙的环境(许多IO操作)。在这期间最佳的缓冲大小是多少呢,比如说,4kb,4Mb,什么时候:

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

    2.使用 O_DIRECT

    请不要使用“取决于你自己”这样的答案----我想得到一些答案从文件系统的使用者中。


    Answers1:

    正如评论中讨论的那样,我相信精确的大小不是很重要,比如说:

    1.文件系统大小的一小块

    2.2的幂(因此系统和内核喜欢它)

    3.不太大(适合处理器的一些缓存,比如L2缓存)

    4.内存对齐(例如page大小使用posix_memalign)

    所以,在 16kbytes到几M字节之间的2的幂的数都应该是可以的。大部分的时间应该是花费了在读磁盘上。文件系统和硬盘的基准应该差不多。

    4kbytes通常是page和硬盘chunk的大小。

    当然,你可以调整这些事情,在你使用 mke2fs制作文件系统的时候。

    我敢打赌最佳的情况取决于你的硬盘(SSD还是普通硬盘)和你的系统(负载)。


    Answers2:

    根据我的经验回答,更多取决于底层设备和硬件而不是文件系统本身--即设备上的缓存,以及设备写入小块的能力。然而,你不应该写入比你文件系统块更小的数据(stat(.),一般是4kb)--同样,你不应该超出CPU L2、L3缓存大小,在大多数情况下,大小可能低到512kb。

    SSD设备一般使用64kb作为操作单元,因此我建议缓冲的大小在 64kb~128kb应该是最优的--这样是我的经验值。


    Answers3:

    包含stdio.h头文件,应该将BUFSIZ定义为系统的最佳大小。 这绝不是保证,但如果你无法执行广泛的基准测试,这是正确的值,或者这是一个进行基准测试的一个起始值。

    相关文章

      网友评论

          本文标题:write(2)最佳的缓冲大小

          本文链接:https://www.haomeiwen.com/subject/fzmiyftx.html