小さなファイル用の小さなストレージ

1つのプロジェクトの開発中に、多くのファイル(400万個以上)を保存する必要が生じました。 そしてその数は増え続けました。 ファイルが600万を超えると、ファイルを操作することが難しくなりました。 それらをディレクトリに入れて分岐ツリーを作成しても、これらのディレクトリの一部でさえバイパスするのに数時間かかりました。 もちろん、最初はこれをすべて保存する方法について誰も考えていませんでした。通常のネジとext4を使用しました。 ある時点で、このセクションの読み取り速度は9MB /秒に低下しました。 遅すぎる。 btrfsへの実験的な移行により、速度は13MBに上がりましたが、そのような指標も印象的ではありません。 これにSSDを使用する予定はなく、ボリュームはすでに1TBを超えています。 つまり すべてがRAIDを使用することになりました。 プロジェクトの商業的成功は疑わしいため、コストを最小限に抑える必要がありました。 したがって、実装はソフトウェアであると想定されていました。



そのため、1台のサーバーまたはコンピューター上、つまり 4つ以下のディスク。 あなたは小さなファイルを保存する必要があります-それぞれ1-3Mb。



今回のケースのBtrfsはext4よりも高速であることが判明したため、使用することにしました。

倉庫管理の候補者はraid0およびraid10です。 raid0は客観的に最速ですが、一部の人々はraid10の方が速いと考えています。 raid10は、読み取り時に理論的にraid0と速度を等しくすることができます。 しかし、記録のために-それは非常に疑わしいです。 はい。ハードウェアレイドパフォーマンスのさまざまなテストを見つけることができます。

raid10の主な利点(信頼性)は、それほど重要ではないデータではそれほど明白ではありません。 ただし、大量に保存する必要がある場合は、raidまたはlvmを使用してください。 昔ながらの方法で行うことができます-ネジのデータを手動で配布します。 信頼性はどこでも同じです。 ウィンチェスターの損失-データの損失。 raid0では、ストリップ(チャンク)のサイズは調整可能であるため、小さなファイルサイズでほとんどのデータを復元できます。



被験者は4枚のHDDを西部デジタルキャビアブルー1TBで撮影しました。



次のようにraid0を作成します。



mdadm -v —create /dev/md0 —level=raid0 —raid-devices=4 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
      
      







コピーして再配布するものがないため、作成は即座に行われます。

構成を保存して、アレイの再起動時に残るようにします。

 mdadm —examine —scan —config=mdadm.conf >> /etc/mdadm.conf
      
      







ファイルシステムを作成します。



 #mkfs.btrfs -Lraid0 /dev/md0 WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL WARNING! - see http://btrfs.wiki.kernel.org before using fs created label raid0 on /dev/md0 nodesize 4096 leafsize 4096 sectorsize 4096 size 3.64TB Btrfs Btrfs v0.19
      
      







興味深いことに、FSはまだ実験段階です。 しかし、これはFedora 18開発者がbtrfsをデフォルトのファイルシステムにすることを止めませんでした。



クイックスピードテストを実行してみましょう。



 # hdparm -t /dev/md0 /dev/md0: Timing buffered disk reads: 2008 MB in 3.00 seconds = 669.11 MB/sec
      
      







平均して、線形読み取り速度の範囲は650〜690MB /秒です。

これは、比較すると、sata3 SSDよりも高速です。



デバイスの正味容量3,7TB



2日間のテストでは、それぞれ202MB /秒と220MB /秒のファイル操作中に、任意の読み取りとランダムな書き込みの安定した速度が示されました。 読み取りまたは書き込みのみに制限すると、560MB /秒になります。 これらは安定した平均です。

全然悪くない。 ちなみに、多くの家庭用SSDはこれを満たしていません。

現時点では速度は非常にまともです。 したがって、実際にその上で停止しました。 ネジの1つが崩れ始めたら、RAID全体を停止し、データをセクターごとに新しいネジにコピーし、RAIDをアクティブ状態に戻す必要があります。 それほど重要ではないストレージでも大丈夫です。 突然重要になった場合、drbdを使用して信頼性と全体的なフォールトトレランスを向上させることができます。

テスト中、700MB /秒のピーク読み取りおよび書き込み速度がしばしば観察されました。 しかし、ファイルが小さいため、このようなピークは多くのファイルの並列読み取り中に発生しました。 明らかにチャンクのサイズに影響します。



良心をクリアするために、raid10で同じテストを実行します。

raid10の作成:



 mdadm -v —create /dev/md0 —level=raid10 —raid-devices=4 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
      
      







しかし、しばらく待つ必要があります。 数時間。

その結果、次のことができます。



 # hdparm -t /dev/md0 /dev/md0: Timing buffered disk reads: 1080 MB in 3.01 seconds = 359.07 MB/sec
      
      







控えめに言っても、残念です。 2台のドライブを使用したraid0でもまったく同じ結果が得られました。 この場合、4本のネジから読み取る理論的な能力は現れません。

