ソフトウェアRAIDの性能比較

alphafold2を動作させるためには約2.6TBのデータベースが必要となります。LAN経由では遅くなるので、GPUを搭載したサーバーに直接ハードディスクを増設しました。できるだけ読み取り速度を高くしたいのですが、SSDは高価で手が出せないので、2台のハードディスクでRAIDを組みました。

LinuxのソフトウェアRAIDのmdadmとlvmで性能が変わるかどうかを調べてみました。

結論

mdadmのstripeがlvmのstripeよりもランダムリードで性能が高かった。
mdadmの上にlvmをつくってもほとんど読み書きの速度に影響を与えなかった。

調査方法

OS

CentOS 7.9

ハードディスク

SEAGATE BarraCuda-4TB (ST4000DM004) 2台 (sdaとsdb)

性能測定方法

fio を使用。yum install fio としてインストール。以下のように実行

# fio -filename=$DISK/testfile_$TEST -name=${DIST}_${TEST} -output=${DISK}_${TEST}.txt \
     -rw=$TEST -direct=0 -bs=128k -size=10g -numjobs=8 -runtime=60 -group_reporting

IOPS (I/O per second)とBW (Band Width)を性能とした。

SSD (NVMe)

サーバーの起動ディスクで試したところ以下のようになった。

NVMeの性能
調査項目 IOPS BW
ランダム読込 47.1k 5883 MiB/s
連続読込 52.1k 6517 MiB/s
ランダム書込 25.3k 3164 MiB/s
連続書込 24.7k 3085 MiB/s

ランダム読込の性能はハードディスクの100倍以上と圧倒的であった。連続読込も2倍以上であったが、書き込みのほうはそれほど違いがなかった。

ハードディスク単体での性能

RAID無しでのHDDの性能
調査項目 IOPS BW
ランダム読込 197 24.7 MiB/s
連続読込 12.1k 1513 MiB/s
ランダム書込 33.9k 4236 MiB/s
連続書込 14.5k 1812 MiB/s

mdadm stripe

作成コマンド

# mdadm --create /dev/md0 --auto=yes --level=stripe --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm stripeの性能
調査項目 IOPS BW
ランダム読込 341 42.7 MiB/s
連続読込 24.6k 3073 MiB/s
ランダム書込 32.5k 4066 MiB/s
連続書込 1259 157 MiB/s

ディスク単体での性能より読込はおよそ2倍速くなった。2台のディスクから同時に読み込んでいく機能がいかんなく発揮されている。連続書き込みの性能が他よりも著しく低いのはたぶん測定時に何かをしたため。

lvm stripe

作成コマンド

# pvcreate /dev/sda1 /dev/sdb1
# vgcreate vg0 /dev/sda1 /dev/sdb1
# lvcreate --stripes 2 -l 100%FREE vg0
LVM stripeの性能
調査項目 IOPS BW
ランダム読込 202 25.3 MiB/s
連続読込 24.5k 3068 MiB/s
ランダム書込 31.0k 3881 MiB/s
連続書込 31.7k 3968 MiB/s

ランダム読込だけほぼ単体と同じで、他はmdadmのストライピングと同程度の性能であった。

mdadm stripeの上にlvm

ディスクの拡張などをしやすくするためにmdadmで作成したディスクをlvmでまとめてみた。

作成コマンド

# mdadm --create /dev/md0 --auto=yes --level=stripe --raid-devices=2 /dev/sda1 /dev/sdb1
# pvcreate /dev/md0
# vgcreate vg0 /dev/md0
# lvcreate --size 3500G vg0
mdadmのストライピングの上にLVMをつくった時の性能
調査項目 IOPS BW
ランダム読込 338 42.3 MiB/s
シーケンシャル読込 24.6k 3078 MiB/s
ランダム書込 33.0k 4125 MiB/s
シーケンシャル書込 22.6k 2821 MiB/s

LVMによる性能低下はなかったので、これを採用した。

mdadm mirroring (RAID1)

ミラーリング(RAID1)は今回の目的に合わないことはわかっていたが、ついでに調べてみた。

作成コマンド

# mdadm --create /dev/md0 --auto=yes --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
mdadmのミラーリングの性能
調査項目 IOPS BW
ランダム読込 194 24.3 MiB/s
シーケンシャル読込 11.9k 1483 MiB/s
ランダム書込 24.7k 3085 MiB/s
シーケンシャル書込 21.6k 2696 MiB/s

ディスク単体とほぼ同じ性能。書き込みの性能がやや上がっているようにみえるが、理由はわからない。