狠狠撸

狠狠撸Share a Scribd company logo
顿笔顿碍を拡张してみた话し 
Nov 18th, 2014 
IGEL Co.,Ltd. 
Tetsuya Mukawa 
武川 哲也
あなたは誰ですか? 
?10年くらい組込みLinuxをやってきました。 
?Lagopusの開発に参加させていただき、 DPDKを触っています。 
?開発内容 
–ゲスト上のDPDKアプリと、ホスト上のDPDKアプリが高速 通信可能な方式の検討実装 
–DPDKにたいして、動的ポート追加削除機能の実装 
2
話しの内容は?? 
?私達が開発中で、DPDK-2.0にマージされるか もしれない機能のデモをやります。 
3
Demoの内容は? 
4 
ゲスト上のDPDKア プリと、ホスト上の DPDKアプリを高速 通信させるデモ 
Keywords 
?QEMU 
?NFV 
?vhost-user 
Demo1 
DPDKアプリの動作 中にポートを動的に 追加削除するデモ 
Keywords 
?PCI Hotplug 
?virtual device Hotplug 
Demo2
用語解説: PMD 
?Poll Mode Driverの略です。 
?ユーザ空間で動作するデバイスドライバです。 
?実デバイスに対するPMDと、仮想デバイスに対する PMDが存在します。 
5
用語解説: Null PMD 
?/dev/nullライクなPMDです。自分で書いてみました。 
–幾らでもパケットを受信できる。 
–幾らでもパケットを送信できる。 
?仮想デバイスに対するPMD 
?http://dpdk.org/dev/patchwork/patch/686/ 
?実デバイスを必要とせず、高速に動作するので、デ バッグやパフォーマンス調査に超便利 
?もちろん、マージされてません。(T_T) 
6
用語解説: testpmd 
?DPDKに標準で添付されるサンプルアプリ 
?いろいろな動作オプションがありますが、とりあえず、 以下のように動作すると思ってください。 
7 
testpmd 
port0 
port1 
portN 
portN+1 
????? 
(Nは偶数) 
2つのポート間で双方向にパ ケットを転送
Demo1: デモ環境 
8 
testpmd on guest 
testpmd on host 
p0 
p1 
p0 
p1 
基本的なアイデアは、左図の 通り。 ゲストとホストの上で、 testpmdを動作させ、左のよ うに結線すれば、可能な限り 早くパケット転送する。 あとは、どのくらいのパケット が転送されたかを表示してみ る。
Demo1: 昔ながらの通信方法の場合 ~virtio-net & pcap経由~ 
9 
kernel space on host 
user space on host 
DPDK App1 
Guest 
QEMU 
kernel space on VM 
user space on VM 
DPDK App2 
virtio-net 
virtio-net PMD 
pcap PMD 
tap driver 
uio 
tap client 
この線が2つあるのが、 今回のデモ構成
Demo1: 実際のデモ 
10
Demo1:なんで、こんなに遅いの? 
参考 https://www.nic.ad.jp/ja/materials/iw/2011/proceedings/s09/s09-02.pdf 
Guest 
Host 
Kernel 
User 
DPDK App1 
pcap PMD 
tap driver 
QEMU 
tap client 
virtio-net 
KVM 
DPDK App2 
virtio-net PMD 
uio 
コピー 
コピー 
パケット バッファ 
コピー 
コピー 
割り込み 
割り込み 
割り込み 
※注意 黒線をまたぐと コンテキストスイッチ発生
Demo1: vhost-userを使った場合 ~virtio-net & vhost-user backend経由~ 
12 
kernel space on host 
user space on host 
DPDK App1 
Guest 
QEMU 
kernel space on VM 
user space on VM 
DPDK App2 
virtio-net 
virtio PMD 
vhost- user backend 
QEMU-2.1以上では、vhost-net のバックエンドを、ユーザ空間にイ ンプリさせるための仕組みが実装 されている(vhost-user)。 なお、この仕組みでは、ゲストの 物理メモリは、hugetlbfsから取得 する必要がある。 
eventfd
Demo1: 実際のデモ 
13
Demo1: なんで、こんなに速いの? 
参考 https://www.nic.ad.jp/ja/materials/iw/2011/proceedings/s09/s09-02.pdf 
Guest 
Host 
Kernel 
User 
DPDK App1 
vhost -user backend 
QEMU 
KVM 
DPDK App2 
virtio-net PMD 
uio 
パケット バッファ 
コピー 
割り込み 
割り込み 
割り込み 
※注意 黒線をまたぐと コンテキストスイッチ発生 
eventfd 
割り込み 
App1とApp2 が共にポーリ ングしている ので、通知は 必要なし!
Demo2: 動的なポート追加削除 
?DPDK-2.0にマージされることを目指して開発中 
–DPDK MLにSubmit済み 
–動的にポートを追加削除可能なAPIをDPDKに追加 
–DPDKアプリ側でも対応が必要 
–サンプルとして、testpmdに動的にポートを追加削除 する機能を実装。 
–今回のデモでは、動的にポートを追加削除することが 可能となるパッチを適用したうえで、testpmdを改造 
15
Demo2: 実際のデモ 
16
終わりに 
?駆け足で説明したので、分け分からんという方 は、この後の懇親会で聞いてください。 
?DPDKについては、下記のような資料も作って いるので、参考にしてください。 
–“CELF Jamboree 50”で検索! 
–http://elinux.org/images/8/80/Introduction_to_Intel_DPDK_v2.pdf 
17

More Related Content

顿笔顿碍を拡张してみた话し