【问题标题】:Who determine the block size when writting to a disk? [closed]写入磁盘时谁决定块大小? [关闭]
【发布时间】:2014-10-14 02:30:32
【问题描述】:
这可能是一个幼稚的问题,但我找不到直接的答案。
在使用 dd 工具、fio 和 bonnie++ 等 IO 工具时,工具参数之一是设置将在测试中使用的块大小。因此,可以将块大小设置为 512 KB、1 MB 甚至更大。随着块大小变大,输出 MB/s 也会变高,我相信这是合乎逻辑的,因为您可以在更少的块上写入。
所以我的问题是:
-在某些内核中默认块大小为 4 KB 或 32 KB 时,该过程如何发生?!
-在任何其他应用程序中,谁确定要写入磁盘的块大小?是应用程序本身还是操作系统?!
-例如,数据库应用程序的典型块大小是多少?!
提前致谢:)
【问题讨论】:
标签:
linux
windows
io
disk
dd
【解决方案1】:
如果您使用dd 之类的东西,您正在执行块级操作,因此您可以指定块大小。在某种程度上,你会通过使用更大的块大小来获得更快的速度,但它会很快消失。逐字节读取磁盘的效率非常低,但是当您达到几兆字节时,您不会注意到速度有任何进一步的提高。
应用程序写入磁盘时,一般不是进行块级访问,而是读写文件。负责将这种文件级访问转换为块级访问的是操作系统。一个应用程序,除非它是一个以 root 身份运行的专用应用程序,否则不会关心块级访问,也不会参与确定此类事情的块大小。
磁盘缓存使情况更加复杂:当您在应用程序级别读取某些内容时,如果幸运的话,您根本不会触及磁盘:它将是已经缓存的内容,您会检索它从那里(没有意识到)。当你写的时候,你会希望发现你写到了缓存中并且看起来立即完成了,然后操作系统会在它完成时执行实际的写操作。仅当您进行大量写入或缓存已关闭时,您才会耗尽缓存,并且写入需要在控制权传递回您的应用程序之前发生。
简而言之:除非您在相当低的级别上胡闹,否则您无需担心块大小。