Netdev 0x13 から見た Linux ネットワークの最新動向

Yoshiki Komachi
nttlabs
Published in
10 min readMay 20, 2019

こんにちは,NTT オープンソースソフトウェアセンタの小町です.

私が所属する NTT オープンソースソフトウェアセンタでは,Linux や ‎PostgreSQL をはじめとする,様々なオープンソースソフトウェアに対するコミュニティ活動に取り組んでいます.私は Linux カーネルにおけるネットワーク機能の開発に関心があり,関連の開発者が集う Netdev 0x13 に参加してきましたので,今回の記事ではそのレポートをお届けします.

イベント概要

Netdev は,Linux コミュニティのネットワーク機能を開発するメンバが参加する会議です.Linux Plumbers Conference の Networking Track と並んで,コミュニティの主要なメンバが一堂に会する,重要なイベントのひとつです.今回はチェコにある,Hotel Grandium Prague という場所で,3/20(水)から 3/22(金)の期間に開催されました.参加人数は回を増す毎に増加する傾向にあり,35 ヶ国から 240 名を超える出席者によって,活発な議論が行われました.

会場となった Hotel Grandium Prague(左)と,主な参加国の一覧(右)

例年,採用される発表は多岐にわたっていますが,ネットワーク機能における性能の改善は,議論が最も白熱するテーマのひとつです.近年では,汎用サーバ上で柔軟にネットワーク機能を拡張可能な NFV (Network Function Virtualization) を,Linux 上の仮想マシンなどで実現する方式が提案されています.しかし汎用性の高さゆえに,従来の Linux におけるネットワーク処理はオーバヘッドが大きく,NFV が要求する水準の性能を達成することは困難でした.こういった背景を一例として,Linux ネットワークのコミュニティでは,多くの開発者が高性能なネットワーク機能の実現というテーマに取り組んでいます.

セッションの紹介

並列して行われていたセッションもあったため,すべての発表を聞くことはできませんでしたが,Linux におけるネットワーク性能の改善に関する発表を中心に,特に興味深い内容だったものをいくつか紹介したいと思います.

XDP Hands-On Tutorial

by Jesper Brouer and Toke Høiland-Jørgensen (Red Hat)

会議の初日はワークショップやチュートリアルが多く開催されており,私はネットワーク高速化技術として注目を集める,XDP のチュートリアルに参加しました.XDP (eXpress Data Path) は,ユーザが実装したプログラムで安全にカーネルを拡張可能な,eBPF (extended Berkeley Packet Filter) を応用した技術です.Linux に同梱されているネットワークデバイスドライバに対して,ユーザが実装したネットワーク機能を挿入し,パケットを受信した直後にその実装した処理を行うことで,高速で柔軟なネットワーク機能を実現します.ここではサンプルプログラムを例に,XDP プログラムのビルド方法や,その実装に関するデモンストレーションが行われました.チュートリアルのプログラムなどは GitHub で公開されているので,XDP 技術について学ぶ際に役立ちます.

Improved syscall batching for network I/O

by Rahul Jadhav, Zhen Cao, and Anmol Sarma (Huawei)

アプリケーションにおいてネットワーク I/O を操作する場合,CPU の利用率を低減させるためには,カーネルの機能を利用する際に呼び出されるシステムコール数を減らす必要があります.既存のシステムコールは,多量のパケットをソケット単位でまとめてバッチで処理することにより,ソケット毎に発生するオーバヘッドを削減できます.しかし現状では,リバースプロキシのように,複数のソケットで多量のパケットを扱う場合,ソケット数に比例してシステムコールの呼び出し数が増加してしまう傾向にあります.そこで,こういった問題を解決するために,複数ソケットによる多量のパケットをまとめて,1 つのシステムコールでバッチ処理することによって,オーバヘッドを削減する手法を提案しています.

XDP offload with virtio-net

by Jason Wang (Red Hat)

仮想化によるオーバヘッドの影響で,仮想マシンにおけるパケット処理性能は,ベアメタルよりも低くなってしまうことが近年では問題視されています.仮想マシンに接続された virtio デバイスを XDP で高速化する場合も同様で,このセッションではまず,仮想化におけるボトルネックについて考察しています.性能面での課題を改善するために,本来ゲストのデバイスで行われる処理を,ホストのデバイスへとオフロードした結果,macvtap デバイスの passthrough モードにおいては,ベアメタル上のホストでの処理と同等の性能が実現できたとのことです.

