ミッションクリティカルなファイルを保存するために、Ubuntu 8でmdadm
を使用してraid 1
に1TBアレイをセットアップしています。特に大きなファイルの場合、SSDにキャッシュすることで読み取り/書き込みの速度を上げたいです。これは可能ですか? mdadm
には、別のドライブにキャッシュする機能が含まれていますか?
あるいは、通常のRAMをキャッシュに割り当てるためにすべきことはありますか? 4GBのRAMがあり、書き込まれるファイルが1GBを超えることはめったにないので、RAMキャッシングだけで書き込みは非常に高速になるはずです。
どんな助けも大歓迎です。
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