如何选择缓冲区大小?

时间:2014-06-28 04:34:04

标签: c linux

我正在阅读TLPI(Linux编程接口),他们似乎使用1024作为文件操作的标准缓冲区大小。我很奇怪为什么选择这个尺码。是否有“最佳”文件大小?

详细说明并希望得到进一步的见解:在哪种情况下使用512或2048字节会破坏某些东西?我假设如果1024是安全的,512也是安全的,但只是更慢,因为你必须以两倍的步数移动数据。所以,如果我的想法是正确的,缓冲区大小越大,操作越快,但这也会增加失败的可能性?

2 个答案:

答案 0 :(得分:6)

虽然我经常看到像你这样的哲学问题被投票和关闭,但我仍然喜欢他们以及他们鼓励的讨论。 (我试图将所有内容都放在评论中,但它不会起作用。)

简短的回答是,相当小的缓冲区是安全的,并且它们通常被选择为正在操作的结构的最小公分母(例如,您的示例,1,024,因为大多数文件系统分配的事实阻塞在一千字节的倍数,即1,024字节)。

更长的答案是,可变缓冲区大小(通常大于安全默认值)在软件的最佳性能中起着非常重要的作用,因为它与硬件甚至工作负载类型相互作用。所有硬件和操作系统环境都没有最佳尺寸。调整缓冲区大小是一种使程序在您的系统上更好地工作的便宜方法。因此,一些不诚实的软件开发人员也会使用它来假装他们的软件更好。例如,考虑Web服务器软件。您可以通过调整其所有缓冲区大小,然后将其与具有默认配置的Apache安装进行比较,来声明您的Web服务器软件具有更好的性能。您还可以通过使用与一个软件设置匹配的内核调整来从外部对软件进行瓶颈,但是例如,可以使另一个软件为每个请求使用额外的帧。

以这种方式进行调整也很危险,因为它可能更容易执行拒绝服务攻击,例如"慢loris" /资源枯竭。所以,小一点更安全,但不一定更好"取决于您对安全性与性能的优先级。

答案 1 :(得分:1)

只要Linux代码引用block size,它几​​乎总是1024 bytes。 Linux使用1024字节块作为缓冲区缓存等。

当然,Linux文件系统通常会实现备用块大小。标准的ext3文件系统块大小通常为4096字节。

相关问题