现代硬盘都是“高级格式“,例如,默认情况下,它们报告逻辑/物理扇区大小为 512/4096。
默认情况下,大多数 Linux 格式化工具使用 4096 字节的块大小(至少这是 Debian/EXT4 上的默认值)。
直到今天,我还认为这是一种优化:Linux/EXT4 将 4K 数据块发送到 HDD,HDD 可以最佳地处理它们,即使其逻辑扇区大小为 512K。
但今天我读到这篇最近(2021)的帖子。该人做了一些 HDD 基准测试,以检查将 HDD 的逻辑扇区大小从 512e 切换到 4Kn 是否会提供更好的性能。他的结论是:
请记住:我的理论是文件系统使用 4k 块,并且所有内容都正确对齐,因此不应该有有意义的差异。
这成立吗?嗯,不。一点也不。 (...) 使用 4kb 块...这里有一个非常大的差异。这是单线程基准测试,但在 4kb 块传输上,4k 扇区驱动器始终存在巨大领先优势。 (...)
结论:使用 4k 扇区!
就我而言,这里的结论非常清楚。如果您拥有可以处理 4k 扇区的现代操作系统,并且您的驱动器支持以 512 字节或 4k 扇区运行,请在执行其他操作之前将驱动器转换为 4k 本机扇区。然后继续你的方式,让操作系统来处理它。
基本上,他的结论是,与开箱即用的 512e 相比,将 HDD 的逻辑扇区大小切换为 4Kn 后性能得到了相当大的改进:
现在,需要注意的重要一点是:该特定基准测试是单线程的。他还做了一个 4 线程基准测试,结果显示 512e 和 4Kn 之间没有任何显着差异。
因此我的问题是:
- 仅当您有在驱动器上读/写的单线程进程时,他的结论才成立。 Linux有这样的单线程进程吗?
- 因此,您是否建议将 HDD 的逻辑扇区大小设置为 4Kn ?
答案1
根据 @Tomes 的建议,我试图根据我与 @user10489 的评论交换来回答我自己的问题。
当然,我不是这方面的专家,所以如果需要,请随时修改或更正我的陈述。
但首先需要澄清一下,因为在很多网站上,人们混淆了块大小和扇区大小:
- 块是文件系统可以处理的最小数据量(默认情况下通常为 4096 字节,例如 EXT4,但可以在格式化期间更改)。我相信 Windows 世界里有一个叫做集群的东西。
- 扇区是驱动器可以处理的最小数据量。大约从 2010 年开始,所有 HDD 都使用 4096 字节扇区(例如,物理扇区大小为 4096 字节)。但为了与只能处理 512 字节扇区 HDD 的旧操作系统保持兼容,现代驱动器仍然将自己呈现为 512 字节 HDD(例如,其逻辑扇区大小为 512 字节)。从操作系统看到的逻辑 512 字节到 HDD 的物理 4096 字节的转换是由 HDD 的固件完成的。这就是所谓的高级格式硬盘(又名 512e/4Kn HDD,
e
用于模拟和n
本机)
因此,开箱即用的 HDD 的逻辑扇区大小为 512 字节,因为驱动器制造商希望所有操作系统(包括旧操作系统)都能识别它。但所有现代操作系统都可以处理本机 4K 驱动器(Linux 可以做到这一点)自 2010 年内核 2.6.31 起)。因此,一个合理的问题是:如果您知道自己永远不会使用 2010 年之前的操作系统,那么在使用新 HDD 之前将其逻辑扇区大小从 512 字节修改为 4096 字节是否有意义?
有人做了一个基准测试找出这样做是否有真正的好处,并发现只有在一种情况下才有真正的区别:单线程 R/W 测试。在多线程测试中,他没有发现显着差异。
我的问题是:这个特定的用例是否适用于现实生活?例如,Linux 是否执行大量单线程 R/W 操作?在这种情况下,将 HDD 的逻辑扇区大小设置为 4096 将带来一些实际的好处。
这个问题我还是没有答案。但我认为另一种看待它的方法是,在现代操作系统上,将驱动器的默认 512 字节逻辑扇区大小更改为 4096 字节并没有什么坏处:如果操作系统这样做,最好的情况是您会获得一些性能改进单线程 R/W 操作,最坏的情况没有任何变化。
同样,驱动器使用开箱即用的 512 字节逻辑扇区的唯一原因是为了与 2010 年之前的旧操作系统保持兼容。在现代操作系统上,将其设置为 4096 字节不会有什么坏处。
最后要注意的一件事是,并非所有 HDD 都支持该更改。据我所知,那些这样做的人明确报告其支持的逻辑扇区大小:
# hdparm -I /dev/sdX | grep 'Sector size:'
Logical Sector size: 512 bytes [ Supported: 512 4096 ]
Physical Sector size: 4096 bytes
然后也可以使用hdparm
或制造商的专有工具对其进行更改。
[ 编辑 ]
但将逻辑扇区大小从 512 更改为 4K 可能不是一个好主意,这是有原因的。根据维基百科除了操作系统之外,应用程序也是使用基于 512 字节的代码的潜在领域:
那么,这是否意味着即使使用支持 4Kn 的现代操作系统,如果特定应用程序不支持它,您也会遇到麻烦?
在这种情况下,保留 HDD 的默认 512e 逻辑扇区大小可能更有意义,除非您可以绝对确定所有应用程序都可以处理 4Kn。
[编辑2]
再想一想,在现代硬件和软件上切换到 4K 扇区可能没有太大风险。大多数软件将在文件系统级别工作,那些具有直接原始块访问权限的软件(格式化工具、克隆工具等)可能会支持 4K 扇区,除非它们已经过时。也可以看看将 HDD 扇区大小切换为 4096 字节
答案2
我不精通文件系统,但在阅读您的文章后,我立即问自己基准测试是如何执行的,以及所示的图表是否可能仅仅由于用于将数据传输到磁盘的总线而支持更大的块大小。
也许您需要使用我收集到“稍后阅读”列表中的一些链接。关于多线程 I/O:我假设您需要单独的总线才能真正将数据并行传输到磁盘。
无论如何,我是绿色的,但也许你喜欢这些读物:
如果您对特定的文件系统感兴趣,我还希望您能够指出简单的手册页。手册页中有描述的选项,在底部您可以找到支持功能所需的内核版本。但是阅读你的问题这对你来说可能已经很明显了。抱歉没有回复。