我们正在为文件服务器设置 ADAPT0(类似 RAID-60)配置。
我们有六个磁盘池。每个池由 14 个磁盘组成,并使用 ADAPT 设置。根据戴尔官方白皮书,ADAPT 与 RAID 6 类似,但会分配备用容量。第 13 页显示,每个磁盘池的块大小为 512 KiB,条带宽度为 4 MiB(超过 8 个磁盘)。
我的理解是,对于每个 14 个磁盘池,保留 2 个磁盘的容量作为备用,剩余 12 个磁盘中的 20%(2.4 个磁盘的容量)用于奇偶校验,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
,我们可以看到写入时/dev/sda
和的 I/O 。/dev/sdb
/dev/mapped/vg--gw-vol
我们的配置正确吗?更具体地说:
(1)将 LVM 条带大小与硬件 RAID(512 KiB)的大小对齐是否正确?
(2)按照我们的要求(512 KiB 条带大小和 16 个数据磁盘)对齐 XFS 条带单元和宽度是否正确,还是我们应该“抽象”底层卷(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
谢谢你!
答案1
我会避免在 ADAPT 之上插入 RAID0 层。相反,我会创建一个包含两个阵列的简单线性 LVM 池,或者创建一个包含 28 个磁盘的阵列(根本不使用第二个控制器)。
如果两个阵列的线性 LVM 连接,XFS 将凭借其自己的分配组策略为您提供额外的性能(由于文件系统同时向各个 LBA 范围发出多个 IO)。
但是,由于总备用容量与用户数据相比较少,单个 28 个磁盘池应能提供略好一点的空间效率。
关于 XFS 选项,您应该su=512k,sw=8
基于 ADAPT 布局使用。无论如何,对于配备大型断电保护写入缓存的高端控制器,这应该会产生很小的影响。