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