Linuxカーネル上でプログラミングを可能にするeBPF(の公式ドキュメンタリーを見たよ)
eBPF: Unlocking the Kernel [OFFICIAL DOCUMENTARY] - YouTube
eBPFとは?なぜそれが嬉しいのか?(知らない人向け)
動画のほうで分かりやすく語られているのでぜひどうぞ…だと寂しいので、ITを勉強し始めた人向けの目線で自分なりの説明を書きます…。
eBPFはユーザーがLinuxカーネル内で安全かつ高速にプログラムを実行する技術です。
eBPFを使うとユーザーがカーネルの動作を変更することができます。これにより、ソフトウェアによるネットワーク抽象化(SDN)やプログラムのトレーシングを行うための共通基盤など、ユーザーランドでは効率的に実装が不可能な要求を実現できるようになりました。
eBPFで実装された技術は、既にクラウド供給ベンダーやネットワークベンダーを支える基盤技術として稼働しています。例えば私たちがAmazonでお買い物をしたり、YouTubeやNetflixで動画を見たり、オフィスツールを使っている裏ではそれぞれの企業のクラウドサーバーにアクセスが行われ種々の処理をしているわけですが、その各サーバーを安定して動作させるための仕組みの仕組みを提供しているのがeBPFというわけです(動画で言われているように、実際にはサーバーだけでなくAndroidやセキュリティ製品などあらゆるソフトウェアに幅広く普及しています)。超々縁の下の力持ちですね。
このことから、eBPFの普及は「静かなプラットフォーム革命」と呼ばれています。
ドキュメンタリーの内容は?
eBPFがLinuxカーネルに導入された2014年前後の状況についてeBPFの作者(Alexei SarovoitovとDaniel Borkmann)や普及に尽力した主要人物たち対してインタビューを行ったものです。
実際の内容は動画を見ることを強くおすすめしますが、興味深いと思った点を以下に列挙します。
当時非常に熱い技術だったSDNを実現するためにeBPFを作ったけど、競合他社の技術がすでに完成していたので差別化が難しかった
特に「Open vSwitchが既に存在するのになぜ別のソリューションをカーネルに組み込む必要が?」という反発があった
eBPF自体にはネットワーク用途以外のクソデカポテンシャルがあると信じていたので別の用途があることを証明する必要があった
Brendan Gregg「Linuxカーネルのメーリングリストになんか面白いパッチが飛んできた」「AlexeiをNetflixに呼んでアイデアを色々話し合い、Kprobeをサポートしてくれれば色々ツールが作れるかもしれないということになった」
Alexei「このパッチがマージ(LinuxカーネルにeBPFが採用されること)されればきちんと使われるという自信を持った」
Daniel「パッチを送った後はスマホにかぶりついてマージされるのを今か今かと待っていた」
当初作っていたカーネル内で動作する命令セットは独自のものだったが、Linuxコミュニティにパッチを送る段階で人々に受け入れられやすいものに変える必要と考え、古のBPFを参考にした命令体系を揃えた
パッチを送られた側のLinuxカーネルメンテナ「なんか一石千鳥を殺すヤバい技術が出てきたのはすぐ分かった」
動画とは関係ないですが、いい話だと思ったのが、作者の一人であるAlexi Starovoitovさんが「パッチがマージされたらな…」と自信なさげに何度か呟いたのを見て、Brendan Gregg氏が「こんな面白いアイデアが採用されないわけないだろ!」といったところです(大意)。
この記事が言いたいこと
eBPFはとっても難しいけど面白い技術なので、もし興味を持ったら調べてみることをおすすめします。