21で重複排除機能(dedup)を備えたが、本機能の使用は長らく禁忌とされてきた。いうのも、Chr〇meも真っ青のレベルでメモリを馬鹿食いするからだ。ZFSの他の機能同様、dedupも有効にした後の書き込みから機能するため、当初は問題なく動いてるように見える。徐々にメモリが使われて行き「なんか重いなぁ...」と気付いた時には既に遅し、メモリが枯渇しているのである。慌ててdedup=offにしても、既に重複排除された分は効き続けるため、メモリは減ったままというオマケ付き。dedup地獄から抜け出すには、メモリを増設するかスワップを大量に割り当て、既存の重複排除が解除されるのをひたすら耐えるしかない。そんな訳でdedupの実用は難しかったのだけども、メモリ16GBは人権宣言から1年、フッ化水素騒動も何のその、メモリ価格は下落を続け個人でメモリ1TBも現実的となってきた昨今、そろそろdedupを解禁しても良いのではないか。ZFSによると、dedupはデータ1TBあたり概ね5GBのメモリを消費するそうだ。うちの自宅サーバはメモリ64GBでメインのプールは8TBなので、dedupを有効にしてもお釣りがくる計算だ。人柱よろしくdedupっちゃおうじゃないの。ちなみに、同書にはdedupメモリ消費量のより詳しい見積もり方法が書いてある。気になる人は買って読んでください。dedupを有効にするプールzhomeは以下のような感じ。8TBのHDDを2本(ada5とada6)のミラー構成としている。みるとファイルシステム名のつけ方が酷いな...。/zhome/ROOT/vm/virtcurrencyとりあえずホームディレクトリが置いてあるzhome/R/homeでdedupを有効にしてみる。zhome/R/homededup=onではなくdedup=skeinなのは、チェックサムアルゴリズムとしてSkeinを使いたいから。dedupは標準でSHA-256を使うようになっているが、manを見る限りSkeinはSHA-256/SHA-512より安全かつ高速で、更にプール固有のソルトを用いるためハッシュ衝突攻撃にも強いらしい。「sha512は何からの理由で高速なskeinが使えないシステムで使う」とも書いてあるので、基本はskeinで良さそう。その後、別プールにあるISOイメージやらインストーラやらが詰まってる493GBのフォルダを、dedup有効のプールにコピーした結果が以下。48GBほど排除できた感じっすかね?この時のメモリ使用量の変化は下図のとおり。ARCサイズはloader.confでvfs.zfs.arc_max=“20G”として20GBに制限している。dedup前はARCを20GBフルに使ってるのに対し、dedup後は15GBになっていることから、dedup用のハッシュキャッシュはARCから確保されるっぽい?データ493GBでハッシュ5GBって冒頭の概算の2倍消費しとるやんけ!と思ったが、Skeinは512bitハッシュなので比率で考えたら見事に概算通りの結果となった。考えると、メモリ64GB程度ではdedupを使うにはまだ心許ない感じがするなぁ......(何というオチ)。ちなみに、将来dedupのメモリ消費量が削減される可能性があるっぽい。dedup有効にしてみたんだし、しばらく運用してみよう。NVMeなSSDも載ってるので、最悪そっちに大容量スワップ作れば何とかなるだろう。追記)dedup有効後、6日ほど経ったのでtopを見てみたら、ARCが20GBに戻ってた...。ARCからハッシュキャッシュから取られる訳ではなさそう?ちゃんと調べてみないと分かりませんな......。Tags:FreeBSDPCZFSCommentsNameE-MailWebsite人間の証明として、ボックス内の全ての文字を入力してください。Decomoソースの表示以前のリビジョンメディアマネージャー文書の先頭へ。