我们正在为文件服务器设置 ADAPT0(类似 RAID-60)配置。
我们有六个磁盘池。每个由 14 个磁盘组成,并使用 ADAPT 进行设置。根据戴尔的官方白皮书,ADAPT 与 RAID 6 类似,但分配的是备用容量。在第 13 页上,指示每个磁盘池的块大小为 512 KiB,条带宽度为 4 MiB(超过 8 个磁盘)。
我的理解是,对于每 14 个磁盘池,保留 2 个磁盘容量作为备用磁盘,剩余 12 个磁盘(2.4 个磁盘容量)的 20% 用于奇偶校验,80%(9.6 个磁盘)用于存储。但是,块大小为 512 KiB,条带宽度仍为 4MiB,因为我们只在一个连续块中写入 8 个磁盘。
为了实现 ADAPT0(类似 RAID-60)配置,我们随后创建了一个逻辑卷,该卷使用 LVM 在两个磁盘池上进行条带化。我们的意图是最终拥有 3 个条带卷,每个卷在两个磁盘池上进行条带化。我们使用了与硬件 RAID (512 KiB) 相匹配的条带大小:
$ vgcreate vg-gw /dev/sda /dev/sdb
$ lvcreate -y --type striped -L 10T -i 2 -I 512k -n vol vg-gw
接下来,在条带化逻辑卷上设置 XFS 文件系统。根据XFS.org和其他一些来源的指南,我们将条带单元su
与 LVM 和 RAID 条带大小 (512k) 进行匹配,并将条带宽度设置sw
为 16,因为我们有 16 个“数据磁盘”。
$ mkfs.xfs -f -d su=512k,sw=16 -l su=256k /dev/mapper/vg--gw-vol
$ mkdir -p /vol/vol
$ mount -o rw -t xfs /dev/mapper/vg--gw-vol /vol/vol
我们对 4KiB 块大小的顺序 I/O 性能进行了基准测试/dev/sda
,/dev/sdb
并/dev/mapped/vg--gw-vol
使用
fio --name=test --ioengine=posixaio --rw=rw --bs=4k --numjobs=1 --size=256g --iodepth=1 --runtime=300 --time_based --end_fsync=1
我们惊讶地获得了类似的表现:
Volumes Throughput Latency
--------------------- ---------- ----------
/dev/sda 198MiB/s 9.50 usec
/dev/sdb 188MiB/s 10.11 usec
/dev/mapped/vg--gw-vol 209MiB/s 9.06 usec
如果我们使用 I/O 监控工具bwm-ng
,我们可以看到两者的 I/O/dev/sda
以及/dev/sdb
写入时的I/O /dev/mapped/vg--gw-vol
。
我们是否正确配置?进一步来说:
(1) 将 LVM 条带大小与硬件 RAID (512 KiB) 的大小对齐是否正确?
(2) 对齐 XFS 条带单元和宽度是否正确(512 KiB 条带大小和 16 个数据磁盘),或者我们应该“抽象”底层卷(4 MiB 条带大小和 2 个数据磁盘)?
(3) 更令人困惑的是这里块设备的自我报告输出:
$ grep "" /sys/block/sda/queue/*_size
/sys/block/sda/queue/hw_sector_size:512
/sys/block/sda/queue/logical_block_size:512
/sys/block/sda/queue/max_segment_size:65536
/sys/block/sda/queue/minimum_io_size:4096
/sys/block/sda/queue/optimal_io_size:1048576
/sys/block/sda/queue/physical_block_size:4096
谢谢!
我会避免在 ADAPT 之上插入 RAID0 层。相反,我会创建一个包含两个阵列的简单线性 LVM 池,或者,创建一个 28 个磁盘阵列(根本不使用第二个控制器)。
如果两个阵列的线性 LVM 串联,XFS 将凭借其自己的分配组策略(由于文件系统同时向各种 LBA 范围发出多个 IO)为您提供额外的性能。
但是,由于总备用容量与用户数据相比,单个 28 磁盘池应提供略高的空间效率。
关于 XFS 选项,您应该
su=512k,sw=8
基于 ADAPT 布局使用。无论如何,对于配备大功率损耗保护写缓存的高端控制器,这应该有轻微的影响。