来自struct请求的LBA起始地址对齐

时间:2014-12-07 17:31:56

标签: linux linux-kernel linux-device-driver

我目前正在做块驱动程序。我在测试中注意到,如果 我的平台是RHEL6.x / CentOS6.x我的struct请求的开始 LBA /扇区始终与8对齐(例如0,8,0x10,0x100,0x2508等) 这实际上是我设计的驱动程序和固件的最佳选择。好像是 结构请求总是在那里对齐。

另一方面,如果我在Oracle 5.6等旧系统上测试我的驱动程序, 结构请求的起始LBA似乎没有对齐 8 - 大多数情况下LBA是非公开的(例如0x2507,300f,0x95bd500f, 等)

我的阻止队列设置,甚至从sysfs查看显示我的 逻辑块大小和物理块大小分别为512和512, 分别。所以我不认为它与4kB有关 部门。什么可能是触发这种行为的设置?是 有一个请求队列或gendisk设置控制我可能 不知道?或者这是由FS层决定的?希望有人 可以指出来。

谢谢!

1 个答案:

答案 0 :(得分:1)

几乎可以肯定,因为您的分区在较新系统上与8块边界对齐,但在旧系统上不对齐(您可以使用sfdisk详细检查分区表。)

读取将以文件系统块大小为单位,这将是系统页面大小的倍数(在最常见的体系结构上为4kB)。因此,如果您的文件系统从块设备的起始位置偏移8的非倍数,则所有读取也将从此数量的8的倍数偏移。