【问题标题】: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 身份运行的专用应用程序,否则不会关心块级访问,也不会参与确定此类事情的块大小。

    磁盘缓存使情况更加复杂:当您在应用程序级别读取某些内容时,如果幸运的话,您根本不会触及磁盘:它将是已经缓存的内容,您会检索它从那里(没有意识到)。当你写的时候,你会希望发现你写到了缓存中并且看起来立即完成了,然后操作系统会在它完成时执行实际的写操作。仅当您进行大量写入或缓存已关闭时,您才会耗尽缓存,并且写入需要在控制权传递回您的应用程序之前发生。

    简而言之:除非您在相当低的级别上胡闹,否则您无需担心块大小。

    【讨论】:

    • 非常感谢您的回复和解释:)
    猜你喜欢
    • 1970-01-01
    • 2019-01-09
    • 2023-03-29
    • 2021-06-28
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多