Open vSwitchソースコードリーティング その1

昨日、@oshothebig主催のOpen vSwitchソースコードリーディングに参加してきたので、メモ書きをつれづれと。Open vSwitchはOpen Flowにも対応した仮想スイッチで、最近Linux 3.3にコードがマージされたというニュース「Open vSwitchがLinux 3.3でメインラインにマージ、標準サポートへ」が出ていた。Open vSwitchの一部にはLinux kernel用のモジュールが含まれているけど、これがマージされたようだ。

Open vSwitchはTrema経由で使ったことがあったけど、内部がどうなっているかとか、ましてやソースコードはまったく読んでいない。ということで本勉強会に参加してみたのだが、のっけの発表からOpen vSwitchの知識をある程度前提にされているようで、ついて行けない。ちょっと予習が必要だったかも。講演資料は各自アップロードされているようなので、あとで復習しよう。

もくもくタイムでは、トンネリングと仮想マシン(マルチテナント)話で盛り上がる。しかし、全然話について行けない私。vxlanとかNVGREとかいろんな規格が最近出てきているけど、NiciraはSTT (Stateless Transport Tunneling)という規格を提案しているそうな。IETF draftフェーズ? GREだとIPヘッダのあとにshim headerを挿入するので、TCP segmentation offloadなど各種ハードウェアオフロードが効かない。STTはTCPヘッダに偽装したヘッダにすることでハードウェアオフロードを活用できるようにしている。なかなか賢い。MTUサイズの問題はどうしても出てくるけど。

それから各規格の競合状態がどうなるとか。VMWareMicrosoft各社の対応とか。WIDEの人が作ったvxlanのユーザレベル実装「hogelan」も面白そう。

あと、「hop by hop」と「overlay」の議論。「hop by hop」はエンド間のインターネットワークはすべてOpen Flowスイッチで繋ぐというアプローチで、「overlay」はトンネリングなりを使って繋げてしまうというもの。スタンフォード(Nicira)の連中も最初はhop by hopって言っていたのに、いつの間にか趣旨替え。

OpenStack(Quantum)とOpen Flowプラグインの関係。

話を聞きながら、Open vSwitchのソースコードを読む準備を進める。

$ git clone git://openvswitch.org/openvswitch

で、etagsファイル作る。

$ cd openvswitch
$ etags `find . -name "*.ch"` -o TAGS

Pythonも使われているんだっけ。

$ etags --append `find . -name "*.py"` -o TAGS

で、Linux 3.3のnet/openflowに相当する箇所を探し始める。datapath*1以下の一部がマージされた部分のようね。

とかやっているうちにタイムアップ。最後に飲み会で教えてもらったTrema小ネタを一つ。須堯さんがビスコ大好きだったので、高宮さんがBiscoと名付けたのだけれども、スタンフォードのOpen FlowチームにCiscoに喧嘩売っていると思われると猛反対されたので却下になった。そして、高宮さんが好きな京都のミニマルテクノレーベルからTremaと名付けたそうな。ところで「止れま」って標識は本当に実在するのね。海外からの出稼ぎ労働者が間違って作業しちゃったという説が有力とか。

*1:OpenFlowのポイントとして、コントロールプレーンとデータプレーンの分離が挙げられる。電話網とかでは元々分離されているものなんだけど、Ethernetはそれを一体化して安く済ましているみたいな点があった。datapathはデータプレーンのことかな。