硬盘报告其物理扇区大小有什么意义?

硬盘报告其物理扇区大小有什么意义?

我有一块固态硬盘,可以配置为以两种不同的方式向操作系统报告其物理扇区大小:

选项1:逻辑 = 512 字节,物理 = 512 字节

选项 2:逻辑 = 512 字节,物理 = 4096 字节 (4K)

考虑到以下因素,操作系统了解 4K 物理扇区大小可以获得哪些好处:

  • 操作系统必须以 512 字节扇区为单位与驱动器通信,无论

  • 所有现代操作系统都与 4K 对齐,并使用 4K 或 4K 的倍数 I/O,无论

该设置似乎毫无意义,因为现代操作系统已经针对 4K 扇区驱动器进行了优化。现代操作系统不需要“询问”驱动器的扇区是 512b 还是 4K,因为操作系统默认以 4K 友好的方式执行所有操作。

例如,Windows 7 将分区对齐为 1MB(4K 的倍数),NTFS 簇大小为 4K 或其倍数,所有 I/O 都以 4K 或其倍数完成。Windows 不会在乎你拥有什么硬盘,它会在全部案件。

无论如何...我的 SSD 有这个“物理扇区大小”设置,所以它的存在一定有充分的理由...这就是我正在寻找的原因。

顺便说一句,就其价值而言,这款驱动器是一款英特尔固态硬盘 DC S3510. 驱动器的数据表说了这样的话(第 27 页):

通过使用 State=0、Option=1 的 SCT 命令 0xD801,ID Word 106 可以从 0x6003 更改为 0x4000(支持 4KB 物理扇区大小到 512B 物理扇区大小的更改)。

答案1

512 字节模拟是为了与旧系统兼容。但是,仅涉及物理 4K 扇区的一部分的写入可能会导致性能下降,因为需要先读取和修改该扇区,然后才能实际写入。

当旧版操作系统尝试写入高级格式磁盘时,可能会出现性能问题,因为写入的逻辑扇区可能与物理扇区不匹配。

  • 当只读取 4K 物理扇区的一部分时,数据只是从物理扇区读取,性能不会降低。但是,当系统尝试写入部分物理扇区(例如模拟的 512 字节扇区,而不是整个物理扇区)的写入,硬盘需要读取整个物理扇区,修改硬盘内部存储器中更改的部分,并将其写回盘片。这称为读-修改-写平均边距),此操作需要磁盘额外旋转一次,因此会降低性能。希捷对此的解释如下

[...] 硬盘必须首先读取包含主机写请求的目标位置的整个 4K 扇区,将现有数据与新数据合并,然后重写整个 4K 扇区:

读-修改-写循环

在这种情况下,硬盘必须执行额外的机械步骤,即读取 4K 扇区、修改内容,然后写入数据。这个过程称为读取-修改-写入循环,这是不可取的,因为它会对硬盘性能产生负面影响。

未与 4K 边界对齐的磁盘分区也会导致性能下降。

  • 传统上,硬盘上的第一个分区从扇区 63 开始。Windows XP 和较旧的操作系统以这种方式对磁盘进行分区。较新版本的 Windows 将在 1 MB 边界上创建分区,以确保与物理扇区正确对齐。这称为对齐 0

  • 由于 LBA 63 不是 8 的倍数(8 个 512 字节的传统扇区可装入 4K 扇区),因此以旧方式格式化的高级格式磁盘将具有未与 4K 磁盘上的物理扇区对齐的簇(文件系统数据分配的最小单位,通常为 4K),这种情况称为对齐 1. 因此,原本涉及 4K 数据的 I/O 操作现在跨越两个扇区,从而导致读取-修改-写入操作,从而降低性能。

如果操作系统始终在 4K 边界上写入数据,则有关物理扇区大小的信息是不必要的,但执行低级 I/O 的应用程序可能仍需要这些信息。

  • 当驱动器报告其物理扇区大小为 4K 时,操作系统或应用程序可以判断它是高级格式驱动器,因此必须避免执行未跨越完整物理扇区的 I/O 操作。报告 512 字节原生扇区的驱动器不会施加此限制。虽然较新的操作系统通常会尽可能尝试以 4K 为单位读取或写入数据(使此信息变得无关紧要),但执行低级 I/O 的应用程序可能需要知道物理扇区大小,以便它们可以进行相应调整并避免导致 RMW 周期缓慢的未对齐或部分扇区写入。

您的 SSD 具有更改报告的物理扇区大小的功能,因为这对于与某些存储阵列兼容是必要的。

  • 数据中心通常具有由传统 512n 驱动器组成的存储阵列。4K 驱动器(即使是模拟 512 字节扇区的驱动器)可能与此类阵列不兼容,因此此功能对于确保兼容性是必要的。请参阅此论坛主题

    我们不能直接将 4K 驱动器插入使用 512b 磁盘格式化的阵列中。许多阵列(最值得注意的是基于 ZFS 的存储,随着软件定义存储的兴起,这种存储越来越受欢迎)不会接受具有不同物理扇区格式的替换驱动器。

    请注意,如果驱动器配置为使用 4K 扇区,则在现代系统上将获得更好的性能。

答案2

无论如何,当操作系统必须以 512 字节扇区与驱动器通信时,通过了解物理扇区大小,操作系统能获得什么好处呢?

逻辑大小是转移数据。由于这是一个块设备,因此主机和驱动器之间的任何数据传输都将是该逻辑块大小的倍数。

物理尺寸是最佳尺寸转移数据,并反映实际的大小控制器/驱动器级别的操作。

