谁在写入磁盘时确定块大小?

时间:2014-08-20 16:17:37

标签: linux windows io disk dd

这可能是一个天真的问题,但我无法找到答案。

在使用dd工具,fio和bonnie ++等IO工具时,其中一个工具参数是设置将在测试中使用的块大小。因此,可以将块大小设置为512 KB,1 MB甚至更多。随着块大小越来越大,输出MB / s也越来越高,我认为这是合乎逻辑的,因为你可以用更少的块写入。

所以我的问题是:

- 在某些内核中,默认块大小为4 KB或32 KB时,进程如何发生?!

- 在任何其他应用程序中,谁确定要在磁盘上写入的块大小?它是应用程序本身还是操作系统?!

- 例如,数据库应用程序的典型块大小是什么?!

提前致谢:)

1 个答案:

答案 0 :(得分:1)

如果使用类似dd的内容,则执行块级操作,因此可以指定块大小。在某种程度上,通过使用更大的块大小,您将获得更快的速度,但它会很快停止。从磁盘逐字节读取是非常低效的,但是当你达到几兆字节时,你将不会注意到任何进一步的速度增加。

当应用程序写入磁盘时,通常不会进行块级访问,而是读取和写入文件。操作系统负责将此文件级访问转换为块级访问。除非是以root身份运行的专用应用程序,否则它不关心块级访问,也不会涉及确定此类事物的块大小。

磁盘缓存更加复杂:当你在应用程序级别阅读某些内容时,如果你很幸运,你根本不会触摸磁盘:它将是已经缓存的东西,你将检索它从那里(没有意识到)。当你编写时,你会发现你写入缓存并且似乎立即完成,然后操作系统将在它完成时进行实际写入。只有当你进行大量写操作时,或者如果关闭缓存,你才会耗尽缓存,并且需要在控制传递回应用程序之前进行写入。

简而言之:除非您处于相当低的水平,否则您无需担心块大小。