FreeBSD - The Power To Serve

The FreeBSD Projectは4日(協定世界時)、安定版の最新リリースとなる「FreeBSD 7.2-RELEASE」を公開した

新版では、機能追加や機能改善を多数実施。パフォーマンスや安定性も改善されている。セキュリティサポートの提供期限は2010年5月31日まで。サーバで使用している方はアップグレードを検討しても良いだろう。

以下、新機能や改善点の中から、特に注目されるものを紹介しよう。

Superpages - アドレス変換キャッシュヒット率向上

FreeBSD 7.2では、i386版とamd64版にSuperpagesの機能が追加された。

同機能は完全に透過的に実現されており、アプリケーション側はSuperpagesの実装を意識することなく、同機能の恩恵にあずかることができる。デフォルトでは無効になっているが、vm.pmap.pg_ps_enabledを1に設定することで有効になる。将来のバージョンでは「有効」がデフォルトの設定になるだろう。

Superpagesは、性能向上とメモリの有効活用を実現する機能だ。

FreeBSDなどのOSは4KBのページサイズで仮想メモリと物理メモリを扱う。仮想メモリアドレスから物理メモリアドレスに変換する際にTLB(Translation Lookaside Buffer)をキャッシュとして活用するのだが、最近ではこのTLBのヒット率が低下している。TLBのヒット率は性能に直接関与するため、これを改善することは大きな課題だ。

原理的には、ページサイズを4KBから引き上げれば、その分だけヒット率が向上することになる。ただし、OSは通常、アプリケーションを起動する度に1ページ確保するため、アプリケーションを複数同時に利用するような環境ではページサイズを大きくするとすぐにメモリが枯渇してしまう。そこで、4KBのページをいくつかまとめた"Superpage"を用意し、そのサイズを状況に応じて適度に調節できるようにすることで、「TLBにおけるヒット率の向上」と「メモリの効果的な利用」の双方を実現しようというのがSuperpagesの発想だ。

Superpagesの研究は随分前から行われていた。2003年にはRice大学においてJuan Navarro氏、Sitaram Iyer氏、Peter Druschel氏、Alan Cox氏らがFreeBSD 4.3のAlpha版で実験を行っており、種々のベンチマークで30%ほどの性能改善が報告されている。彼らの研究では、可変サイズのページをうまく使ったり仕組みを工夫したりすることで、性能の改善とフラグメンテーションの発生を抑えることに成功している。

今回、FreeBSD 7.2へのマージ作業を行ったのは上記のAlan Cox氏らだ。彼らは6年目にして正式移植を果たしたことになるが、なぜ今かについては、最近のCPUがSuperpagesに対応できるようになったためなのか、それとも単に彼らの作業時間が確保できたためなのか、真相は明らかにされていない。しかし、いずれにせよユーザーにとってうれしい機能がマージされたのは間違いない。

Jail仮想環境 - 複数IP/IPなし対応、など

これまでのJail仮想環境には、原則としてIPアドレスを1つ割り当てるという制約があった。それが、FreeBSD 7.2では、1つのJail仮想環境に対して複数のIPv4/v6アドレスを割り当てたり、IPアドレスを割り当てないで運用したりすることが可能になった。IPアドレスの割り当てなしを許可したのは、chroot(8)の独立性をさらに高めるためと言える。

また、特定のroute FIBを指定してJail仮想環境を運用することも可能になった。これにより、従来よりも柔軟なネットワークインフラをJailベースで構築することができる。さらに、cpuset(1)を使って特定のプロセッサをJail環境に割り当てる機能も実現されている。