RustでeBPFハンドラーを作成するためのAyaライブラリを導入しました

Aya ライブラリの最初のリリースが紹介されています。これにより、JIT を使用した特別な仮想マシンの Linux カーネル内で実行される eBPF ハンドラーを Rust 言語で作成できます。 他の eBPF 開発ツールとは異なり、Aya は libbpf と bcc コンパイラーを使用しませんが、代わりに Rust で書かれた独自の実装を提供します。これは libc クレート パッケージを使用してカーネル システム コールに直接アクセスします。 aya のビルドには、C 言語ツールやカーネル ヘッダー ファイルは必要ありません。 ライブラリ コードは、MIT および Apache 2.0 ライセンスに基づいて配布されます。

主な機能:

  • BTF (BPF Type Format) のサポート。BPF 疑似コードで型情報を提供し、型チェックと現在のカーネルによって提供される型へのマッピングを行います。 BTF を使用すると、さまざまなバージョンの Linux カーネルで再コンパイルせずに使用できるユニバーサル eBPF ハンドラーを作成できます。
  • 「bpf-to-bpf」呼び出し、グローバル変数、およびイニシャライザのサポート。これにより、eBPF での作業を考慮して関数を再定義するランタイムとして aya を使用する通常のプログラムと同様の方法で、eBPF 用のプログラムを設計できます。
  • 通常の配列、ハッシュ マップ、スタック、キュー、スタック トレース、ソケットおよびパフォーマンス追跡構造など、さまざまなカーネル タイプのサポート。
  • トラフィックのフィルタリングと管理のためのプログラム、cgroup ハンドラーとさまざまなソケット操作、XDP プログラムなど、さまざまなタイプの eBTF プログラムを作成する機能。
  • ノンブロッキング モード tokio および async-std での非同期リクエスト処理のプラットフォームのサポート。
  • カーネル アセンブリおよびカーネル ヘッダー ファイルへの接続を必要としない高速アセンブリ。

このプロジェクトはまだ実験的なものとみなされており、API はまだ安定しておらず、開発が続けられています。 また、計画されたすべての機会はまだ実現していません。 開発者は年末までに、Aya の機能を libbpf と同等にし、2022 年 XNUMX 月に最初の安定版リリースを作成する予定です。 Linux カーネル用の Rust コードを記述するために必要なAya の部分と、eBPF プログラムのロード、アタッチ、および対話に使用されるユーザー空間コンポーネントを組み合わせる計画もあります。

eBPF は Linux カーネルに組み込まれたバイトコード インタプリタであることを思い出してください。これにより、ネットワーク操作ハンドラの作成、システム動作の監視、システム コールのインターセプト、アクセスの制御、タイミングを維持しながらイベントの処理、操作の頻度と時間の計算、実行を行うことができます。 kprobes/uprobes /tracepoints を使用したトレース。 JIT コンパイルの使用により、バイトコードはオンザフライで機械語命令に変換され、ネイティブ コードのパフォーマンスで実行されます。 XDP は、ネットワーク ドライバー レベルで BPF プログラムを実行するためのツールを提供し、DMA パケット バッファーに直接アクセスする機能を備えています。これにより、ネットワークの重い負荷の下でも動作する高性能プロセッサを作成できます。

出所: オープンネット.ru

コメントを追加します