NTT/Verio、FreeBSD仮想化技術

PCの性能を活用するための仮想化技術は、もはや経済活動にとって欠かせないものとなっている。仮想化の方法はいくつもあるが、FreeBSDで特に使われる機能は「Jail」だ。これは、chroot(8)の発想をベースとして、ファイルシステムやプロセス空間、メモリ空間を仮想化していくというもの。近い将来には、これに加えて、ネットワークルーティングテーブルも仮想化されることになる。FreeBSDをサーバで運用する場合にもっともよく採用される仮想化技術だ。

NTT/Verio, Manager of VPS developmentのFred Clift氏はBSDCan2008において、同社の仮想化に対する取り組みや運用ノウハウを紹介した。VerioはISP事業やホスティングサービスを提供している企業。仮想プライベートサーバ(VPS)やホスティングシステム、インフラストラクチャでFreeBSDを採用していることでも知られている。同社では、FreeBSD Jailにリソース管理機能を追加したシステムを採用しており、その実装や運用ノウハウには定評がある。

今回、Fred Clift氏はそういった背景を説明するとともに、真偽は定かではないが、FreeBSDにこういった機能がマージされる可能性があることを発表した。

快適な仮想化に必要になるのは適切なリソース制御

Jailのような方法で仮想化する場合、リソースをどのように制限して各ユーザに割り振るかを検討する必要がある。このポリシーひとつで、ユーザに不快感を与えるか、満足感を与えつつ効率の良い運用を実現できるかが決まってくる。

例として、ディスクのバンド幅を制限するケースを考えよう。30MB/secのディスクバンド幅を、30の仮想FreeBSDインスタンスに割り振る場合、もっとも単純なのは、1インスタンスあたりのバンド幅を1MB/secに制限する方法だ。ただし、この方法には、性能は保証できるが常にパフォーマンスが低いという問題がある。制限をあげて、例えば10MB/secまで増やしたとしても、ベストエフォートスタイルになったうえにやはり最大性能は低いままになってしまう。

そこで同氏は、「さらにベターな方法は"Burstiness"だ」と説明する。インタラクティブに操作しているユーザは、メールの受信やウィルスチェックなど、短時間に一気に実行する処理で操作の快適さを体感することが多い。そこで、短時間に一気に実行される要求は高いリソース割当で実行し、そうではないものについては規定値に制限する。結果として一定のリソース利用率に制限する方法をとる。こうすればユーザの要求は満たしつつ、仮想化によるリソースの割当も妥当に実現できるし、長時間にわたって実行される処理はリソース制限の対象となるから、ほかのユーザへの影響も抑えられる。制限の対象となるリソースはCPU時間、ディスク容量、プロセスごとのメモリ使用量、ファイルディスクリプタ、nproc、ディスクIOバンド幅、ネットワークバンド幅、マルチレベルクオータなどだ。

実装テクニックは負荷平均とトークンバケット

仮想化を実現するにあたって、まず基本となるテクニックは(1)制限するのは仮想インスタンスであって物理システムは制限しない、(2)何を計測し何を計算するのかを明確にしておく、(3)統計をとりケアを実施していく、などとされている。また具体的に"Burstiness"を実現する方法として次の2つが紹介された。

  • 負荷平均による制限
  • トークンバケットによる制限

負荷平均による制限の実施例グラフ

負荷平均による制限はチューニングが難しい

トークンバケットによる制限の実施例

トークンバケットによるリソース割り当て

負荷平均による制限は、リソースの負荷平均からハードリミットとソフトリミットを設定する方法だ。ハードリミットは一気に実行される場合の上限、ソフトリミットは長時間にわたって実行されているプロセスに対するリミットとなる。負荷平均の計算は、FreeBSDが負荷平均を算出するために使っている計算をそのまま利用できるという利点がある。この方法の問題点はチューニングが困難であることと、バースト時間がハードリミットとソフトリミットの率に比例するという点にある。ただし、同方法についてはいくつか改善が可能だ。

トークンバケットによる制限は、リソースを使うにあたってトークンを消費する仕組みにするというもの。トークンは特定のサイズの入れ物に特定のレートで溜まる仕組みになっており、リソース要求があるとその入れ物からトークンを取り出してリソースを使う仕組みになっている。トークンが空であれば処理スレッドはスリープに入り、入れ物の量を超えるトークンはそのまま削除される。短時間に一気に実行される処理については制限がない。この方法は計算や仕組みが簡単で、入れ物のサイズとトークンを溜めるレートを変更するだけでチューニングできるという利点がある。

リソース制御機能の活用で効率的な仮想化環境を

真偽は定かではないが、同氏の発表によれば、開発者はこうしたVerioで開発されてきた機能の活用を望んでおり、準備ができ次第、VimageとともにFreeBSDにマージしたいとしていた。それほど遠いさきの話ではないような内容だったが、実際に時期がいつになるのかの明言はなかった。取り組みそのものがなくなる可能性もなくもないだろうが、仮に同機能がマージされたとすると、Jail仮想環境におけるリソース管理や制限設定が簡単にできるようになる。これはネットワークルーティングテーブルの仮想化を実現するVimageとともにFreeBSD 8または9における目玉機能になるだろう。

Verioがこうしたリソース制限機能を実装したFreeBSDを活用していることは以前から知られていたが、FreeBSDにはマージされてこなかった。今回マージの話がでたことは、FreeBSDを活用している多くのデベロッパやユーザの協力を得て、これまでよりも迅速に試験を実施し、サービス向上や改善、早期のサービスインにつなげる狙いがあるとみられる。