web-dev-qa-db-ja.com

mdadm raidをssdでキャッシュできますか?

ミッションクリティカルなファイルを保存するために、Ubuntu 8でmdadmを使用してraid 1に1TBアレイをセットアップしています。特に大きなファイルの場合、SSDにキャッシュすることで読み取り/書き込みの速度を上げたいです。これは可能ですか? mdadmには、別のドライブにキャッシュする機能が含まれていますか?

あるいは、通常のRAMをキャッシュに割り当てるためにすべきことはありますか? 4GBのRAMがあり、書き込まれるファイルが1GBを超えることはめったにないので、RAMキャッシングだけで書き込みは非常に高速になるはずです。

どんな助けも大歓迎です。

5
Robert Frost

Mdadmには別のドライブにキャッシュする機能が含まれていますか?

いいえ、Linuxソフトウェアraid(mdadmで管理)は、redundancyの目的でディスクのセットを作成するためだけのものです。1

willでこれを行うことができる2つのプロジェクトを知っています: dm-cache および flashcache (どちらも比較的実験的です)。 SSDを低速のハードドライブまたはmdデバイスなどの他のブロックデバイスのキャッシュ(読み取りおよび書き込み)として使用できます。どちらもパフォーマンスが大幅に向上し、耐久性とパフォーマンスのバランスをとるために微調整できます。

残念ながら、これは現時点ではまだパッケージ化されておらず、カーネルにも含まれていません。したがって、Ubuntuで行うのはそれほど簡単な作業ではありません。気軽に手を汚してはいけませんが、それは実験的なソフトウェアであり、サポートを受けるのは難しいことを覚えておいてください。

関連する質問:

1ただし、hintカーネルを使用して、主に読み取り用のドライブの1つを使用し、読み取りパフォーマンスの向上を得ることができますが、これはまったく同じではありません実際のSSDキャッシュとして。 この回答はGillesによる を参照してください。


通常のRAMをキャッシュに割り当てるためにすべきことはありますか?

これはすべてのLinuxカーネルで既に有効になっています! freeを使用して、キャッシュされたページの量を確認できます。

free -m
             total       used       free     shared    buffers     cached
Mem:         24047      17703       6343          0       6492       3550
-/+ buffers/cache:       7660      16386
Swap:         3811          0       3811

ここで、キャッシュに3550 MBのページ(ファイルシステムレベル)があり、私のマシンに6492 MBのページ(ブロックデバイスレベル)があることがわかります。それらの1つへの読み取りは、ディスクからの読み取りにはなりません。

これをブロックレベルのキャッシュで実証するには、次のコマンドを試してください。

hdparm -Tt /dev/md127  # replace with your device - try both disks and md devices!

/dev/md127:
 Timing cached reads:   8624 MB in  2.00 seconds = 4313.50 MB/sec
 Timing buffered disk reads: 282 MB in  2.93 seconds =  96.31 MB/sec

最初の結果は明らかにメモリ内のキャッシュからのものですが、2番目の結果はディスクから直接読み取られます。

ddを使用したファイルシステムベースのキャッシュを示すには:

# first time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 25.9253 s, 229 MB/s

# second time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 4.91444 s, 1.2 GB/s

# third time, with file system cache disabled using iflag=direct
# yields results similar to first one
# Try using a bigger blocksize (bs=10M for example) if you're seeing very low speeds
dd if=/home/gert/bigfile.img of=/dev/null iflag=direct
7
gertvdijk