Oh, nice packet

slankdevの報告

サイボウズ・ラボユース 第6期

2016/2/1から1年間、サイボウズ・ラボユースという制度で研究開発の支援を受けていた. 一年間、本当に強力なサポートをしていただき、我ながら圧倒的に成長した気がするので、 他の人にもぜひ体験していただきたく、ラボユースの紹介と報告をしようと思う。 ラボユースでは高性能なネットワークスタックの開発を行い、10GbE環境でLinuxよりPingの応答が 2倍早いネットワークスタックが出来上がった。

以下は成果報告会の発表資料である。

https://www.slideshare.net/mobile/slankdev/dpdk-74027268

サイボウズラボユースとは

http://labs.cybozu.co.jp/youth.html:tittle

引用: サイボウズ・ラボユースは、世界に通用する日本の若手エンジニアの発掘と育成を 目指すことを目的とし、学生の若手クリエイターに研究開発の機会を提供する(以下省略)

選考を通過し、採択されると、開発を技術/金銭面で支援をもらえる. 勉強ができてなおかつお金ももらえるというのはとても素晴らしい制度だ、と よく宣伝するのだが、これはその程度の代物ではない

サイボウズ・ラボユースというのは、
お金を払っても教えてもらえないような、極めて優秀な技術者に教育してもらえ、 こちらの要望に対して要求するだけのサポートをしてもらえる。さらにお金ももらえる。

開発テーマ概要

私はラボユースで以下のソフトウェアを開発した。1つのソフトウェアを 開発するという内容が多いが、私は思ったより速く進捗したので発展的にテーマを 広げていくことにした。

  • パケット解析ライブラリ LibPGEN
  • 高性能ネットワークスタック STCP
  • 高性能通信基盤フレームワーク Susanow

開発のバックグラウンドは割愛。後日別の記事で書けたらいいと思う。 以降ではラボユース期間中の開発内容とどのようなサポートをサイボウズラボに していただいたかをまとめようと思う。

パケット解析ライブラリ LibPGEN

github.com

LibPGENは任意のプロトコルに拡張可能なパケット解析ライブラリである。

最初にラボユースに採択していただいたときの開発テーマ。 私はパケットが好きで、パケットを自由に作ったり、解析したり、送受信したり、 といったことができるツールを探していた。

ラボユースに採択されたタイミングである程度出来上がっていて、ラボユース中は その設計の見直しと再実装を行った。

まともにC++をつかったことがない状態からパケット解析を行うライブラリの美しい設計 を考えてそれを実装した。

ライブラリとしてまだ出来が良くないので、少しずつ新バージョンの構成を練っている。

ネットワークスタック STCP

github.com

STCPはDPDKを用いた高性能なネットワークスタックである。

ラボユース中の80%ほどはこのSTCPの開発に取り組んだ。 「Linuxより高性能なネットワークスタックの開発をDPDKを用いて行う。」 という壮大な目標をたてて、4月から12月まで0から勉強して設計実装をした。

FreeBSDのネットワークスタックのソースコードを参考にして、設計をしようとしたが、 TCPの設計実装で完全に自己流になってしまった。

結果としてはEther,ARP,IP,ICMP,UDP,TCPの実装が完了し、 Pingの疎通にかんしてはLinuxカーネルのネットワークスタックの2倍の性能がでるような ものが出来上がった。

ただ、DPDKの性能をほとんど出せておらず、より高性能にするにはネットワークIO の部分の再設計が必要なことが分かったので、後述するSusanowの開発と同時進行で エンハンスを進めていければよいと思う。

DPDKを用いた高性能通信基盤 Susanow

github.com

Susanowはトラフィックに合わせて自動でチューニングされ、高性能通信を支える フレームワークを目指して、開発を行っている。

STCPの開発により, DPDKを使いこなすには以下を理解し、それに最適なソフトウェアを 設計する必要がある. ということを理解した.

そして上記の内容は"人間のチューニング"が必要不可欠である。ということも理解した。 なので次は以下のシステムを考案し、開発をすることにした。

  • DPDKを用いた高性能通信基盤フレームワークの開発をプログラマがNFVアプリケーションを開発し
  • それをSusanow上で動かせば自動で高性能にチューニングされ動作する

これは現在開発中であり、現状では高性能通信の試験を行いやすくするための ライブラリ、のようにして使用している。

優秀な同世代と交われること

私はセキュリティ・キャンプでコンピュータの世界に入ったのだが、あれは1週間の間に ものすごい人たちと生活を共にし、やる気の起爆剤になるようなイベントだと考えている が、ラボユースはそれが1年間続く。

前々から神のように崇めていた @elliptic_shiho とはずいぶん仲良くなれたし、 多大なる影響を受けた。私がリッチなGUI環境でなく、DwmをC++移植し利用しているのは 間違いなく彼の影響である。

また優秀なOBとも交流することができたのも、ラボユースの強力な強みである。 私は @liva_jy とここで知り合うことができ、高性能通信の分野にチャレンジすることを 決めた。

アンテナをはる、という意味でも、とても良い環境を提供してもらった。

感想

1年間,ものすごく充実した時間を過ごすことが出来た。

無限に先があることを痛いほどに実感したのもサイボウズラボのおかげである。

一年間厳しく指導をしてくださった光成滋生氏、ありがとうございました。 今後も精進してすごい人になるために頑張ります。