这可能是一个天真的问题,但我无法找到答案。
在使用dd工具,fio和bonnie ++等IO工具时,其中一个工具参数是设置将在测试中使用的块大小。因此,可以将块大小设置为512 KB,1 MB甚至更多。随着块大小越来越大,输出MB / s也越来越高,我认为这是合乎逻辑的,因为你可以用更少的块写入。
所以我的问题是:
- 在某些内核中,默认块大小为4 KB或32 KB时,进程如何发生?!
- 在任何其他应用程序中,谁确定要在磁盘上写入的块大小?它是应用程序本身还是操作系统?!
- 例如,数据库应用程序的典型块大小是什么?!
提前致谢:)
答案 0 :(得分:1)
如果使用类似dd
的内容,则执行块级操作,因此可以指定块大小。在某种程度上,通过使用更大的块大小,您将获得更快的速度,但它会很快停止。从磁盘逐字节读取是非常低效的,但是当你达到几兆字节时,你将不会注意到任何进一步的速度增加。
当应用程序写入磁盘时,通常不会进行块级访问,而是读取和写入文件。操作系统负责将此文件级访问转换为块级访问。除非是以root身份运行的专用应用程序,否则它不关心块级访问,也不会涉及确定此类事物的块大小。
磁盘缓存更加复杂:当你在应用程序级别阅读某些内容时,如果你很幸运,你根本不会触摸磁盘:它将是已经缓存的东西,你将检索它从那里(没有意识到)。当你编写时,你会发现你写入缓存并且似乎立即完成,然后操作系统将在它完成时进行实际写入。只有当你进行大量写操作时,或者如果关闭缓存,你才会耗尽缓存,并且需要在控制传递回应用程序之前进行写入。
简而言之:除非您处于相当低的水平,否则您无需担心块大小。