Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
eBPFをFreeBSDにポーティングしようとしている話
Search
Yutaro Hayakawa
November 05, 2018
Technology
4
3.3k
eBPFをFreeBSDにポーティングしようとしている話
Talk at : OSSセキュリティ技術の会 第四回勉強会 2018年秋のBPFまつり
FreeBSDへのeBPFのポーティングの取り組みとそのユースケース(VALE-BPF)についてです。
Yutaro Hayakawa
November 05, 2018
Tweet
Share
More Decks by Yutaro Hayakawa
See All by Yutaro Hayakawa
Ciliumはどうテストされているのか
yutarohayakawa
1
240
How is Cilium Tested?
yutarohayakawa
6
570
eBPFのこれまでとこれから
yutarohayakawa
31
7.7k
NetKit Device
yutarohayakawa
6
1.5k
eBPFは何が嬉しいのか?
yutarohayakawa
3
2.1k
BufferbloatとLinux
yutarohayakawa
6
1.9k
Prism: Proxies without the Pain
yutarohayakawa
0
270
ipftrace: A Linux Function Tracer for Network People
yutarohayakawa
4
6k
きっと明日から役立つeBPFのしくみ
yutarohayakawa
10
4.7k
Other Decks in Technology
See All in Technology
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
1.2k
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.3k
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
120
SMTP完全に理解した ✉️
yamatai1212
0
200
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
3
1.1k
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
980
データの整合性を保ちたいだけなんだ
shoheimitani
3
700
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
130
Deno・Bunの標準機能やElysiaJSを使ったWebSocketサーバー実装 / ラーメン屋を貸し切ってLT会! IoTLT 2026新年会
you
PRO
0
220
あたらしい上流工程の形。 0日導入からはじめるAI駆動PM
kumaiu
5
740
開発メンバーが語るFindy Conferenceの裏側とこれから
sontixyou
2
550
2026年はチャンキングを極める!
shibuiwilliam
8
1.9k
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
1
230
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
210
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
110
Discover your Explorer Soul
emna__ayadi
2
1.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Code Reviewing Like a Champion
maltzj
527
40k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
430
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
How to make the Groovebox
asonas
2
1.9k
Visualization
eitanlees
150
17k
A better future with KSS
kneath
240
18k
Marketing to machines
jonoalderson
1
4.6k
Transcript
早川侑太朗 (慶応義塾大学) Mail:
[email protected]
Twitter: @YutaroHayakawa 1 eBPFをFreeBSDにポーティング しようとしている話
自己紹介 名前: 早川侑太朗 (はやかわ ゆうたろう) 職業: 修士学生 (慶應義塾大学・政策メディア研究科 2年) 研究分野
- 高速ソフトウェアパケット処理 - ネットワークプログラマビリティ - SDN・NFV オープンソース活動 - FreeBSD, Netmap, uBPF, LLVM (BPF関係) - Google Summer of Code 2018 (FreeBSD) Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 2
今日のお話 1. FreeBSDへのeBPFのポーティング 2. VALE-BPF: 高速パケット処理への応用 Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話
3
今日のお話 1. FreeBSDへのeBPFのポーティング 2. VALE-BPF: 高速パケット処理への応用 Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話
4
FreeBSDにeBPFは必要? LinuxがeBPFを使ってやっていることはFreeBSDではもう大体できる(?) - プログラミングインターフェース, サンドボックスとしてのeBPFはやはり魅力的 - LinuxのようにもともとあったフレームワークにeBPFを使える機能を足す 個人的にはNetmap/VALEと組み合わせて高速パケット処理に使いたい Yutaro Hayakawa
| eBPFをFreeBSDにポーティングしようとしている話 5 機能 Linux FreeBSD ダイナミックトレーシング eBPF + kprobe / perf DTrace システムコールフィルタリング eBPF + seccomp MAC Framework トンネリング eBPF + LWT Netgraph 高速パケット処理 (eBPF +) AF_XDP / XDP Netmap / VALE
ポーティングにあたって必要なこと ライセンスの問題があるのでコードはスクラッチ 今のeBPFにはLinux依存の機能があるで, 非依存の部分だけ取り出す - sk_buffを操作する命令 - Map (e.g. dev_map
sock_map cpu_map... ) - Verifier FreeBSDのセキュリティ要件との折り合いをつける - 特権の無いユーザに対してeBPFプログラムのロードを許すか - Specture... Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 6
generic-ebpf マルチプラットフォームなeBPFランタイムとサブシステムの実装 - ユーザスペースとカーネル両方で動く - libebpf.so とか ebpf.ko みたいなライブラリとして使える Linux依存の機能を削って汎用的に使えるものをまずは目指す
- インタプリタ・JITコンパイラ - Map - Verifier Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 7 ソース: https://github.com/YutaroHayakawa/generic-ebpf
現在のステータス (1/2) サポートしているプラットフォーム - カーネル: FreeBSD, Linux - ユーザスペース: FreeBSD,
Linux, macOS - 現状各プラットフォームごとに300行程度の小規模なグルーコード - それ以外の約4000行は共有 主な機能 - uBPFベースのインタプリタとx86-64のJITコンパイラ - Array map, Hash mapとそのPer-CPUバリアント - bpf(2)の代替としてキャラクタデバイス + ioctl(2)のインターフェース - Verifierはまだ... Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 8
現在のステータス (2/2) FreeBSD側への働きかけ - LLVMの(e)BPFバックエンドは追加済み (デフォルトではOFF) - BSDCan2018にて講演 (https://youtu.be/4vGZm2qlEBY) -
GSoC2018のプロジェクトとして採択 (https://wiki.freebsd.org/SummerOfCode2018Projects/eBPF ) - マージに向けて現在も開発中 ユースケース案募集中 Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 9
今日のお話 1. FreeBSDへのeBPFのポーティング 2. VALE-BPF: 高速パケット処理への応用 Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話
10
汎用OS上のソフトウェアパケット処理の問題 Ethernetの高速化 (10G, 40G, 100G ...) ワイヤーレートを出すには? (10Gの場合) - 最小フレームサイズ
(64B) で1パケットの処理にかけられる時間は67.2ns - 参考値: システムコール1回: 41.85ns, キャッシュミス1回: 32ns 従来のrawパケットIOフレームワーク(raw-socket, cBPF, tap...)の限界が浮き彫りに - Per Packetのシステムコール (read/write), メモリコピー, 動的メモリ確保 抜本的なOSの仕組みの見直しが必要に Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 11 参考:http://netoptimizer.blogspot.com/2014/05/the-calculations-10gbits-wirespeed.html
Intelの解法: DPDK (Data Plane Development Kit) ポーリング (⇔割り込み駆動) によって高速なパケットIOを実現 -
パケットIOのためにCPUを占有 - CPU使用率は常に100% カーネルの機能を殆ど使わず, デバイスドライバをユーザス ペースで実装 - いわゆる「カーネルバイパス」 とにかく速さを追求した設計 Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 12 App DPDK Library Poll Mode Driver User Kernel NIC Protocol Stack
Linuxの解法: XDP (eXpress Data Path) カーネルバイパスを避け, デバイスドライバでパケットをフック - eBPFを使ってパケット処理を記述 -
他のNICにパケットをリダイレクトできる - プロトコルスタックを使った処理にフォールバック可能 ユーザスペースにパケットをリダイレクトする機能 (AF_XDP) - 次世代Raw Socket XDPのハードウェアオフローディングができる製品も... - Netronome Agilio シリーズ Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 13 App Driver User Kernel NIC eBPF AF_XDP Protocol Stack NIC
FreeBSDの解法は?
FreeBSDの解法1: Netmap NICのパケットバッファをユーザスペースにmmap - バッチング - ゼロコピーパケット転送 - 静的にパケットバッファを確保 FreeBSDには2011年から標準で入っている
LinuxのAF_XDPやDPDKなどと似た機能 Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 15 Kernel User NIC Driver NIC Packet Buffer mmap’ed Shared Memory App /dev/netmap Kick TX/RX ioctl()
FreeBSDの解法2: VALE (Virtual Local Ethernet) Netmapベースの高速カーネル内スイッチ スイッチングロジックをカーネルモジュールで変えられる → パケットバッファやその他メタデータを受け取って出力ポートの番号を返す関数 LinuxのXDPと似た機能
Yutaro Hayakawa | eBPF implementation for FreeBSD 16 Kernel User netmap API netmap API mylookup uint32_t mylookup(struct nm_bdg_fwd *ft, uint8_t *dst_ring, struct netmap_vp_adapter *na, void *private_data) { struct ip *iph; iph = (struct ip)(buf + ETHER_HDR_LEN); if (iph - ft->ft_buf > ft->ft_len) { return NM_BDG_DROP; } return ntohl(iph->ip_dst) & 0xff; } mymodule.ko VALE Physical NIC VALE Port VALE Port
VALEの欠点 VALEモジュールを書くのはしんどい - カーネルの動きを強く意識して書く必要がある - 割り込みコンテキストとシステムコールコンテキストの区別 - ロックの使い分け 自由度が高すぎる -
カーネル内の機能は使い放題 - 逆にカーネルを壊し放題できてしまう Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 17
VALEの欠点 VALEモジュールを書くのはしんどい - カーネルの動きを強く意識して書く必要がある - 割り込みコンテキストとシステムコールコンテキストの区別 - ロックの使い分け 自由度が高すぎる -
カーネル内の機能は使い放題 - 逆にカーネルを壊し放題できてしまう Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 18 ここでeBPFが使えれば素敵なものができるのでは??
VALE-BPF カーネルモジュールを書く代わりに eBPFでVALEのス イッチングロジックが書ける VALEモジュールの中でeBPFのフックを実行 - VALE側に変更を加えずに実装可能 - JITを使えばパフォーマンス低下は少ない FreeBSDでのeBPFのユースケースとして提案中
Yutaro Hayakawa | eBPF implementation for FreeBSD 19 Kernel User netmap API netmap API vale-bpf.ko VALE eBPF lookup logic Physical NIC eBPF Program ソース: https://github.com/YutaroHayakawa/vale-bpf VALE Port VALE Port
パフォーマンス End-to-endのスループットを2つのケースでベンチマーク - Swap MAC: MACアドレスのsrcとdstをスワップしてフォワード - No Logic: パケットには触れずに右から左にフォワード
生のVALEモジュールの場合と比べおよそ9%ほどのパフォーマンスペナルティ XDPに比べて2%ほどのパフォーマンスゲイン Yutaro Hayakawa | eBPFをFreeBSDにポーティングしようとしている話 20 Swap MAC [Mpps] No Logic [Mpps] VALE 14.88 (wire rate) 14.88 (wire rate) VALE-BPF 13.58 13.62 XDP (redirect_map) 13.33 13.36 pkt-gen TX pkt-gen RX vale vale-bpf xdp 10GbE 10GbE Machine1 Machine2
まとめ 1. FreeBSDにとってもeBPFは魅力的な技術である 2. generic-ebpfというプロジェクトがFreeBSDマージに向けて進行中 3. ユースケースとして高速パケット処理基盤 VALE-BPFを提案中 Yutaro Hayakawa
| eBPFをFreeBSDにポーティングしようとしている話 21