Slide 1

Slide 1 text

僕はDPDKをやっている人ではありません (XDP・netmap 入門)

Slide 2

Slide 2 text

自己紹介 - 河原颯太(かわはらそうた) @khwarizmi6514 - 法政大学応用情報工学科 学部4年 金井(ネットワークセキュリティ)研究室所属 - 小学5年から野球を初めて高校3年までやっていた. - 春日部高校出身です! (これを言うといろんなところで先輩後輩が釣れることに最近 気が付いた) - パソコンとは無縁の生活だったが, 大学入学時, 気が付いたらパソコンをやらなけ ればいけなくなっていた. - 一緒に研究をしてくれる後輩募集中 (一人で研究をしていて寂しい)

Slide 3

Slide 3 text

最近やってること - NICのデバドラ開発 - NICのハードウェア機能活用による性能比較調査 - Linuxネットワークパフォーマンス調査 - XDPとnetmap *最近やりたいこと* - FreeBSDで性能調査(ネットワークスタック参照したりしときながら触ったことがな い) - 自作キーボード(家でやったらニッパがざこくてまだ完成してない) - FPGA(購入してLEDチカチカまでしてそのままタンスの奥にいる) - EDM作りたみがある

Slide 4

Slide 4 text

題名の意図 先輩の影響もあって(研究室内での)DPDKのイメージが割と強い DPDKに強いこだわりがあるわけではなくてレイヤの低いところを手広くやりたいだけな ので, 後輩の印象を操作しておきたかった

Slide 5

Slide 5 text

高速パケットIOフレームワーク カーネルのパケット IO に関するコストを大きく引き下げることがで きるようなフレームワークやライブラリ

Slide 6

Slide 6 text

メモリコピー ソフトウェア割り込み, ソケットキュー, ユーザ空間, それぞれへのコピーが発生する. 6

Slide 7

Slide 7 text

カーネルバイパスなメモリアクセス

Slide 8

Slide 8 text

netmap カーネルバイパスなメモリアクセスにより高速なパケットIOを実現 しているnetmapを使ってみます.

Slide 9

Slide 9 text

やってみる netmapAPIから利用できる仮想ポートであるVALEポートを用いて, pkt-genでパケット 転送テストをします

Slide 10

Slide 10 text

環境 - OS: ubuntu16.04 - kernel: 4.10.0-19-generic - インタフェース(NIC): VALEポート

Slide 11

Slide 11 text

ビルド・モジュールロード $ sudo apt install linux-headers-`uname -r` $ git clone https://github.com/luigirizzo/netmap.git $ cd netmap $ make $ insmod netmap.ko

Slide 12

Slide 12 text

pkt-gen $ cd apps/pkt-gen $ make $ sudo ./pkt-gen -i vale0:rx -f rx $ ./pkt-gen -i vale0:tx -f tx -R 1

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

XDP - eXpress Data Path - Linuxカーネル内で動作するebpfを用いた技術 - なんかすげえ流行ってるけど思いの外使ったことある人は少なめだった

Slide 15

Slide 15 text

XDP

Slide 16

Slide 16 text

XDPのポイント - カーネルの機能利用することができる - 透過的に現在利用しているアプリケーションに利用できる - 動的に使える - 下手するとカーネルパニック - eBPF verifierによる事前静的検証 - ループを許可しない (単純なループのみ許可する方向で話が進んでいるらしい - プログラムの長さを制限 (tail call で回避可能

Slide 17

Slide 17 text

やってみる Generic XDP(skbを割り当ててから処理を行う)を用いる - NICのサポートがなくてもXDPが使用できる - パフォーマンスは犠牲になっている

Slide 18

Slide 18 text

環境 - OS: Fedora 29-1.2 (ubuntuだと動かなかった) - kernel: 4.20.13 ( >= 4.12) - プログラムローダ: iproute2-ss190107

Slide 19

Slide 19 text

コード 全ドロップ

Slide 20

Slide 20 text

コンパイル&ロード $ clang -O2 -Wall -target bpf -c xdp_drop.c -o xdp_drop.o $ sudo ip link set dev enp0s8 xdp obj xdp_drop.o

Slide 21

Slide 21 text

確認とアンロード $ sudo ip link set dev enp0s8 xdp off

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content