SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
eBPFは何が嬉しいのか?
Yutaro Hayakawa
Isovalent
Self Introduction
● 早川侑太朗 (@YutaroHayakawa)
● Isovalent (2022 ~)
○ Ciliumの開発 (Datapathチーム)
○ マルチクラスタ (ClusterMesh), BGP, SRv6, etc…
● LINE Corporation (2019 ~ 2021)
○ 内製ロードバランサの開発・運用
○ 大規模LBaaSの成長期に体験した二つの問題
ユーザが使いたいもの
�
�
��
なぜか話題になるやつ
実装
eBPFで作られていることは誰にとってどう重要か?
eBPFで作られていることは誰にとってどう重要か?
↓
結局開発者にとってもユーザにとっても重要
*ポジショントーク
eBPFとは?
Linuxカーネル拡張を書くためのプログラミングフレームワーク
https://ebpf.io/what-is-ebpf
eBPFとは?
Linuxカーネル拡張を書くためのプログラミングフレームワーク
https://ebpf.io/what-is-ebpf
eBPFプログラミング
C言語で書く (mainとかはない見慣れないC), ClangにeBPFバイトコードを吐くモードが
ある
eBPFプログラミング
ファイルが消えるたびに消されたファイルの名前と消したプロセスのPIDを出力するプロ
グラム
eBPFとは?
Linuxカーネル拡張を書くためのプログラミングフレームワーク
https://ebpf.io/what-is-ebpf
Load
コンパイラから吐かれた「ELFファイル」をbpfシステムコールに渡せる形にする工程
詳しく知りたい方は => きっと明日から役立つeBPFのしくみ
主要なローダライブラリ => libbpf (C) , cilium/ebpf (Go), libbpf-rs (Rust)
eBPFとは?
Linuxカーネル拡張を書くためのプログラミングフレームワーク
https://ebpf.io/what-is-ebpf
VerifierとJIT Compiler
bpfシステムコールでロードされたプログラムはVerifierによって「検証」される
=>「安全」でなければ実行できない
検証が通ったらほとんどの場合JITコンパイルされる
=> 実行前に全部ネイティブマシン命令に変換(JSなどの動的JITとはちょっと違う)
検証が共通化できるのがeBPFバイトコードがアーキテクチャ非依存な理由
eBPFとは?
Linuxカーネル拡張を書くためのプログラミングフレームワーク
https://ebpf.io/what-is-ebpf
Hook / Event
カーネルの中でeBPFを実行できる場所
何かしらのイベントを契機にeBPFが実行される
代表的なフック
- Socket => socketに対するデータの入出力をフィルタする
- Syscall => システムコールの呼び出しをトレース・フィルタ
- kprobe / ftrace => カーネルの関数呼び出しなどをトレース
- TC / XDP => NIC入ったパケットを書き換え・ドロップ
- TCPの輻輳制御, スケジューラ, etc
eBPFとは?
Linuxカーネル拡張を書くためのプログラミングフレームワーク
https://ebpf.io/what-is-ebpf
eBPF Map
eBPFプログラムとユーザ空間から読み書きできるデータ構造
=> Hash, Array, Trie, Per-CPU Array, etc…
ユーザ空間とeBPFの情報のやりとりに使える (例えるならRedisのようなもの?)
eBPFは何が嬉しいのか?
何か新しいことができるようになったから嬉しい?
そもそも誰にとって嬉しい?
ユーザにとってプロダクトがeBPFで作られているのって重要?
eBPFによって何か新しいことができるようになった?
技術的にはなっていない
Linuxには元々「カーネルモジュール」がある
カーネルモジュールもeBPFもカーネル空間で動くプログラム
eBPFで実装できる機能は基本的にカーネルモジュールで作れる機能のサブセット
Ciliumをカーネルモジュールベースで作ることは理論的には可能 => でもやらない
eBPFはそもそも誰がなんのために作ったのか?
カーネル開発者にとってカーネルの開発があまりにも辛かったから必要だった
eBPFのオリジナルの作者
Alexei Starovoitov
現Meta, 元PRUMgridのエンジニア
IOVisorというプロダクトの一部だった
開発秘話的なプレゼン: The untold story of BPF
カーネル (モジュール) 開発の4つのつらみ
プログラミングのつらみ
メンテナンスのつらみ
アップストリームのつらみ
デリバリのつらみ
カーネル開発のつらみ - プログラミング -
カーネル空間は色んな意味で「安全」ではない
Cプログラミングそのものの辛み (メモリ管理等)
メモリアクセス違反 => マシンそのものが停止
ハング (デッドロック、無限ループ) => マシンそのものが停止
メモリリーク => 誰もリークしたメモリを回収しない
セキュリティホールを作る => 権限Maxな状態で攻撃に晒される
カーネル開発のつらみ - メンテナンス -
Linuxカーネルはカーネルモジュールに対して互換性を一切担保しない
あるバージョンで動いていたモジュールは次のバージョンで動く保証がない
Linuxの開発はかなり早い (9 - 10週ごとにリリース)
カーネル開発のつらみ - アップストリーム -
パッチをアップストリームすればバージョンアップで壊れるのは防げる
Linuxの開発者との交渉が必要 + レビューは厳しい
あまりにも特定の会社のビジネスに拠った変更は受け入れられないケースもある
カーネル開発のつらみ - デリバリ -
Masterに入った変更がディストリビューションカーネルに降りてくるのはいつ?
ディストリビューションによっては3 - 5年かかるケースもある
eBPFはカーネル開発のつらみをどう解決したか?
プログラミング: Verifierによる検証でプログラマのミスを未然に防ぐ
メンテナンス: eBPFのプログラムに対しては後方互換性が担保されるようにした*
アップストリーム: 互換性が担保されるということはアップストリームは不要
デリバリ: アップストリームしなくていいということはデリバリも即座にできる
カーネル開発のつらみが解消された結果どうなったか?
一般的な現場でもカーネル開発に手を出せるようになった
一般的な現場でもカーネル拡張の保守が現実的なコストでできるようになった
一般的なエンジニアから見て新しいこと(カーネル開発)ができるようになった
=> これが昨今の盛り上がりの一因?
eBPFは何が嬉しいのか?
何か新しいことができるようになったから嬉しい?
=> 技術的にはNoだが、一般的なエンジニアでもカーネル開発ができるようになったという
意味ではYes
そもそも誰にとって嬉しい?
=> カーネル開発者にとっては辛いところが解消されて嬉しい
ユーザにとってプロダクトがeBPFで作られているのって重要?
eBPFで作られているのはユーザにとって重要か?
重要だと言える
カーネル開発のつらみと結局は関係している
● プログラミングの難易度が高い => バグや脆弱性が紛れ込みやすい
● 互換性が担保されない => カーネルのアップデートがリスク、メンテされなくなれば
短い期間ですぐ使えなくなってしまう
● デリバリが遅い => 欲しい機能がすぐ手に入らない
ケーススタディ - Falco -
FalcoはなぜカーネルモジュールからeBPFベースの
実装に移行しているのか?
● Falcoのイベントコレクタはカーネールモジュー
ルベースだった
● ユーザからのフィードバックとして安定性、セ
キュリティ、互換性への懸念が示された
● Sysdig and Falco now powered by eBPF
まとめ
eBPFは何が嬉しいのか?
開発者目線
● 安全なカーネル開発ができるようになる
● カーネル拡張の保守が楽になる
● 開発・デリバリのスピードが上がる
エンドユーザ目線
● カーネル拡張の導入がより「安全」になる
● 互換性やプロダクトの持続性に対する懸念が軽減される
● 欲しい機能が素早く手に入る

