我正在阅读TLPI(Linux编程接口),他们似乎使用1024作为文件操作的标准缓冲区大小.我很奇怪为什么选择这个尺码.是否有"最佳"文件大小?
详细说明并希望得到一些进一步的见解:在哪些情况下使用512或2048字节会破坏某些东西?我假设如果1024是安全的,512也是安全的,但只是更慢,因为你必须以两倍的步数移动数据.因此,如果我的想法是正确的,缓冲区大小越大,操作越快,但这也会增加失败的可能性?
虽然我经常看到像你这样的哲学问题被投票和关闭,但我仍然喜欢他们和他们鼓励的讨论.(我试图将所有内容都放在评论中,但它不会起作用.)
简短的回答是,相当小的缓冲区是安全的,并且通常选择它们作为正在操作的结构的最小公分母(例如,您的示例1,024,因为大多数文件系统在某些文件系统中分配块)一千字节的倍数,即1,024字节).
更长的答案是,可变缓冲区大小(通常大于安全默认值)在软件的最佳性能中起着非常重要的作用,因为它与硬件甚至工作负载类型相互作用.所有硬件和操作系统环境都没有最佳尺寸.调整缓冲区大小是一种使程序在您的系统上更好地工作的便宜方法.因此,一些不诚实的软件开发人员也会使用它来假装他们的软件更好.例如,考虑Web服务器软件.您可以通过调整其所有缓冲区大小,然后将其与具有默认配置的Apache安装进行比较,声称您的Web服务器软件具有更好的性能.例如,您还可以通过使用与一个软件设置匹配的内核调整来从外部对该软件进行瓶颈,但会导致另一个软件为每个请求使用额外的帧.
以这种方式进行调整也很危险,因为它可能更容易执行拒绝服务攻击,如"慢懒"/资源耗尽.因此,小一点更安全,但不一定"更好",这取决于您对安全性与性能的优先级.
Linux 代码所指的任何时间block size,几乎都是如此1024 bytes。Linux 使用 1024 字节块作为缓冲区高速缓存等。
当然,Linux 文件系统通常实现备用块大小。标准 ext3 文件系统块大小通常为 4096 字节。