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.2k
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
200
How is Cilium Tested?
yutarohayakawa
5
540
eBPFのこれまでとこれから
yutarohayakawa
29
7.4k
NetKit Device
yutarohayakawa
6
1.3k
eBPFは何が嬉しいのか?
yutarohayakawa
3
2.1k
BufferbloatとLinux
yutarohayakawa
5
1.6k
Prism: Proxies without the Pain
yutarohayakawa
0
260
ipftrace: A Linux Function Tracer for Network People
yutarohayakawa
4
6k
きっと明日から役立つeBPFのしくみ
yutarohayakawa
10
4.6k
Other Decks in Technology
See All in Technology
AI駆動開発2025年振り返りとTips集
knr109
1
130
Excelデータ分析で学ぶディメンショナルモデリング ~アジャイルデータモデリングへ向けて~ by @Kazaneya_PR / 20251126
kazaneya
PRO
3
590
TypeScript×CASLでつくるSaaSの認可 / Authz with CASL
saka2jp
2
140
AIで加速する次世代のBill Oneアーキテクチャ〜成長の先にある軌道修正〜
sansantech
PRO
1
140
雲勉LT_Amazon Bedrock AgentCoreを知りAIエージェントに入門しよう!
ymae
2
220
一億総業務改善を支える社内AIエージェント基盤の要諦
yukukotani
4
1.3k
経営から紐解くデータマネジメント
pacocat
7
1.5k
AI エージェント活用のベストプラクティスと今後の課題
asei
2
380
2025 DORA Reportから読み解く!AIが映し出す、成果を出し続ける組織の共通点 #開発生産性_findy
takabow
0
520
ブラウザ拡張のセキュリティの話 / Browser Extension Security
flatt_security
0
200
社内外から"使ってもらえる"データ基盤を支えるアーキテクチャの秘訣/登壇資料(飯塚 大地・高橋 一貴)
hacobu
PRO
0
8k
Digitization部 紹介資料
sansan33
PRO
1
6k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Designing Experiences People Love
moore
142
24k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Code Reviewing Like a Champion
maltzj
527
40k
Bash Introduction
62gerente
615
210k
Embracing the Ebb and Flow
colly
88
4.9k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
GitHub's CSS Performance
jonrohan
1032
470k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
11
940
A Tale of Four Properties
chriscoyier
162
23k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
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