2014-12-07 50 views
0

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

在另一方面,如果测试我的司机在一些比较老的系统,如Oracle 5.6, 起始LBA为结构的请求,这似乎并没有被对准 8 - 该LBA被offseted大多数情况下(如0x2507,300F ,0x95bd500f, 等)

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

谢谢!

+0

*“所以我不认为它与4kB扇区有关”* - 为什么不呢?你有没有听说过“向前兼容”?或者当扇区大小为4K字节时512B /扇区仿真的最佳性能如何?阅读http://www.seagate.com/tech-insights/advanced-format-4k-sector-hard-drives-master-ti/ – sawdust 2014-12-07 23:35:03

+0

嗯,我认为,因为我的sysfs条目读取逻辑和物理两个512字节块并没有提及4kb。其他条目,如alignment_offset,minimum_io_size和optimal_io_size分别为0,512,0。无论你如何建议可能值得研究,我如何验证在我的新系统中实现向前兼容性?所以我会在我的旧系统中实现它,比如oel 5.6。 – ubermensch 2014-12-09 02:34:34

回答

1

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

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

+0

我检查了你的建议,但用fdisk。我主要在分区时使用“fdisk/dev/”,这是我对旧的(OEL5.6)和较新的系统所做的。由此产生的分区在转换为扇区时,旧系统和新系统都提到我的分区1以扇区/ LBA 63开始。这是否意味着无论哪种方式,我的分区已经不对齐8个块? – ubermensch 2014-12-09 12:15:46

+0

是的。这在旧版本的fdisk中很常见,但新版本应该默认启动LBA 2048的第一个分区。 – caf 2014-12-10 10:47:21

+0

谢谢。我已经验证过,如果我将分区的开始与4kB c/o fdisk对齐,则在文件访问期间,我不会获得非4kB对齐的LBA。 – ubermensch 2014-12-12 11:41:14