ZFSは、とても偉大で、革新的な次世代ファイルシステムですよね。
うちのデスクトップは、ストレージサーバ用にFreeBSD10.1をZFSで構築し、そのZFSストレージをiSCSIでNAS化して、そのストレージ内にセットアップしたUbuntuイメージから起動する変態仕様です。
メリットは、デスクトップをディスクレスに出来たり、他のOSを簡単に切り替えたり、ZFSのスナップショットを使えたりです。
しかし、デメリットは、普通のディスクに比べて遅いことです。
この遅さをなんとかすることが、今回の目的です。
ZFSには、読み込みキャッシュを別のデバイスに割り当てる機能があります。
読み込みキャッシュとは、何度も同じとこを読み込むようなことが発生した場合、ディスクに何度も同じ場所を読み込みに行くのでは無く、高速なメモリに読み込んだ内容を覚えさせておいて、次からそのメモリを使って読み込みします。
メモリは、ディスクに比べて大幅に高速なので、すさまじい効果が得られます。
しかし、メモリは、ディスクより1MB辺りの単価が、非常に高いです。 ですから、大きな容量をキャッシュに割り当てることが現実的に無理です。
ここで登場するのが、SSDです。
メモリより、10倍くらいは、安いです。
HDDに比べて高速です。(まー、この辺りは、Googleで調べれば、SSDの高速性はわかるでしょう。)
で、そんな絶大な効果が得られるキャッシュなんですが、ZFSは、このキャッシュをブロックデバイス(つまりSSD)に割り当てることが可能なのです。
もともとZFSのキャッシュは、メモリを使うのですが、その容量が不足した時に、別のブロックデバイスとしてSSD等を割り当て、併用することができます。
これをl2arcなんて呼ぶらしいです。
こんな機能を使わずにいられなくなり、今回、運用してみることにしてみました。
かなりの好奇心で、やってますよ。
では、早速
SSDは、以下のようにパーティションを作って準備してあげましょう。
gpart create -s GPT [SSDのブロックデバイス]
gpart add -t freebsd-zfs -l zarc0 -s 70G [SSDのブロックデバイス] <- 70Gの場合ですよ
コマンドは、
zpool add [プール] cache gpt/zarc0
と、超カンタンです。
では、効果の程は、どんなもんかというと、初回こそ激遅ですが、一回、読み込んだ後は、超特急状態となります。
数字上は、わかりにくいですが、ストレージサーバとしての機能は、ものすごく期待して良いと思いますね。
↑これが、導入前
↑これが、導入後
数値上は、ほぼ変わらないんですが、大量のキャッシュを持ってしまえるので、使えば使うほどこのようなグラフになっていきます。
つまり、いつでも、高速なパフォーマンスの継続が期待出来るといえます。
で、今回、ZILと呼ばれる書き込みキャッシュも導入したのですが、効果があるようですが、色々実験しても、飛び抜けた効果が無いように感じました。
コマンドは、
gpart add -t freebsd-zfs -l zil0 -s 8G [SSDのブロックデバイス]
zpool add [プール] log gpt/zil0
です。
Sambaで共有したボリュームに書き込む時にスムーズになったような感覚でした。
効果は、微妙です。
で、今回、用いたSSDです。
SanDisk SSD UltraII 120GB SDSSDHII-120G-J25
です。
読み書きともに、500MB近くを叩き出す爆速SSDです。
ちょっと、耐久性が懸念されますが・・・
潰れたら、記事を更新します。
更新してない間は、壊れていないということで。