
まとめ
Proxmox VE 7 (Bullseye) の ZFS SSD ミラーで、I/O パフォーマンスが劇的に変動しているのがわかります。私は初心者すぎて、自分で原因を突き止めることができません。
詳細
これは現実世界のタスクでは非常に顕著にパフォーマンスが低いため、単なる人工的なベンチマークではありません。しかし、これを診断するために、以下を実行しています。
sysbench fileio --file-test-mode=rndrw run
VM をアクティブにせずに Proxmox ターミナルから「ベアメタル」を実行しています。結果は大きく異なります。次の 2 つの例を示します。
File operations:
reads/s: 2316.07
writes/s: 1544.08
fsyncs/s: 4949.70
Throughput:
read, MiB/s: 36.19
written, MiB/s: 24.13
General statistics:
total time: 10.0062s
total number of events: 88040
Latency (ms):
min: 0.00
avg: 0.11
max: 35.66
95th percentile: 0.65
sum: 9947.54
Threads fairness:
events (avg/stddev): 88040.0000/0.00
execution time (avg/stddev): 9.9475/0.00
そして
File operations:
reads/s: 22.60
writes/s: 15.07
fsyncs/s: 56.98
Throughput:
read, MiB/s: 0.35
written, MiB/s: 0.24
General statistics:
total time: 10.6162s
total number of events: 877
Latency (ms):
min: 0.00
avg: 11.43
max: 340.62
95th percentile: 77.19
sum: 10020.19
Threads fairness:
events (avg/stddev): 877.0000/0.00
execution time (avg/stddev): 10.0202/0.00
ご覧のとおり、イベントの総数は 10,000 倍に増加し、レイテンシも大幅に増加しています。これらの変動は「一回限り」のものではありません。このような極端な値の間で常に変動しています。
単純なハードウェアの問題を絞り込むために最善を尽くしました。両方の SSD は新品で、smartctl に 100 がすべて入っています。SATA ケーブルを交換しました。ミラーを劣化させて実行し、単一のドライブの問題を切り分けようとしました。ドライブを別の SATA コントローラーに移動しました。何も結果は変わりません。
2 台目のサーバーも同様の構成になっていますが、ミラーには古い (そして一致しない) SSD が使用されています。この問題は発生していません。ただし、サーバーのハードウェアは異なります。悪い結果は、以下に説明するシステムから得られています。「正常」に見える結果は、E3-1275v2 を搭載した古い改造 PC から得られています。
私が期待しているのは、この問題の診断に役立つヒントです。問題はレイテンシーにあるようです。原因は何でしょうか? 次に何をすべきでしょうか?
前もって感謝します!
システム (役に立つなら)
- MB: スーパーマイクロ X9DRi-F
- CPU: デュアル Xeon E5-2650 v2
- RAM: 128 GB (8 x 16GB)
- SATA コントローラ: オンボード SATA 3 (別途 SATA 2 もテスト済み)
- SSD: 2x 1GB TeamGroup SATA (安いですが、問題ないはずです)
- PCIe カード:
- メラノックス MCX312B
- LSI SAS9207-8i (8 つのマウントされていないディスクに接続された HBA...VM にパススルー)
- Nvidia GTX 750 (VM にパススルー)
答え1
昨日、私の新しいセットアップでも同じようなことが起こりました。32 GB の RAM と 2 台の SSD Crucial BX500 (これらは消費者向けグレード) を搭載した Intel 11500 上の Proxmox VE 7 を ZFS ミラーとして構成しました。
dd
を使用してSSD に 1GB のゼロを書き込むベンチマークを実行したところ、5 MB/秒で実行されました (dd
ベンチマークには適していないことは承知していますが、それでも...)。ベンチマーク中、iostat
は 100% の使用率でした。私の場合は、SSD をトリミングすることでパフォーマンスの問題を解決しました。 を使用して強制的に実行することもzpool trim rpool
、 を使用して自動トリミングを有効にすることもできますzpool set autotrim=on rpool
。ディスクをトリミングした後、ベンチマークを再度実行したところ、7 秒 (153 MB/秒) で実行されました。
パフォーマンスを向上させる方法を見つける過程で、私は推奨されているように設定しxattr
ました。sa
プロクスモックスウィキzfs_arc_min
そして、 /とその他のカーネルパラメータを調整しましたzfs_arc_max
。
これがあなたにも役立つことを願っています。
答え2
SSD の 4096 セクターに合わせるには、ashift=12 で SSD 上に zfs プールを作成する必要があります。
現在の値を確認する
zpool get all pool_name | grep ashift
また、パーティションのアラインメントを1MB(2048 512バイトセクター)にチェックします。
答え3
zfs はコピーオンライト ファイルシステムです。安価な SSD には非常に不向きです。この SSD を Windows マシンで直接テストするには、セキュア消去して完全な書き込みテストを実行します (HD チューンで実行できると思います)。すると、SLC \ RAM が不足しているときのこの SSD のパフォーマンスがわかります... 非常に低くなります... SATA の 500 mb/s 以上ではなく、50-70 mb/s 程度です。また、一部の安価な SSD は、独自の RAM モジュールまたは SLC キャッシュではなくシステム RAM を使用しますが、これも zfs には不向きです。この情報が、SSD を 980 pro に変更することで解決した同様の問題 (ただし、コストの関係でサイズが小さい) に役立つことを願っています。