Veth XDP: XDP for containers

by Toshiaki Makita (NTT Open Source Software Center) and William Tu (VMware)

弊社の牧田が登壇し,自身が開発した veth ドライバに対する,デバイスドライバのレイヤでパケット処理が可能な Native XDP の実装について,発表しました.これは Linux カーネル 4.19 に採用された機能です.発表の詳細については別の記事で本人から紹介がありますので,そちらの投稿をお待ちください.

AF_GRAFT: A new address family for containerized applications

by Ryo Nakamura (The University of Tokyo)

近年の複雑化するコンテナネットワークのオーバヘッドについて調査し,ゲストコンテナのネットワークスタックをバイパスする新しいアドレスファミリとして,AF_GRAFT を紹介しています.これによって,重複したネットワーク処理を回避することができるので,コンテナ上のアプリケーションを利用する場合でも,ホストにおけるパケット処理と同等の性能を発揮できるようになります.LD_PRELOAD により,呼び出すシステムコールをランタイムに変更する機能も実装されており,既存のアプリケーションに対しても変更を加えることなく,このアドレスファミリを利用できます.詳しくは,Github で公開されているソースコードなどをご覧ください.

Is reimplementation of network stack a good idea or not?

by Hajime Tazaki (IIJ Research Laboratory)

Linux のネットワークスタックはオーバヘッドが大きいため,DPDK など,カーネルをバイパスし,ユーザ空間で高速なネットワーク処理を実現する手法が提案されています.しかし,こういった手法では,既存のネットワークスタックが備える,成熟した機能群を利用することはできないという欠点があります.近年では,様々なネットワークスタックが再実装されていますが,やはり Linux などによって提供される,既存のネットワークスタックを利用すべきだと結論づけています.検証の結果,Linux が提供するネットワークスタックの高い成熟度が示されましたが,それと同時に,不足している機能もいくつか明らかになりました.

HW acceleration of XDP real world use cases

by Rony Efraim and Amir Ancel (Mellanox Technologies)

近年では,高スループットや CPU 利用率の低減を目的として,パケットに対する処理をハードウェアにオフロードする機能が注目されており,Linux では,TC (Traffic Control) という機能にオフロードのための仕組みが実装されています.発表者たちは,XDP を応用した L4 ロードバランサである Katran のロジックの一部を,TC でハードウェアにオフロードしたところ,約 46% の性能改善に成功しています.Katran は Facebook によりオープンソース化されており,今回の発表で新しく追加された機能も Github で公開されています.

XDP based DDoS Mitigation

by Arthur Fabre (Cloudflare)

自社で運用している DDoS の緩和システムにおいて,どのようにして XDP や eBPF を適用しているか,紹介がありました.具体的には,ある一定の間隔でパケットをサンプリングし,攻撃と思われるパケットに対するフィルタリングルールを自動で生成します.この際,eBPF の前身である cBPF (classic Berkeley Packet Filter) でルールを生成し,独自のコンパイラを用いて eBPF プログラムへと埋め込むことによって,通常よりも実行プログラムの命令数を削減しています.また発表内では,コンパイルされた同一の eBPF バイトコードを,全てのエッジサーバ上で実行できるようにするための工夫についても紹介していました.

おわりに

この記事では,ネットワーク機能における性能の改善という観点から,Linux コミュニティで提案されている最新の技術などをいくつか紹介しました.今回の会議では,ここ数年の Linux ネットワーク開発コミュニティにおいて話題性の高い XDP に関連する発表が多かったほか,TC やオフロードにフォーカスしたテーマも多く見られました.今後もこういった機能の開発は,活発に行われていくことが予測されます.依然として,性能の向上を目的とした議論は大いに盛り上がっているので,Linux カーネルやネットワークなどに興味がある方は,これからの動向に注目してみてください.

最後になりますが,私たち NTT は未来の Linux ネットワークについて,共に議論する仲間を募集しています.ぜひ弊社ソフトウェアイノベーションセンタ紹介ページや,採用情報ページをご覧ください.

--

--

Yoshiki Komachi
nttlabs
Writer for

Software Engineer at Nippon Telegraph and Telephone Corporation.