両方とも前のリビジョン
前のリビジョン
次のリビジョン
|
前のリビジョン
次のリビジョン
両方とも次のリビジョン
|
blog:2019:2019-12-31 [2019-12-31 21:11] Decomo |
blog:2019:2019-12-31 [2020-01-05 08:06] Decomo |
====== メモリ16GBは人権の今、ZFSの重複排除(zfs dedup)を解禁する ====== | ====== メモリ16GBは人権の今、ZFSの重複排除(dedup)を解禁する ====== |
| |
ZFSはそこそこ古いバージョン((ZFS Pool Version 21。2010年頃?))で重複排除機能(dedup)を備えたが、長らくのあいだ禁忌とされてきた。というのも、Chr〇meも真っ青のレベルでメモリを馬鹿食いするからだ。ZFSの他の機能同様、dedupも有効にした後の書き込みから機能するため、当初は問題なく動いてるように見えるが「なんか重いなぁ…」と気付いた時にはメモリが枯渇しているのだ。慌ててdedup=offにしても、既に重複排除された分は効き続けるため、メモリは減ったままというオマケ付き。dedup地獄から抜け出すには、メモリを増設するかスワップを大量に割り当て、既存の重複排除が解除されるのをひたすら耐えるしかない。 | ZFSは2010年頃のPool Version 21で重複排除機能(dedup)を備えたが、本機能の使用は長らく禁忌とされてきた。というのも、Chr〇meも真っ青のレベルでメモリを馬鹿食いするからだ。ZFSの他の機能同様、dedupも有効にした後の書き込みから機能するため、当初は問題なく動いてるように見える。が、徐々にメモリが使われて行き「なんか重いなぁ…」と気付いた時には既に遅し、メモリが枯渇しているのである。慌ててdedup=offにしても、既に重複排除された分は効き続けるため、メモリは減ったままというオマケ付き。dedup地獄から抜け出すには、メモリを増設するかスワップを大量に割り当て、既存の重複排除が解除されるのをひたすら耐えるしかない。 |
| |
[[https://togetter.com/li/1293731|メモリ16GBは人権]]宣言から1年、フッ化水素騒動も何のその、メモリ価格は下落を続け個人でメモリ1TBも現実的となってきた昨今、そろそろdedupを解禁しても良いのではないか。 | そんな訳でdedupの実用は難しかったのだけども、[[https://togetter.com/li/1293731|メモリ16GBは人権]]宣言から1年、フッ化水素騒動も何のその、メモリ価格は下落を続け個人でメモリ1TBも現実的となってきた昨今、そろそろdedupを解禁しても良いのではないか。 |
| |
[[https://www.amazon.co.jp/dp/B00Y32OHNM|FreeBSD Mastery: ZFS]]によると、dedupはデータ1TBあたり概ね5GBのメモリを消費する。うちの自宅サーバはメモリ64GBでメインのプールは8TBなので、dedupを有効にしてもお釣りがくる計算だ。ならば人柱よろしくdedupっちゃおうじゃないの。ちなみに、同書にはdedupメモリ消費量のより詳しい見積もり方法が書いてあるので、気になる人は買って読んでください。 | [[https://www.amazon.co.jp/dp/B00Y32OHNM|FreeBSD Mastery: ZFS]]によると、dedupはデータ1TBあたり概ね5GBのメモリを消費するそうだ。うちの自宅サーバはメモリ64GBでメインのプールは8TBなので、dedupを有効にしてもお釣りがくる計算だ。ならば人柱よろしくdedupっちゃおうじゃないの。ちなみに、同書にはdedupメモリ消費量のより詳しい見積もり方法が書いてある。気になる人は買って読んでください。 |
| |
dedupを有効にするプール''zhome''は以下のような感じ。8TBのHDDを2本(ada5とada6)のミラー構成としている。改めてみるとファイルシステム名のつけ方が酷いな…。 | dedupを有効にするプール''zhome''は以下のような感じ。8TBのHDDを2本(ada5とada6)のミラー構成としている。改めてみるとファイルシステム名のつけ方が酷いな…。 |
''dedup=on''ではなく''dedup=skein''なのは、チェックサムアルゴリズムとして[[https://en.wikipedia.org/wiki/Skein_(hash_function)|Skein]]を使いたいから。 | ''dedup=on''ではなく''dedup=skein''なのは、チェックサムアルゴリズムとして[[https://en.wikipedia.org/wiki/Skein_(hash_function)|Skein]]を使いたいから。 |
| |
標準でdedupはSHA-256を使うようになっているが、manを見る限りSkeinはSHA-256/SHA-512より安全かつ高速で、更にプール固有のソルトを用いるためハッシュ衝突攻撃にも強いらしい。「何からの理由で高速なskeinが使えないシステムでsha512を使う」とも書いてあるので、基本はskeinで良さそう。 | dedupは標準でSHA-256を使うようになっているが、manを見る限りSkeinはSHA-256/SHA-512より安全かつ高速で、更にプール固有のソルトを用いるためハッシュ衝突攻撃にも強いらしい。「sha512は何からの理由で高速なskeinが使えないシステムで使う」とも書いてあるので、基本はskeinで良さそう。 |
| |
別プールにあるISOイメージやらインストーラやらが詰まってる493GBのフォルダを、dedup有効にしたプールにコピーした結果が以下。 | その後、別プールにあるISOイメージやらインストーラやらが詰まってる493GBのフォルダを、dedup有効のプールにコピーした結果が以下。 |
<code> | <code> |
$ zpool list zhome | $ zpool list zhome |
zhome 7.27T 1.64T 5.62T - - 3% 22% 1.11x ONLINE - | zhome 7.27T 1.64T 5.62T - - 3% 22% 1.11x ONLINE - |
</code> | </code> |
| |
| 重複排除率が1.11xってのは……たぶん2.00xならdedupで実使用量が半分になったって事だろうから、(重複排除できたサイズ)=(1-(1/DEDUP))*(元のサイズ) なので48GBほど排除できた感じっすかね? |
| |
この時のメモリ使用量の変化は下図のとおり。 | この時のメモリ使用量の変化は下図のとおり。 |
{{ :blog:2019:zfs_dedup_memory_usage_comparison.png |}} | {{ :blog:2019:zfs_dedup_memory_usage_comparison.png |}} |
| |
''loader.conf''で''vfs.zfs.arc_max="20G"''としてARCサイズは20GBに制限している。dedup前はARCを20GBフルに使ってるのに対し、dedup後は15GBになっていることから、dedup用のハッシュキャッシュはARCから確保されるっぽい? | ARCサイズは''loader.conf''で''vfs.zfs.arc_max="20G"''として20GBに制限している。dedup前はARCを20GBフルに使ってるのに対し、dedup後は15GBになっていることから、dedup用のハッシュキャッシュはARCから確保されるっぽい? |
| |
493GBで5GBって冒頭の概算の2倍消費しとるやんけ!と思ったが、Skeinは512bitハッシュなので比率で考えたら見事に概算通りの結果となった。そう考えると、メモリ64GB程度ではdedupを使うにはまだ心許ない感じがするなぁ……(何というオチ)。ちなみに、将来[[https://news.mynavi.jp/article/20190924-897816/|dedupのメモリ消費量が削減される可能性がある]]っぽい。 | データ493GBでハッシュ5GBって冒頭の概算の2倍消費しとるやんけ!と思ったが、Skeinは512bitハッシュなので比率で考えたら見事に概算通りの結果となった。そう考えると、メモリ64GB程度ではdedupを使うにはまだ心許ない感じがするなぁ……(何というオチ)。ちなみに、将来[[https://news.mynavi.jp/article/20190924-897816/|dedupのメモリ消費量が削減される可能性がある]]っぽい。 |
| |
まぁ、せっかくdedup有効にしてみたんだし、しばらく運用してみよう。NVMeなSSDも載ってるので、最悪そっちに大容量スワップ作れば何とかなるだろう。 | まぁ、せっかくdedup有効にしてみたんだし、しばらく運用してみよう。NVMeなSSDも載ってるので、最悪そっちに大容量スワップ作れば何とかなるだろう。 |
| |
| ===== 参考サイト ===== |
| |
| * [[https://www.freebsd.org/cgi/man.cgi?zfs(8)|zfs(8)]] |
| * [[https://news.mynavi.jp/article/20190924-897816/|OpenZFS、重複排除機能が改善される可能性あり | マイナビニュース]] |
| * [[https://togetter.com/li/1293731|我が国では人権はいくらでも蹂躙して構わないことになっているので「メモリ16GBは人権」といういい方はNG、という説 - Togetter]] |