GCC には eBPF へのコンパイルのためのバックエンドが含まれるようになりました

GCC コンパイラ スイートに含まれています 受け入れた Linux カーネルに組み込まれているバイトコード インタープリタ用のプログラムをコンパイルするためのコード eGMP。 JIT コンパイルの使用により、カーネルのバイトコードはオンザフライでマシン命令に変換され、ネイティブ コードのパフォーマンスで実行されます。 eBPF をサポートするパッチ 受け入れられました GCC 10 リリースの開発元のブランチに追加します。

GCC には、バイトコード生成用のバックエンドに加えて、eBPF 用の libgcc ポートと、カーネル提供のローダーを使用して eBPF 仮想マシンでコードを実行できるようにする ELF ファイルを生成するツールが含まれています。 GCC で eBPF をサポートするパッチは、Oracle のエンジニアによって準備されました。 提供 GNU binutils での eBPF サポート。 GDB 用のシミュレータとパッチも開発中です。これにより、カーネルにロードせずに eBPF プログラムをデバッグできるようになります。

eBPF のプログラムは C 言語のサブセットで定義し、コンパイルしてカーネルにロードできます。実行前に、eBPF インタープリタは、許可された命令の使用についてバイトコードをチェックし、コードに特定のルール (ループ禁止など) を課します。
当初、Linux 上で eBPF をコンパイルするには、LLVM ベースのツールが使用されました。 GCC の eBPF サポートは、追加の依存関係をインストールすることなく、1 つのツールキットを使用して Linux カーネルと eBPF プログラムを構築できるため、興味深いものです。

eBPF プログラムの形式では、ネットワーク操作ハンドラーの作成、トラフィックのフィルター処理、帯域幅の管理、システムの監視、システム コールの傍受、アクセスの制御、操作の頻度と時間のカウント、kprobes/uprobes/tracepoint を使用したトレースの実行を行うことができます。

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

コメントを追加します