Contenu connexe

Tendances

Tendances (20)

コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
 
[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
 
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
 
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるDockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐる
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす
 
NUCで始めるVMware Tanzu
NUCで始めるVMware TanzuNUCで始めるVMware Tanzu
NUCで始めるVMware Tanzu
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 

Similaire à eBPFは何が嬉しいのか

Changing Infrastructure operation by DevOps And Agile Development
Changing Infrastructure operation by DevOps And Agile DevelopmentChanging Infrastructure operation by DevOps And Agile Development
Changing Infrastructure operation by DevOps And Agile Development
Taiji Tsuchiya
 
EPUB3以降とReadium
EPUB3以降とReadiumEPUB3以降とReadium
EPUB3以降とReadium
Makoto Murata
 
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
masayoshi takahashi
 
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるかDeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
bitbank, Inc. Tokyo, Japan
 

Similaire à eBPFは何が嬉しいのか (20)

ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 
CONBU API の開発
CONBU API の開発CONBU API の開発
CONBU API の開発
 
Changing Infrastructure operation by DevOps And Agile Development
Changing Infrastructure operation by DevOps And Agile DevelopmentChanging Infrastructure operation by DevOps And Agile Development
Changing Infrastructure operation by DevOps And Agile Development
 
MBaaS for Global and China
MBaaS for Global and ChinaMBaaS for Global and China
MBaaS for Global and China
 
20150228 OSC2015 Tokyo/Spring サンプルコードで理解するアプリケーションのIPv6対応
20150228 OSC2015 Tokyo/Spring サンプルコードで理解するアプリケーションのIPv6対応20150228 OSC2015 Tokyo/Spring サンプルコードで理解するアプリケーションのIPv6対応
20150228 OSC2015 Tokyo/Spring サンプルコードで理解するアプリケーションのIPv6対応
 
GTC 2016 基調講演からディープラーニング関連情報のご紹介
GTC 2016 基調講演からディープラーニング関連情報のご紹介GTC 2016 基調講演からディープラーニング関連情報のご紹介
GTC 2016 基調講演からディープラーニング関連情報のご紹介
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
 
IPv6標準化と実装
IPv6標準化と実装IPv6標準化と実装
IPv6標準化と実装
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
 
.NET Micro Framework is my spirit.
.NET Micro Framework is my spirit..NET Micro Framework is my spirit.
.NET Micro Framework is my spirit.
 
EPUB3以降とReadium
EPUB3以降とReadiumEPUB3以降とReadium
EPUB3以降とReadium
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
 
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるかDeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
 
クライアント推し。
クライアント推し。クライアント推し。
クライアント推し。
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
 
2014-01-28 Operation in the future
2014-01-28 Operation in the future2014-01-28 Operation in the future
2014-01-28 Operation in the future
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
【Interop Tokyo 2016】 エコシステムですすめる レノボのSDIソリューション
【Interop Tokyo 2016】 エコシステムですすめる レノボのSDIソリューション【Interop Tokyo 2016】 エコシステムですすめる レノボのSDIソリューション
【Interop Tokyo 2016】 エコシステムですすめる レノボのSDIソリューション
 

eBPFは何が嬉しいのか