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