优化SSDs和高级格式化驱动器的性能

来自Lustre文件系统
跳转至: 导航搜索

以下内容是摘自ZFS Linux项目网站上的常见问题FAQ一节,请参考: https://github.com/zfsonlinux/zfs/wiki/faq.

高级格式化(AF)是一种磁盘格式,这种格式本身的扇区大小是4,096字节而不是512字节的。但为了保持与传统系统的兼容性,AF磁盘模拟了512字节的扇区大小。

ZFS默认会自动检测磁盘的扇区大小。但是,当尝试检测自动AF磁盘的扇区大小时,ZFS将无法检测到扇区本身的大小,而会检测到磁盘报告的模拟扇区大小。这可能导致磁盘访问的不一致问题,从而降低ZFS池的性能。

因此,zpool命令中添加了对ashift属性的设置。这样用户可以在首次将设备添加到池中时(通常在创建池或向池中添加vdev时)显式地分配扇区大小。ashift值的范围是9到16,默认值为0意味着ZFS应该自动检测扇区大小。

这个问题在硬盘上很少见,因此可能没有必要更改ashift值。然而有报道称,固态硬盘通过显示设置ashift属性来匹配4096字节的扇区大小而提高了性能。

ashift的值实际上表示移动了多少位,因此512字节的ashift值是9 (29 = 512),而4,096字节的ashift值是12 (212 = 4,096)。在创建池时,强制使用4,096字节扇区的命令如下:

$ sudo zpool create -o ashift=12 tank mirror sda sdb

向池中添加vdev时,强制池使用4,096字节扇区的命令如下:

$ sudo zpool add -o ashift=12 tank mirror sdc sdd

注意:不要将分配扇区大小的 ashift属性设置为大于物理设备块大小的值。逻辑块和物理块大小可以从sysfs中读取:

cat /sys/class/block/<dev>/queue/logical_block_size
cat /sys/class/block/<dev>/queue/physical_block_size