ソフトウェアRAID10設定が小さいファイルを非常にゆっくり記録するのは正常ですか?

ソフトウェアRAID10設定が小さいファイルを非常にゆっくり記録するのは正常ですか?

1.2メタデータとデフォルトのブロックサイズ(512K)を使用して、Linux 3.16.6-203.fc20.x86_64でソフトウェアRAID-10を設定しました。

$ cat /proc/mdstat
md0 : active raid10 sdc1[4] sdb1[0] sdd1[2] sde1[3]
      3907023872 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      bitmap: 4/30 pages [16KB], 65536KB chunk

unused devices: <none>

ファイルシステムは、RAID-10ボリュームグループの上にあるLVMの上にあるext4です。

$ df -k .
Filesystem                     1K-blocks      Used  Available Use% Mounted on
/dev/mapper/vg_raid10-lv_home 2015734504 810039552 1103278568  43% /home

インストールオプションを含む:

$ mount | grep vg_raid10-lv_home
/dev/mapper/vg_raid10-lv_home on /home type ext4 (rw,relatime,seclabel,stripe=256)

すべてが大丈夫に見えます。 SMARTは、すべてのディスクが再割り当て、保留、またはオフラインのセクタなしで完全に正常であることを意味します。生の同期書き込みスループットはかなり良く見えます。

$ dd if=/dev/zero of=tmp.bin bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 7.85743 s, 137 MB/s

しかし、小さな100b(編集:答えで指摘したように、100バイトのチャンクではなく512バイトのチャンクを書いています。)をRAIDアレイに追加します。極度に遅い(同期書き込みあたり〜84ms):

$ dd if=/dev/zero of=tmp.bin bs=512 count=1000 oflag=dsync
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 84.2859 s, 6.1 kB/s

私のRAID-10構成では、これは正常ですか?

答え1

O_*SYNCRAID10は、任意の種類のファイル、少なくとも小さなファイルの速度を上げません。一度に512bを書き込み、各書き込み後に強制的にディスクに書き込まれます(ファイルサイズなどの再読み込みに必要なメタデータも含みます)。

これには、少なくとも2つのディスク、可能であれば4つ(つまりすべてのディスク)にRAID 10書き込みが必要です。これらの書き込みはすべてddを返す前に完了する必要があります。これはO_DSYNC必須保証だからです。

答え2

あなたのddコマンドはSSDで73.7kB / sを提供しました。そうですね、それが正常だと思います。それとも、ddは良いベンチマークではありません。

RAIDは間違いなく小さなファイルに対しては加速しません。アクセス時間は依然として同じままです。 HDDの場合、小さなファイルの場合は最も労力が必要です。まず、読み取りヘッドをファイルの物理アドレスにインポートするのは、実際に読み取るよりも時間がかかります。

(4Kセクタディスクがある場合は、セクタ全体よりも少ないデータを書き込むためにディスクがいくつかの特別な操作を実行する必要があるため、速度が遅くなります。)

答え3

「100b」(バイト?チャンク?意図は何ですか?)チャンクを実行するのではなく、512バイトチャンクを実行しています。 RAIDは512kブロックを使用しているため、常に遅いです。これは次のことを意味します。すべて512バイトRAIDシステムは512kブロックを読み込み、ブロックの512バイトを更新し、パリティを計算し、データ+パリティをディスクに書き込む必要があります。作成中の1000ブロックのそれぞれに対して、更新、パリティ計算、および512k + 512kパリティ書き込みを実行する必要があります。読み取りはバッファキャッシュに格納されるため、一度だけ実行され、全体の操作は1つのRAIDブロックのみを占めます。

はい、これは正常です。これをしないでください:-)

編集:上記はRAID5に対応しています。 RAID10ではパリティは計算されませんが、dd512バイトブロックごとに2つの512k書き込み(ミラーごとに1つずつ)がまだあります。したがって、まだ合計1000MBのコンテンツを作成し、512kのみを更新しました。おそらく、システムは新しいセクタだけを書くのに十分賢いかもしれませんが、私はそうではないと強く疑います。また、書き込み意図ビットマップの更新も検討してください。

関連情報