美文网首页
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)最佳的缓冲大小

    原文:Optimal buffer size for write(2) 翻译: 前说一下,我想要写1GB的数据到文...

  • 3.Netty入门第三章——粘包和拆包

    TCP粘包产生原因 应用程序write写入的字节数大小大于套接字发送缓冲区的大小。 进行MSS大小的TCP分段。 ...

  • mysql原理(三)mysql存储-InnoDB关键特性

    InnoDB的关键特性有:1)插入缓冲(Insert Buffer)2)两次写(Double Write)3)自适...

  • golang-channel

    缓冲的 chan, make(chan int, 缓冲大小): 表示满了 缓冲大小后 就开始堵塞,无法在往 管道 ...

  • OutputStream 输出流 写

    // 带写缓冲区,缓冲区大小10,缓冲区内存中, 1,2,3,4把他们都放到缓冲区--缓冲区满是才写到文件 // ...

  • Socket缓冲区以及阻塞模式

    socket缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/sen...

  • NIO 解析

    1、传统IO,他是面向流的模式、阻塞式(read() 或write()时线程被阻塞,直到读完)2、NIO 面向缓冲...

  • 5、响应输出

    write 将chunk数据写到输出缓冲区。 缓冲区数据刷新到浏览器是由socket来控制。 缓冲区刷新的几种方式...

  • 使用缓冲字节流读写数据

    1)适用于读写文件容量大的文件; 2)在标准字节流的基础上,增加缓冲流; 3)通过改变缓冲区大小或字节数组大小来进...

  • IO模型

    IO读写 read:把数据从内核进程复制到进程缓冲区 write:把数据从进程缓冲区复制到内核缓冲区 阻塞IO 需...

网友评论

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

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