FreeBSD - The Power To Serve

2年の開発期間を経て、FreeBSDの次期メジャーアップグレードバージョンとなる「FreeBSD 10.0-RELEASE」が間もなく登場する。

ほかのオペレーティングシステムでは実現されていない革新的な機能が取り込まれているほか、動作の粘り強さや適用シーンの幅の広さなどに定評があるFreeBSD。その最新版となるFreeBSD 10.0-RELEASEは、新機能や改善点がかなりの数に上り、ユーザから大きな期待が寄せられている。

本稿ではFreeBSD 10.0-RELEASEで実現される新機能の中から、特にユーザから見て注目となる11のポイントに絞って解説する。新版を活用するきっかけにしてもらえればと思う。

ZFS機能強化とSSD対応

日本のエンタープライズやコンシューマではFreeBSDはエッジサーバに採用されることが多いが、世界のエンタープライズ市場ではFreeBSDはストレージアプライアンスやストレージシステムのオペレーティングシステムとしても広く活用されている。国内でもFreeBSDとZFSをベースにしたNASソリューションを提供している企業は少なくない。高速で堅牢に動作するUFS2+Softupdates、大規模で多機能なストレージを構築できるZFS、的確に動作するネットワークスタック、高負荷になっても粘り強く動き続けるカーネル、そしてBSDライセンスで提供されているという特徴が、NASアプライアンスやNASシステムを構築するのに適したものとなっている。

FreeBSDプロジェクトではOpenZFSやIllumos主体で開発されているZFSの機能を随時FreeBSD ZFSへバックポートしているほか、FreeBSDとしての機能追加なども実施している。FreeBSD 10.0で登場することになる主なFreeBSD ZFSの注目ポイントをいくつか紹介する。 

高速圧縮アルゴリズム LZ4

リビジョン246586のコミットではZFSに対してLZ4圧縮アルゴリズムの実装が追加された。 Illumosプロジェクトからのバックポートとなる。これはBSDライセンスで開発されたハイスピード圧縮アルゴリズムの実装で、それまでZFSが使用してきたLZJBと比較して圧縮で50%以上、展開で80%以上高速に動作するとされており、圧縮されていないデータの圧縮処理でだいたい3倍ほど従来よりも高速に動作するとされている。さらに圧縮率もLZJBよりも優れているという。

データセットを圧縮機能とともに使用している場合には処理速度の高速化と容量効率のよいストレージ活用が期待できる。

圧縮キャッシュで高速化 L2ARC Compression

ZFSはその仕組み上、安定的にまた高速に動作するのに大量のメモリを必要とする。FreeBSD ZFSであればZFS向けに使われるキャッシュ(L2ARC)はスワップ不可能なWiredなメモリ領域として確保され、ZFSストレージシステムにおける大半のメモリをここで消費することになる。

Illumosではこのキャッシュ(L2ARC)をより効率よく利用するために「L2ARC Compression」という機能を実装。251478のコミットでこの機能がFreeBSD ZFSにもバックポートされた。L2ARCの領域を圧縮して利用することで確保したメモリ領域にさらに多くのキャッシュデータを保持することで高速化を狙うという仕組みになっている。

ディスクのアクセス速度を考えると、ディスクへの入出力は極力減らした方がよい。また、最近のプロセッサのパワーを考えると圧縮・展開処理をしても、まだお釣りがくる。結果的に圧縮した方が動作が高速になる。この圧縮・展開処理には先ほど紹介した高速圧縮アルゴリズムLZ4が使われている。

上書き削除で高圧縮 NOP Writeオプティマイゼーション

FreeBSD 10 ZFSにはIllumosで開発された「NOP Write」と呼ばれる最適化機能も取り込まれている。これはデータを書き込む際に、ディスクに書き込まれているデータのチェックサムを比較して、データが同一である場合には処理をスキップしてディスクI/Oを発生させないようにするという機能。これは特にスナップショットを活用している場合にディスクスペースを節約する効果が期待できる。

「NOP Write」の実際の動作とその効果についてはリビジョン243523 zio_impl.hのコミットで追加されたコメントがわかりやすい。その特性上、重複排除(dedup)機能とは相性がよくないため、「NOP Write」機能は重複排除の機能が無効で、かつ、圧縮機能が有効になっているようなデータセットで機能する設定になっている。

ZFS TRIMのサポート

リビジョン240868のコミットでZFSにTRIMサポートが追加された。SSDのみで構成されたプールを使っている場合などに効果が期待できるとされている。TRIMサポートはUFSにはすでに追加されている。この機能はmultiplay.co.ukのスポンサーシップのもとで実施されたほか、zfsonlinuxプロジェクトの成果物からいくつか改善を取り込んでいると説明がある。