web-dev-qa-db-ja.com

mdadm / btrfs raid1またはzfsミラーを使用して2つのディスクの読み取り速度を取得する方法

RAID1がデータの2つのコピーを書き込むことを考えると、読み取りは単一のディスクの2倍に近いはずであることが私の理解です。

さまざまなテクノロジー(mdadm、zfs、btrfs)の読み取りパフォーマンスをテストしましたが、ほとんど成功しませんでした。

私の経験から:

  • btrfsは読み取り中に1つのディスクのみを使用しました
  • zfs/mdadmは両方のディスクを使用しましたが、達成された読み取り速度は単一のディスクの読み取り速度でした

Dd、iotop、iostatを使用して結果を確認しました。

1つのディスクの読み取りパフォーマンスを2倍にするために、両方のディスクのデータを同時に読み取るにはどうすればよいですか?

6
Greg

問題は、テストがどのように行われたかに関する情報に少し制限があるため、ddを使用して直接ファイルに書き込む場所を想定しています。

BTRFS:

BTRFSの用語では、RAID1はプールにあるディスクの数に関係なく2つのコピーを意味します。簡単にするために、データとメタデータの両方が2つのディスク上のRAID1に格納されていると仮定しましょう。したがって、各ディスクは他のディスクの内容のコピーです(BTRFSでは、ディスクレイアウトが同一でない場合があります)。

BTRFSが読み取りを実行するとき(前回チェックしたとき)は、プロセスのPIDに基づいて、最初に読み取るディスクを決定しました。つまり、単一のプロセスを実行すると、エラーが発生して他のディスクから適切なコピーを取得する必要がある場合を除いて、いずれかのディスクからのみ読み取られます。

次にそのプロセスを実行するときは、PIDが異なる可能性があり、BTRFSは最初に別のディスクからデータを読み取ります。

MD:(MDADM)

シーケンシャルな読み取りの場合、同じデータが両方のデバイスにあり、両方のディスクが読み取りを開始する前に同じ量のデータをスキップ(シークオーバー)する必要があるため、どちらかといえばそれほど多くは得られません。例えば。ディスクAは、次の10バイトを読み取る前に最初の10バイトを待機(スキップ)する必要があり、ディスクBが最初の10バイトを同時に読み取っても、ディスクAがスキップしている場合でも、ディスクAが完了するまで待機する必要があります。メモリで読み取ることになっている20バイトをまとめることができます。

MDマニュアルページ(man md)から:

"ドライバによって行われる読み取りバランシングは、RAID1のパフォーマンスプロファイルをRAID0の場合と同じにしないことに注意してください。シーケンシャル入力の単一のストリームは加速されません(たとえば、単一のdd)。ただし、複数のシーケンシャルストリームまたはランダムなワークロードでは、複数のスピンドルが使用されます。理論的には、NディスクRAID1を使用すると、Nのシーケンシャルスレッドがすべてのディスクから読み取ることができます。 "

ZFS:

ZFSの知識はありませんが、BTRFS/MDADMとほぼ同じように機能することを期待しています。

結論:

single順次読み取り操作の場合、おそらくddで行うように、BTRFSとMDADMの両方またはどちらか一方にRAID1を設定しても、パフォーマンスを向上させることはあまりありません。 。

BTRFSとMDADMの両方で向上した読み取り速度(存在する)を確認したい場合は、アレイで複数の異なる読み取りを並行して実行する必要があります。 BTRFSはPIDに基づいて異なるディスクに読み取りを分散する可能性が高く、MDADMはシークの数を大幅に削減します。 RAID1はRAID0と同じではなく、特にBTRFSアレイではないことに注意してください。

10
Waxhead