BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース MicrosoftがeBPFのWindowsへの導入に向けて取り組んでいる

MicrosoftがeBPFのWindowsへの導入に向けて取り組んでいる

ブックマーク

原文(投稿日:2021/05/16)へのリンク

Microsoftは、eBPFをWindows 10およびWindowsServer2016以降に導入することに取り組んでいることを発表した。サービス拒否攻撃からの防御や可観測性などのユースケースをサポートするためである。

ebpf-for-windowsプロジェクトは、開発者が既存のバージョンのWindows上で使い慣れたeBPFツールチェーンとアプリケーションプログラミングインターフェイス(API)を使用できるようにすることを目的としています。このプロジェクトは、他のプロジェクトをベースとして構築されています。いくつかの既存のeBPFオープンソースプロジェクトを取り上げており、それらをWindows上で実行するための「接着剤」として機能します。

eBPFは、ネットワーキング、セキュリティ、アプリケーションのプロファイリング/トレース、パフォーマンスのトラブルシューティングをサポートすることを目的としたツールのコレクションである。eBPFは、カーネルの再構築やカーネルモジュールのロードを必要としない方法で、Linuxカーネル上にこのような種類のソリューションを簡単に実装できるようにするために生まれた。これを可能にするeBPFの鍵は、特別なサンドボックス環境を使って静的に検証されたバイトコードを実行することである。

Microsoftによると、Linux上でのeBPFの利点が示されることで、他のオペレーティングシステムでもeBPFを使用したり、カーネルを超えてユーザースペースサービスやデーモンに使用を広げることに関心が高まっている。

eBPFのプログラムは、さまざまなソース言語で記述されており、eBPFバイトコードにコンパイルされている。Windowsでは、eBPFバイトコードはLibbpf APIsを実装するライブラリを使って使用できる。このライブラリは、netshコマンドラインツールにも統合されている。

最初のステップとして、ライブラリは生成されたバイトコードの正しさを検証しようとする。

バイトコードがすべてのベリファイアの安全性チェックに合格した場合、バイトコードはWindowsカーネルモード実行コンテキストで実行されているuBPFインタープリターにロードするか、あるいは、uBPFジャストインタイム(JIT)コンパイラーによってコンパイルしてネイティブコードをカーネルモード実行コンテキストにロードすることができます。

eBPFプログラムは、カーネルまたはアプリケーションが特定のフックを通過したときに実行される。これには、システムコール、関数の開始/終了、カーネルトレースポイント、ネットワークイベントなどが含まれる。eBPFプログラムは、カーネルのバージョンに厳密に依存するため、カーネル内では呼び出すことができない。代わりに、いわゆるヘルパー関数を使用する。このヘルパー関数は、特定のカーネル機能へのアクセスを提供する関数の集合である。

Microsoftの見解では、LinuxとWindowsで同じフックとヘルパー関数を使用するeBPFプログラムのソースコードの互換性を確保できるはずである。もちろん、多くのフックとヘルパー関数はLinuxに厳格に関連しているため、Windowsには適用できない。

ePBF for Windowsはまだ開発の初期段階にあり、現時点では、eXpressデータパス(XDP)用とソケットバインディング用に2つのフックしか使用できない。Microsoftは、今後フックとヘルパー関数をさらに作成することを計画しており、eBPFコミュニティの貢献を求めている。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT