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の知識をある程度前提にされているようで、ついて行けない。ちょっと予習が必要だったかも。講演資料は各自アップロードされているようなので、あとで復習しよう。
- 「Open vSwitchの使い方とか」(@kotto_hihihi) 後半のデータ構造はコードリーティングに役立ちそう。libvirt経由で使うときはbrcompatdカーネルモジュールを使う。これはbrctlコマンドなど既存のLinuxコマンドがそのまま使えるようになるラッパー。
- 「TremaでのOpen vSwitch」(@countone) Tremaのネットワークエミュレーションについて。仮想スイッチ(Open vSwitch)、仮想ホスト(phost)、仮想リンク(LinuxのVirtual Ethernetデバイス veth)。phostはTremaオリジンで、プロセスとして実行され、veth経由でパケットを授受できる。デモ。
- 「KVM&Open vswitchでVPSを作ってみる」(@mamesan) IP/MACアドレスのなりすましやvrrpdなどのフィルタリングするのにOVS使う。複数のOVSを繋げるのにまずはpoint to pointでGREを使おうと思っているが、考えるほど、Nicira拡張プロトコルにひっかかる。。。
- 「Trema::Switch」(@yasuhito) SDNは分散プログラミングの世界。バグのない分散プログラミングに向けて、フレームワークが手助けできることは何か?
- 「Open vSwitchソースコードの全体像」(@oshothebig) どうやって興味のあるコードがある場所を見つけるか。PORTINGはハードウェアへの移植を想定した文書だけど、アーキテクチャを知るには役に立つ。実際、ProntoのOpen FlowスイッチはOpen vSwitchをベースにdatapath部分がハードウェア化されたものらしいとか(「NCLC、OpenFlow完全対応のL2/L3スイッチ「Pronto」を発売」)。
もくもくタイムでは、トンネリングと仮想マシン(マルチテナント)話で盛り上がる。しかし、全然話について行けない私。vxlanとかNVGREとかいろんな規格が最近出てきているけど、NiciraはSTT (Stateless Transport Tunneling)という規格を提案しているそうな。IETF draftフェーズ? GREだとIPヘッダのあとにshim headerを挿入するので、TCP segmentation offloadなど各種ハードウェアオフロードが効かない。STTはTCPヘッダに偽装したヘッダにすることでハードウェアオフロードを活用できるようにしている。なかなか賢い。MTUサイズの問題はどうしても出てくるけど。
それから各規格の競合状態がどうなるとか。VMWare、Microsoft各社の対応とか。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と名付けたそうな。ところで「止れま」って標識は本当に実在するのね。海外からの出稼ぎ労働者が間違って作業しちゃったという説が有力とか。