在发现存储实际性能和预期存在较大差距,特别是性能差距在2倍左右时,4K对齐就可能是罪魁祸首。现在SSD读写速度较快,所以通常都是在压力较大的时候出现异常。
原因
早期硬盘每个扇区以512字节为标准。新一代硬盘扇区容量为4096个字节,也就是所说的4k扇区。
硬盘标准更新,但操作系统一直使用的是512字节扇区的标准,所以硬盘厂商为了保证兼容性,把4k扇区模拟成512字节扇区。
通常文件系统的块(簇)是512字节的倍数,新的系统基本上都设成了4k的倍数。比如Linux的簇一般也是4k。
簇到扇区的映射关系变成了 簇(4k)->512B扇区->4k扇区,这就可能造成簇到扇区映射错位。
图中,黄色8个块对应现在的4k扇区,每块512B。对齐的时候,操作一个系统块,相应的会操作一个物理扇区。如果没有对齐,操作一个系统块时,就需要操作2个物理扇区。整体的IO吞吐自然就下降了。所以,我们需要对齐扇区,避免IO被放大。
如何判断系统是否4k对齐
Windows下
开始-运行-“msinfo32”-进入系统信息
展开 组建-存储-磁盘,查看里面的分区起始偏移。
如果起始偏移正好是4k(4096字节)的倍数,说明4k对齐。
Linux下
使用fdisk -lu命令。命令中u是让分区表用扇区值。
> fdisk -lu
Disk /dev/xvda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0007ce89
Device Boot Start End Blocks Id System
/dev/xvda1 * 2048 41943039 20970496 83 Linux
可以看到start的值,这显示的是对应扇区的起始位置。这里的扇区指的是512B大小的扇区。所以,如果起始扇区值是8的倍数,则说明磁盘4k对齐。
其它地方的4K对齐
上面说的都是本地系统的4k对齐,因为本地盘的物理sector肯定是从0开始,但还有一种情况。
随着云计算的发展,越来越多的业务放到云上,虚拟机,云盘,是最常用的两大件。云盘是一个分布式存储,虚拟成块设备挂到虚拟机。
如果,分布式存储本身并没有做好4K对齐,那块块设备外挂到虚拟机上后,最终的IO依然不会对齐,即使虚拟机上看一切正常。这种情况,就需要云服务商来处理了。
暂无评论内容