2009年3月12日から15日までの4日間、東京において「AsiaBSDCon 2009」が開催された。本誌では、同カンファレンスの中から特に興味深いセッションをピックアップしてお伝えする。

TCP/IPネットワークスタックをユーザランドへ

サブシステムをどこまでカーネルランドに置くか、どこからはユーザランドに置くかというのはバランス感覚を要求される部分だ。カーネルランドとユーザランドにはそれぞれ特徴がある。実際に特権モードでの動作が要求されるのは一部の限られた処理でしかないのだが、大抵の場合はそれ以外の関連部分もカーネルランドに取り込まれる。しかしカーネルランドに依存させすぎると開発が困難になるという弊害もある。このあたりはトレードオフの関係にある。

Antti Kantee氏 - The NetBSD Project

*BSDではネットワークスタックはカーネルランドに置かれていることが多い。これはパフォーマンスを発揮させるためだが、組み込み機器に移植する段階ではユーザランドに移植されることも多い。ルータのようなネットワーク組み込み機器では、ネットワークの仮想化やネットワークモジュールのアップデートの容易化、開発の容易化などの目的でネットワークスタックはカーネルランドにあるよりもユーザランドにあった方が都合がいいことがあるからだ。TCP/IPスタックをユーザランドに移植する作業はなにも珍しいことではなく、よく取り組まれる内容だ。

「AsiaBSDCon 2009」ではNetBSDの開発者であるAntti Kantee氏がNetBSDのTCP/IPカーネルをユーザランドで動作させる取り組みを紹介した。興味深い発表で、場合によっては実務への活用も検討できる内容といえる。

Rump: Runnable Userspace Meta Programsとは

Antti Kantee氏はRump(Runnable Userspace Meta Program)という機構を開発しネットワークスタックをユーザランドで動作させるという試みをおこなっている。簡単にいうと、カーネルの一部をユーザランドのライブラリとして実装することでユーザランドで動作するようにするというものだ。本当にカーネルで実行する必要がある部分はカーネルで実行するが、それ以外の部分はユーザランドのライブラリで実行する。

Antti Kantee氏はこれまでファイルシステムの動作をユーザランドに持ち出すPuffsの開発を実施していた。ネットワークスタックをユーザランドに持ってこようという直接のきっかけは、PuffsでNFSをユーザランドに持ってこようとしたときにソケットも対応させる必要があったことに端を発しているという。PuffsやRumpに関してはRunnable Userspace Meta Programsに概要がまとまっている。

この手の仮想化ではUsermode LinuxやDragonFly vkernelが似たような取り組みをしている。それらはカーネルごと仮想化の対象となるが、Antti Kantee氏の取り組みは特定のサブシステムに限定されたもので、開発負担が少なくより軽量という特徴がある。カーネル内部のインターフェースと同じインターフェースを提供しているため、変更分が最小で済み、さらにユーザランドで開発したものをカーネル内部に戻すのも実施しやすいという特徴もある。

ベンチマーク結果 - レイテンシに遅延がみられるが改善の目処あり

Rumpを使ってユーザランドでネットワークスタックを実行した場合のベンチマーク結果も発表された。QEMUと比較した場合では10倍ほどRumpの方が高速に動作している。ただしこの結果にはQEMUアクセラレータが適用されていないため、QEMUアクセラレータを適用した場合にはその差は狭くなるとみられる。

TCP/IPをユーザランドで実行した場合、スループットではほとんど性能の違いがみられないが、レイテンシで性能の劣化が見られる。この点に関してはすでに改善の目処がたっており、Rumpからカーネルプールアロケータを使えるようにすることでプロセッサ時間の短縮とレイテンシの削減が可能になるだろうと説明されている。

Antti Kantee氏の取り組みでカーネルランドのTCP/IPスタックをユーザランドで実行するというコンセプトが実証されただけでなく、実用的なものとして構築可能であることが示された。特に一回限りの取り組みとして開発されたものではなく、汎用的に活用できるRumpとして整備されている点が注目される。

NetBSD 5の登場に注目

Rumpは次のメジャーリリースとなるNetBSD 5.0に実験的な成果物が取り込まれる予定になっている。これはNetBSD 5.0という最新の成果物を使いつつネットワークスタックをユーザランドで実行できるようになることを意味しており、ネットワーク通信機能を有した組み込み機器への適用という面で考えるととても興味深い。

ネットワークスタックやファイルシステムがユーザランドで動作するようになることで、従来よりもこうしたサブシステムの開発やデバッグが容易になる。また、ユーザランドで動作することで仮想化を実現しやすいという特徴もある。FreeBSDがカーネルランドでのネットワークの仮想化やJailによるファイルシステムやプロセス空間の仮想化を提供しているのと比べ、Antti Kantee氏の取り組みはこれをユーザランドに持ち出すことで実現している。

同様の仮想化手法はFreeBSDやOpenBSDに対しても適用できるため、ネットワークスタックをユーザランドで動作させることで、同じ条件でのネットワークスタックそのもののベンチマーク試験が実施しやすくなるという特徴もある。