当主机请求读取逻辑扇区时,控制器/驱动器将对包含该逻辑扇区的物理扇区执行读取操作。
当逻辑扇区大小等于物理扇区大小时,操作很简单。当逻辑扇区大小小于物理扇区大小时,控制器必须从物理扇区中提取逻辑扇区,然后将其传输到主机。

当主机请求写入逻辑扇区时,物理扇区的大小很重要。
当逻辑扇区大小等于物理扇区大小时,写入操作很简单,可以直接进行。扇区先前内容的情况不会影响写入操作。

当逻辑扇区大小小于物理扇区大小时,控制器必须首先对包含逻辑扇区的物理扇区执行读取操作。
如果读取成功,则将逻辑扇区插入物理扇区,并将物理扇区完整写入。
如果读取不成功(即使重试后),则无法完成写入操作。

如果操作系统使用物理扇区大小执行读写操作(通过利用 ATAPI 命令集中可用的多扇区操作),则写入操作将更有效地执行(并且不会出现不必要的不​​完整机会)。

逻辑扇区大小完全定义了操作系统如何与驱动器通信。没有例外。当您只允许以逻辑扇区大小进行通信时,知道物理扇区大小有什么用呢?

您所说的“没有例外”是不正确的。
与 IDE HDD 一起引入的 ATAPI 命令集始终能够使用参数执行读写操作sector count。这仅仅是现有磁盘和软盘控制器接口的扩展,这些接口也能够执行多扇区读/写操作(只要扇区位于同一轨道上)。

答案3

如果操作系统知道底层物理扇区大小,它可以优化查询以尽可能减少物理操作。特别是对于 SSD,物理操作限制(4KB IOPS 限制)通常是设备速度的最终限制,因此能够充分利用此容量非常重要。

答案4

访问驱动器内某个位置有两种不同的方式,一种是 CHS 方案,另一种是 LBA 方案。

CHS 代表柱面、磁头、扇区,是确定从驱动器读取或写入位置的最底层方法。您告诉它使用柱面 x、磁头 y 和扇区 z,并将该位置的内容读取或写入内存(缓冲区)中的地址。它源自(传统的旋转生锈)硬盘的实际物理组件,其中有物理柱面和读取磁头。扇区是最小的可寻址单位,传统上固定为 512 字节。

LBA 是逻辑字节寻址,其中驱动器通过偏移量读取和写入扇区地址,例如,读取磁盘上的第 123837 个扇区或将其写入磁盘上的第 123734 个扇区(从零开始)。

问题是什么?每个值的范围都是有限的。事实上,由于 CHS 的限制非常严重,因此必须引入 LBA。对于 CHS,C(柱面)的可能值为 1023,而 H(磁头)的最大值为 255,S(扇区)的最大值为 63,这意味着在传统的 CHS 格式中,您最多可以映射 1024 个柱面 x 255 个磁头 x 64 个扇区 x 512 个字节,总共不到 8 GiB!使用 CHS,根本无法访问大于 8 GiB 的磁盘!

因此,LBA 引入了 32 位限制,为磁盘大小提供 2^32 x 512 字节或 2 TiB 的限制 - 这就是 MBR 磁盘不能超过 2TiB 的原因,因为它使用 CHS 和 LBA 来指定分区大小,并且两者都不能支持超过 2TiB 的任何内容。

已经引入了更新、更好的选项,例如 GPT 分区方案,它将 LBA 扩展至 64 位,为您提供远远超出您所需的 2^64 x 512 字节空间 -有一个问题:许多旧硬件、旧操作系统、旧 BIOS 实现和旧驱动程序不支持 UEFI 或 GPT,许多人希望有一些东西可以更轻松地升级以超越 2TiB 限制,而不必从头开始重写整个堆栈。最后,我们达到了 4096 扇区大小。

看看,在上面讨论的所有限制中,有一件事是固定的假设:扇区大小。从第一天起,它就是 512 字节,并且一直保持这种状态。但最近,硬盘制造商意识到有机会施展一些魔法:采用传统的 CHS 或 32 位 LBA,只需将扇区大小替换为 4096(4k),而不是 512 字节。当操作系统通过请求 LBA 1(因为 LBA 0 是第一个)表示“给我磁盘上的第二个扇区”时,我们不会给它字节 512 - 1023,而是字节 4096 - 8191。

突然间,我们的 2TiB 限制升级到 2^32 x 4096 字节,即 16 TiB,而无需放弃 MBR、切换到 UEFI 或 GPT,或者其他任何事情!

唯一的问题是,如果操作系统不知道这是一个使用 4096 个扇区而不是 512 字节扇区的魔术磁盘,就会出现不匹配的情况。每次操作系统说“嘿,你,磁盘,把这 512 个字节写入偏移量 xxx”时,磁盘就会用尽4096 字节存储这 512 个字节(其余为零或垃圾数据,假设您不会出现内存下溢),因为它们不是以字节为单位进行通信,而是以扇区为单位进行通信。

因此,BIOS 现在(有时)包含一个选项,让您手动指定应使用 512 字节扇区大小,而不是较新磁盘使用的本机 4096 字节扇区大小 - 但需要注意的是,您不能使用它来访问 MBR 系统上超过 2TiB 的磁盘,就像在“过去的美好时光”一样。但是,支持 4k 的现代操作系统可以利用所有这些优势,使用这种魔力以 4096 字节块进行读写,然后就大功告成了!

(另外一个优点是速度更快,因为如果您一次读取和写入 4096 个字节,那么读取或写入 4GiB 数据的操作就会更少。)

相关内容