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.1k
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
How is Cilium Tested?
yutarohayakawa
5
340
eBPFのこれまでとこれから
yutarohayakawa
10
5.4k
NetKit Device
yutarohayakawa
5
980
eBPFは何が嬉しいのか?
yutarohayakawa
3
1.9k
BufferbloatとLinux
yutarohayakawa
4
1.2k
Prism: Proxies without the Pain
yutarohayakawa
0
220
ipftrace: A Linux Function Tracer for Network People
yutarohayakawa
4
5.7k
きっと明日から役立つeBPFのしくみ
yutarohayakawa
9
3.8k
eBPF Implementation for FreeBSD
yutarohayakawa
0
350
Other Decks in Technology
See All in Technology
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
620
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
170
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
270
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
260
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
23
11k
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
100
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
530
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
2
240
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
420
Snowflake女子会#3 Snowpipeの良さを5分で語るよ
lana2548
0
220
2024年にチャレンジしたことを振り返るぞ
mitchan
0
130
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
427
64k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Agile that works and the tools we love
rasmusluckow
328
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
4 Signs Your Business is Dying
shpigford
181
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
94
Raft: Consensus for Rubyists
vanstee
137
6.7k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Visualization
eitanlees
146
15k
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