新しい PC を買ったのでファイルシステム毎のIO性能の測定を軽くやってみました。KVM ホストの環境は以下の通り。
KVM Host: Ubuntu 20.04 (Linux 5.4.0-60-generic)
KVM Guest: Windows 10 OS Build 19042.685
CPU: AMD Ryzen 5 3600 6-core
Memory: 128 GB
SSD: WD_BLACK SN850 2TB
EXT4, XFS, ZFS でフォーマットしたディスクを /test にマウントしてそこに qcow2 のイメージをコピーして CrystalDiskMark で簡単に性能を比較してみた。
フォーマットのパラメーターはすべてデフォルト。CrystalDiskMark は 1 GB を一度計測したのみ。
------------------------------------------------------------------------------
CrystalDiskMark 8.0.0 x64 (C) 2007-2020 hiyohiyo
Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
EXT4:
[Read]
SEQ 1MiB (Q= 8, T= 1): 897.182 MB/s [ 855.6 IOPS] < 9310.23 us>
SEQ 1MiB (Q= 1, T= 1): 882.161 MB/s [ 841.3 IOPS] < 1183.96 us>
RND 4KiB (Q= 32, T= 1): 36.359 MB/s [ 8876.7 IOPS] < 3472.53 us>
RND 4KiB (Q= 1, T= 1): 33.073 MB/s [ 8074.5 IOPS] < 120.00 us>
[Write]
SEQ 1MiB (Q= 8, T= 1): 835.608 MB/s [ 796.9 IOPS] < 9726.00 us>
SEQ 1MiB (Q= 1, T= 1): 872.855 MB/s [ 832.4 IOPS] < 1196.97 us>
RND 4KiB (Q= 32, T= 1): 36.836 MB/s [ 8993.2 IOPS] < 3518.83 us>
RND 4KiB (Q= 1, T= 1): 33.367 MB/s [ 8146.2 IOPS] < 119.12 us>
XFS:
[Read]
SEQ 1MiB (Q= 8, T= 1): 995.806 MB/s [ 949.7 IOPS] < 8381.42 us>
SEQ 1MiB (Q= 1, T= 1): 889.653 MB/s [ 848.4 IOPS] < 1174.34 us>
RND 4KiB (Q= 32, T= 1): 34.602 MB/s [ 8447.8 IOPS] < 3659.19 us>
RND 4KiB (Q= 1, T= 1): 33.413 MB/s [ 8157.5 IOPS] < 118.95 us>
[Write]
SEQ 1MiB (Q= 8, T= 1): 803.229 MB/s [ 766.0 IOPS] < 10384.00 us>
SEQ 1MiB (Q= 1, T= 1): 830.395 MB/s [ 791.9 IOPS] < 1258.21 us>
RND 4KiB (Q= 32, T= 1): 34.978 MB/s [ 8539.6 IOPS] < 3620.99 us>
RND 4KiB (Q= 1, T= 1): 31.885 MB/s [ 7784.4 IOPS] < 124.74 us>
ZFS:
[Read]
SEQ 1MiB (Q= 8, T= 1): 860.625 MB/s [ 820.8 IOPS] < 9697.54 us>
SEQ 1MiB (Q= 1, T= 1): 611.799 MB/s [ 583.5 IOPS] < 1707.94 us>
RND 4KiB (Q= 32, T= 1): 33.500 MB/s [ 8178.7 IOPS] < 3812.68 us>
RND 4KiB (Q= 1, T= 1): 33.310 MB/s [ 8132.3 IOPS] < 119.36 us>
[Write]
SEQ 1MiB (Q= 8, T= 1): 587.469 MB/s [ 560.3 IOPS] < 14216.82 us>
SEQ 1MiB (Q= 1, T= 1): 533.718 MB/s [ 509.0 IOPS] < 1959.07 us>
RND 4KiB (Q= 32, T= 1): 32.717 MB/s [ 7987.5 IOPS] < 3937.58 us>
RND 4KiB (Q= 1, T= 1): 28.359 MB/s [ 6923.6 IOPS] < 140.57 us>
シーケンシャル I/O は ZFS が一段落ちる。ランダム I/O は EXT4 が意外と健闘してる。
ついでに以下は KVM ゲストが Ubuntu 20.04 の場合の dd でのテスト結果。/ のファイルシステムは ext4。
4k write: dd if=/dev/zero of=test1 bs=4k count=262144 oflag=direct
1M write: dd if=/dev/zero of=test3 bs=1024k count=1024 oflag=direct
dd | EXT4 | XFS | ZFS |
---|---|---|---|
4k write | 97.7 MB/s | 106 MB/s | 74.9 MB/s |
1M write | 1.7 GB/s | 2.3 GB/s | 1.4 GB/s |
1MBはXFSが速いが実用上は4kの性能の方が重要かもしれない。
ついでに KVM ホストでの性能を fio と dd で比較してみた。fio のパラメーターは以下を参考にさせて頂いた。
EXT4 vs XFS vs Btrfs vs ZFSをfioでベンチマークを取ってみました。
bs=4k
$ fio -rw=write -bs=4k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=seqwrite
$ fio -rw=randwrite -bs=4k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=randwrite
bs=16k:
$ fio -rw=write -bs=16k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=seqwrite
$ fio -rw=randwrite -bs=16k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=randwrite
結果はこちら。
fio | EXT4 | XFS | ZFS |
---|---|---|---|
4k seq-write | 2987MB/s | 3066MB/s | 2393MB/s |
4k rand-write | 2883MB/s | 2675MB/s | 176MB/s |
16k seq-write | 2873MB/s | 2907MB/s | 3785MB/s |
16k rand-write | 2826MB/s | 2834MB/s | 612MB/s |
ついでにddも計測してみた。
4k write: dd if=/dev/zero of=test1 bs=4k count=262144 oflag=direct
1M write: dd if=/dev/zero of=test3 bs=1024k count=1024 oflag=direct
dd | EXT4 | XFS | ZFS |
---|---|---|---|
4k write | 304 MB/s | 264 MB/s | 720 MB/s |
16k write | 949 MB/s | 832 MB/s | 1.6 GB/s |
1M write | 4.0 GB/s | 4.1 GB/s | 2.5 GB/s |
fio は 40 同時 I/O をしているはずなので実際の動作により近いかも。XFS がやや速い。fio の ZFS のランダムI/O性能は2回測定してみたが同じような値だった。ZFS は dd だと 4k/16k が凄く速いのでこれは不思議。
I/O 性能と言いながら KVM ホストでは write しか測ってないのは read だとキャッシュに乗っているらしくメチャクチャな値が出たため。まあ普通はキャッシュが有効になっているはずなので参考程度ということで。
やはり XFS で使おうかな。。