差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン | |||
memo:test [2020-12-09 09:21] Decomo 削除 |
— (現在) | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== ZFSのヤバげな機能Special Allocation ClassがFreeBSD 12.2で対応されてた ====== | ||
- | |||
- | OpenZFS 2.0リリースの陰でひっそりと、FreeBSD 12.2-RELEASEのZFS実装にSpecial Allocation Class(以下、SACと略すことがある)が追加されていた。 | ||
- | |||
- | 時系列的にはOpenZFS 2.0が2020年12月1日、FreeBSD 12.2Rが10月27日リリースなので、まったく陰ってはないんですけどね、インパクトありそうな機能の割にはリリースノートに記載がなく、'' | ||
- | |||
- | Special Allocation Class自体は[[https:// | ||
- | |||
- | で、肝心のSpecial Allocation Classは何かというと、I/ | ||
- | |||
- | ZFSでは扱うデータの種類に応じてvdevをAllocation Classという概念で分類しており、OpenZFS 2.0時点では以下の5種類となっている。ちなみにAllocation Classは、元は[[blog: | ||
- | |||
- | ^ クラス | ||
- | | Normal | × | 通常のデータを扱うvdev。ミラーとかRAIDZとか。 | | | ||
- | | Log | × |ZILのレコード。いわゆるSLOG。 | 同期書き込みの高速化 | | ||
- | | Dedup | ○ |重複排除テーブル(DDT)のデータ | 重複排除パフォーマンスの向上とDDTのメモリ使用量の削減 | | ||
- | | Metadata | ○ | プールとファイルシステムのメタデータ | メタデータ操作(ファイル一覧の取得など)パフォーマンスの向上 | | ||
- | | Small Blocks | ○ | レコードサイズ以下のブロック | 小さなサイズの膨大なI/ | ||
- | |||
- | 表で〇を付けたAllocation ClassがSpecial Allocation Classとされている。それぞれのSACの役割は名前のごとくで、専用vdev (Special vdev)を割り当てるとそれなりに効果がありそうだ。とりわけSmall Blocksは[[https:// | ||
- | |||
- | ZFSのファイルI/ | ||
- | |||
- | ここで注意が必要なのは、Small Blocksの処理はファイルサイズベースではなく、あくまでブロックサイズベースで行われるということ。なので、小さなファイルの全体がSpecial vdevに格納される訳ではない((Small Blocksの閾値をレコードサイズと同値にして全データをSpecial vdevに送ることは可能))。そもそも、ZFSの書き込みは一旦メモリにキャッシュされ、トランザクショングループ(txg)にまとめられた上でレコードに書き出されるため、必ずしも小さいファイル=小さなレコードとは限らない。逆に、大きなファイルでもレコードサイズ以下の端数は必ず存在するわけで、これらのtxgでレコードサイズ未満となった分がSpecial vdev行きとなるようだ。この辺が一般的な階層化ストレージと大きく異なる部分である。 | ||
- | |||
- | Small Blocksの対象となるブロックサイズは、レコードサイズ以下の2の冪を任意に指定できる。128KiB以上のレコードサイズが使えるようになるlarge_blocksフィーチャーと合わせて使うと、よりパフォーマンスチューニングの幅が広がるだろう。なお、FreeBSDはレコードサイズが128KiBを超えるデータセットからの起動には対応してないので要注意。 | ||
- | |||
- | Special Allocation Classで性能向上が見込める一方で、その仕組み上、Special vdevが死ぬと一発でプール全体のデータが飛ぶ恐れがある、というかメタデータという極めて重要なデータが飛ぶんだから、ほぼ確実に死ぬと思われる。なので今まで以上に冗長性には留意する必要がある。信頼のおけるSSDで最低でもミラーリング、可能なら電源喪失保護付きSSDで3重ミラーにしたいところ。 | ||
- | |||
- | Special vdevの容量が一杯になった場合は、従来通り普通のvdevの方が使われるそうだ。 | ||
- | |||
- | そのうち試してみたい。 | ||
- | |||
- | ===== 参考サイト ===== | ||
- | |||
- | * [[https:// | ||
- | * [[https:// | ||
- | * [[https:// | ||
- | * [[https:// | ||
- | * [[https:// | ||
- | * [[https:// | ||