dm-cacheで高速化を狙う

1. 階層化ストレージについて

SSDが普及し始めた頃から、Linux上で様々なSSDを用いたキャッシュのテクノロジーが現れては消えを繰り返してきました。
しかし熾烈な生存競争に生き残ったテクノロジーもあり、
今回はdm-cacheを利用したいと思います。
本稿の執筆にあたっては、@Kaz_Kさん執筆のdm-cacheの技術概要と構築手順を参考にさせていただきました。ありがとうございました。

2.構築のイメージ

ここでは、SSDを/dev/sda、HDDを/dev/sdbとしてお話を進めていくこととします。下の図を参考にしてください。
最上位のレイヤーであるファイルシステムからはキャッシュが透過的に扱われますので利用者側が普段意識する事はありません。
(もちろんcacheの状態を確認する事は可能です)

ストレージ階層構造について
物理ドライブ構成図

3. 各物理ドライブへの割り当てについて

当たり前といえばそうなのですが、SSDとHDDで、割り当てるべき容量が違ってきます。
SSDに対してはこう言う感じで容量を割り当てていきます。
私もあれこれ調べては見たのですが、MetaData領域にはキャッシュドライブの容量の1%を指定している情報ばかり(英語は・・・ごめんなさい)。
まぁとりあえず1%割り当てておくことにします。

SSDに割り当てる要領について

HDDについてはあえてここで述べるような事はありませんが、せっかく絵を作ったので貼らせてくださいw

HDDに割り当てる容量について

4.構築の実際

ここからは実際のコマンドをトレースしながら、どのようにキャッシュされたLVMが構築されていくのかを見ていきたいと思います。

4.1 下準備

LVMの”issue_discards” 設定を変更し、再起動しておきます。
この設定、SSDのTRIMがらみでも触ることがあるみたいですね。

4.2 PVの作成

もうここからは淡々と作業するのみ!

4.3 VGの作成

どんどん進めていきましょう。

おっと・・・ロジカルブロックサイズが SSDとHDDで違っているようですね。
さてどうしましょうか。

確かにこれはちがいますねぇ・・・・

で、結局こうなりました。

4.4 LVの作成

さくさく進むはずです。
キャッシュとメタデータの作成については前述の通りです
それにしてもSSDで1TBなんていい時代になったものですね。
キャッシュメタデータのサイズについては、はっきりこうと書いたものがみあたらなかったので、とりあえずキャッシュサイズの1%としておきます。
(容量を使い切っていない件については、後述ということで・・・・)

4.5 cache poolの作成

どんどん進めていきます。
せっかくなので、キャッシュモードはWriteBackに設定します。
cachemodeを指定しないとwritetrueとなります。
がしかし・・・

だみだこりゃ。
チャッンクサイズの上限を打ち破ってしまったようですね。
では、これでどうかなぁ?

4.6 cache poolの紐付け

ここまできたら、このコマンドでHDDに対してSSDをキャッシュとして紐づけて高速なLogical Volumeを作成します。

4.7 Filesystemの作成と動作確認

そして、最後にこれをお忘れなく。
今回FileSystemとしてbtrfsを選択しています。
まぁ今でも色々言われているようですが、私はbtrfsに助けられたのでほかを選択する余地はありません。
動作確認については適当なファイルをコピーするなどしましょう。

5.ベンチマークなど

6.構築後の操作

6.1 cacheの取り外し

キャッシュを無効にしたいときは、次のコマンドでCache Poolを外すことができます。また、再度Cache Poolを接続することもできますが、一度取り外した後に再接続する場合、キャッシュは消去されます。(検証やベンチマークが目的で、キャッシュを一旦削除したい場合にも有効です。)

取り外した結果。Cache Pool自体は残ってます。

再度キャッシュを有効にしたいときは、構築時と同じコマンドで、LVを結合します。

参考資料

Qiitadm-cacheの技術概要と構築手順
Qiita [CentOS] dm-cacheを使用してSSDをHDDのキャッシュにする
RedHatDM_Cache
RedHat BlogImproving read performance with dm-cache
bootloader blogSSD Caching Using dm-cache Tutorial
FibrevillageHow to remove cache of a cache Logivcal Volume

%d人のブロガーが「いいね」をつけました。