![小さなファイルがたくさんある場合、JBOD とストライピングのどちらが適していますか?](https://rvso.com/image/1672308/%E5%B0%8F%E3%81%95%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%82%E3%82%8B%E5%A0%B4%E5%90%88%E3%80%81JBOD%20%E3%81%A8%E3%82%B9%E3%83%88%E3%83%A9%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%81%AE%E3%81%A9%E3%81%A1%E3%82%89%E3%81%8C%E9%81%A9%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
私はマルチディスク構成のサーバーを使用していますLVM オン LUKShtop
JBODモードでは、 CPU使用率のカーネル時間が非常に高い(または低い)ことiotop
に気付きました。jbd2/dm-5-8そしてdmcrypt_write/2プロセスはIO%の大部分を占めることが多い
確認してみるとfio
、4K ランダム IOPS も各ドライブの値よりはるかに低く、LVM ディスク全体の値よりはるかに低いことがわかりました。JBOD セットにディスクを追加すると、LVM は個々のディスクへのアクセスを並列に提供できると考えていました。たとえば、それぞれ 600k IOPS の SSD ドライブが 4 つある場合、約 4×600k IOPS を達成できるはずですが、そうではないようです。
そこで、ドライブ セットを最初から再構築するなどして、チューニングを試みています。サーバーは平均して 40 ~ 80 KB の小さなファイルを多数処理することになっているため、デフォルトの RAID0 ストライプ サイズでさえファイル自体よりも大きいため、JBOD のほうが適していると思います。さらに、RAID0 モードで実行している場合、小さなファイルの読み取り/書き込みが行われるたびに、すべてのドライブのすべてのストライプが不必要にアクセスされることになります。
私の理解は正しいでしょうか? この場合、IOPS を向上させるにはどうすればよいですか? Btrfs または ZFS に変更して LVM レイヤーを削除すると役立ちますか?
答え1
更新 - 私の最初の回答は今でも役に立ちますが、読み直してみると、SSD を使用していることがわかります。これは、あなたが間違った場所を探しているのではないかと思います。速度低下の原因は、データの暗号化/復号化にあると私は考えています。おそらく、それを SSD ファームウェアで実行するように移動することを検討できるでしょう。
最初の回答 -
RAID0 では、ファイルが異なるディスク上に保存される可能性が大幅に高まるため、読み取り速度が速まり、JBOD よりも優れたパフォーマンスが得られると期待しています。
(アレイが同じサイズのディスク 5 台で、1/5 が使用済みで断片化されていないと仮定します。RAUD0 ではデータは 5 台のディスクに分散されますが、JBOD ではすべて 1 台のディスクに分散されます。ディスクがいっぱいでも (ただし、適度に nrw)、最新のファイルはすべて 1 台のディスクに分散されるため、最新のファイルのみを参照する操作は、JBOD では 1 台のディスクのみで実行されます)
同じセクター/ディスク ブロックにファイルがある場合、RAID0 よりも jbod の方が有利な点はありません。JBODS の利点は、異なるサイズのディスクを使用できる点、データを部分的に回復できる点、ディスク領域を簡単に増やせる点です。