しかし、直線速度は、指標ではありますが、私たちにとってそれほど重要ではありません。 さらに重要なのは、ファイルへのランダムアクセスです。

そして、彼は読書のために190MB /秒と書き込みのために125MB /秒を作りました。

読み取り速度はraid0に匹敵しますが、書き込みには完全に失望します。 この場合、ディスクのボリュームの半分も失われることを思い出してください。



raid0のソフトウェア実装にはもう1つのバリエーションがありますが、すでにbtrfs自体を使用しています。 ドキュメントには、パフォーマンスと信頼性に影響する可能性のある2つのパラメーターがあります。 データ型-データを保存する方法。 アクセス速度とデータストレージの信頼性の両方に影響します。 オプションがあります:raid0、raid1、raid10、single。 また、メタデータプロファイルは、メタデータを保存する方法です。 これは、軽微な障害が発生した場合にデータを回復する機能に大きく影響します。 オプションがあります:raid0、raid1、raid10、single、dup。 実際、使い慣れたraid0とraid10を観察します。 3GBのパラメーターは、最大1GBのファイルを操作するときにパフォーマンスの向上を控えめに宣言するものですが、混在しています。 私たちにとって、その影響は明らかではありません。

パラメータは、ファイルシステムの作成時に設定されます。



 # mkfs.btrfs -d raid0 -m raid1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL WARNING! - see http://btrfs.wiki.kernel.org before using adding device /dev/sdd1 id 2 adding device /dev/sde1 id 3 adding device /dev/sdf1 id 4 fs created label (null) on /dev/sdc1 nodesize 4096 leafsize 4096 sectorsize 4096 size 3.64TB Btrfs Btrfs v0.19
      
      







混合を使用する場合は、データストレージとメタデータの種類を同じにする必要があることに注意してください。

RAIDを使用する場合のように、単一のデバイスはここでは機能しないことに注意してください。 ファイルシステムに使用されるパーティションをマウントできます。 たとえば、mount / dev / sdc1 / mnt / raid0



その結果、数値はmdのパフォーマンスにおいてraid0と非常によく似ていました。 198MB /秒を読み取り、216MB /秒を書き込みます。 読み取りピークは、700MB /秒よりわずかに小さくなっています。 読み取り専用または書き込み専用の平均速度は660MB /秒であり、これは非常に楽しい驚きでした。



-m raid0を使用してパーティションを作成すると、共有速度がわずかに向上します。 203MB /秒を読み取り、219MB /秒を書き込みます。 ただし、個別の読み取り/書き込みはわずかに減少しました:654MB /秒。



一般に、追加のレイヤーなしで純粋なbtrfsを使用することをお勧めします。これは障害の原因となる可能性があります。



ストライピングモードでlvmにデータを保存する可能性もあります。 これはraid0の非常に近い類似物です。 ただし、著者は長年にわたってlvmとは関係がありませんでした。 したがって、生産性を向上させるこのオプションは、主観的な理由から純粋に考慮されませんでした。



そして最後に、btrfsでのraid10の失敗した実験:



 # mkfs.btrfs -L raid10 -d raid10 -m raid10 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/ sdf1 WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL WARNING! - see http://btrfs.wiki.kernel.org before using adding device /dev/sdd1 id 2 adding device /dev/sde1 id 3 adding device /dev/sdf1 id 4 fs created label raid10 on /dev/sdc1 nodesize 4096 leafsize 4096 sectorsize 4096 size 3.64TB Btrfs Btrfs v0.19
      
      







作成には数秒かかりました。 しかし、これは喜びではなく疑問を引き起こしました。

読み取りは122MB /秒、書き込みは127MB /秒です。 個別の読み取り/書き込み-657MB /秒 つまり 別の操作の速度は驚くべきものであり、楽しいものですが、私たちのタスクには適していません。



同僚を慰めるために、raid0の上にext4を使用してテストを実施しました。 結果が期待されます。



 # mkfs.ext4 /dev/md0 -L raid0 mke2fs 1.42.5 (29-Jul-2012) Filesystem label=raid0 OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=256 blocks, Stripe width=1024 blocks 244195328 inodes, 976760832 blocks 48838041 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 29809 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
      
      







パフォーマンスに良い影響を与える少しのチューニングを行ってみましょう。



 tune2fs -O extents,uninit_bg,dir_index /dev/md0 tune2fs -o journal_data_writeback tune2fs -m 0 /dev/md0 mount /dev/md0 raid0 -o acl,user_xattr,noatime,nodiratime,barrier=0,commit=0
      
      







結果は私たちの仕事にとって嘆かわしいものです。 読み取りと書き込み-60MB /秒および86MB /秒。 読み取り専用または書き込み専用-535MB /秒



結論は明らかです。 Btrfsはext4よりもタスクにとってはるかに有益であり、raid0はraid10よりも高速です。



動作するデータハンドラに加えて、サードパーティのユーティリティも使用されたことを追加するだけです。

合成テストでは、ストレスとボニー++が使用されました。

実際の読み取り/書き込みデータは、sysstatを使用して収集されました。



All Articles