eBPFに関するttsurumiのブックマーク (12)

  • 第694回 libbpfとclangでポータブルなBPF CO-REバイナリ作成 | gihyo.jp

    第688回と第690回では、カーネルのトレーシングツールとして注目されているeBPFを活用するためのツールとしてBCCを紹介しました。 また第692回ではBCC以外のeBPFを活用したツールの利用方法も紹介しています。 今回は一般的なコンパイラのようにバイナリを生成でき、移植性が高く、そして近い将来eBPFを使うための流のひとつとなりそうなBPF CO-REについて紹介しましょう。 BPF CO-REの登場 BPF CO-RE(Compile Once - Run Everywhere)については第692回でも軽く紹介しました。改めてまとめると、次のような機能を実現する仕組みです。 BPFを利用したバイナリを実行環境とは異なる環境でビルドできる カーネルバージョン間の違いもある程度は吸収してくれる 実行バイナリのサイズはそれなりに小さくなる コンテナ内部などターゲットと異なるカーネルが動

    第694回 libbpfとclangでポータブルなBPF CO-REバイナリ作成 | gihyo.jp
  • BPF_PROG_TEST_RUNでXDPプログラムの挙動をテストする - yunazuno.log

    eBPFには BPF_PROG_TEST_RUN と呼ばれる機能がある。これを活用すると、XDPやtc-bpf(8)向けに実装したパケット処理プログラムの挙動をテストすることができる。 BPF_PROG_TEST_RUN? BPF_PROG_TEST_RUNはbpf syscall経由で使用できる1機能。テストしたいeBPFプログラムとパケットのバイト列を入力として与えると、実行結果の返り値と処理後のパケットバイト列、および処理にかかった時間が出力として得られる。このとき、テスト対象のプログラムは実際にネットワークインタフェースにアタッチされるわけではないので、実行環境に影響を与えることなくテストを遂行できる。 lwn.net libbpfに bpf_prog_test_run() というラッパ関数が用意されているので、実用上はこれを経由して使用するのが便利。 libbpf/bpf.c a

    BPF_PROG_TEST_RUNでXDPプログラムの挙動をテストする - yunazuno.log
  • 詳説 eBPF 実装編 - VA Linux エンジニアブログ

    1. はじめに 2. 使用環境 3. コンパイル 4. opensnoopとは 5. opensnoop.bpf.cの解説 5.1 mapの宣言 5.2 BPFプログラムのメイン処理 5.2.1 33-68行目 5.2.2 88-124行目 5.2.3 プログラムタイプとコンテキスト 5.3 opensnoop.bpf.cのコンパイル 6. opensnoop.cの解説 6.1 ヘッダファイルのインクルード 6.2 BPFアプリケーションのメイン処理 6.3 231-232行目 6.4 opensnoop_bpf__open 6.4.1 bpf_object__init_maps 6.4.2 bpf_object_init_progs 6.5 241-245行目 6.6 opensnoop_bpf__load 6.6.1 bpf_object__create_maps 6.6.2 bpf_

    詳説 eBPF 実装編 - VA Linux エンジニアブログ
  • XDPでPacket Rewriting – MySQLのポートを書き換える - GMOインターネットグループ グループ研究開発本部

    次世代システム研究室のS.T.です。今回はLinuxカーネルに実装されているパケット処理基盤XDPで,特定ポート宛て通信の宛先ポート書き換えを試してみます。MySQLは脇役です。 はじめに XDPとは XDP(eXpress Data Path)はLinux kernel 4.8から実装された<fn>BPF Features by Linux Kernel Version</fn>パケット処理基盤です。古くからカーネルに実装されているパケットフィルタであるBPFを拡張して,カーネル内部の関数にアタッチしてメトリクス収集などを行えるようにしたeBPFを,ネットワークデバイスのドライバに近い関数に適用可能にしたもの,というとイメージがつきやすいかと思います。図1のようなイメージでパケットを処理します。XDPを使うと,カーネルのプロトコルスタックに入る前のパケットを参照・改変することができるため

    XDPでPacket Rewriting – MySQLのポートを書き換える - GMOインターネットグループ グループ研究開発本部
  • BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能

    BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能:Berkeley Packet Filter(BPF)入門(3)(1/3 ページ) Linuxにおける利用が急速に増えている「Berkeley Packet Filter(BPF)」について、基礎から応用まで幅広く紹介する連載。今回は、BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能について解説します。 Linuxにおける利用が急速に増えている「Berkeley Packet Filter(BPF)」について、基礎から応用まで幅広く紹介する連載「Berkeley Packet Filter(BPF)入門」。初回は、BPFの歴史や概要について解説し、前回はBPFの基礎として、Linuxで用いられるBPFのアーキテクチャなどを説明しました。 今回は、BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能

    BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能
  • eBPF verifier

    eBPF verifiterでkernel内の関数を安全に呼びだせるように何をしているのか気になったので読んでみた

    eBPF verifier
  • eBPF の紹介 - Qiita

    富士通の非公式Advent Calendar 2018 9日目 の記事です。記事の内容は個人の見解であり、所属する組織を代表するものではありません。 はじめに Linux kernel の比較的新しい機能である eBPF について簡単に調べてみたので、その概要と使い方を紹介します。 eBPF は extended Berkeley Packet Filter の略で、ざっくり言うと、ユーザ空間で作成したプログラムをカーネルに送り込んで、独自の命令セット を持つカーネル内部の仮想マシン(以下VM)上で実行できる機能です。名前の通り、eBPF は BPF(Berkeley Packet Filter)と呼ばれる古くからあるパケットフィルタの技術を拡張したもので、パケットフィルタに限らず OS 用途一般に使えるようになっています。 システムに危険を及ぼす可能性のあるコードは、事前のチェックで検出

    eBPF の紹介 - Qiita
  • 第690回 BCCでeBPFのコードを書いてみる | gihyo.jp

    第688回の「eBPFのコンパイラーに対応したツールでさまざまな挙動を可視化する」ではBPF Compiler Collectionに付属の各種サンプルツールの使い方を紹介しました。今回はコンパイラーを活用して、自分でeBPF用コードを書くための基礎を学んでみましょう。 BCCのインストールとドキュメント 第688回も紹介したように、カーネル3.15で追加されその後拡充を続けている「eBPF」は任意の外部プログラムをカーネルの中で、より安全に実行できる仕組みです。カーネルモジュールを作る代わりに、独自のバイトコードをコンパイラーで生成し、それをカーネル内部にロード・実行することになります。これを使えばシステムコールの先のカーネルの状態を、プログラマブルに解析可能になります。 eBPF自体はカーネルの仕組みであり、ユーザーランドから使うためには、eBPF用のバイトコードにコンパイルする必要が

    第690回 BCCでeBPFのコードを書いてみる | gihyo.jp
  • eBPF - BCCチュートリアル 編

    上記以外にもPythonC++の基的なビルド&実行環境がで未インストールであれば、build-essential, cmake等のパッケージが必要になるかもしれません。 4. サンプルプログラム サンプルのソースコードはGitHubにビルド&実行出来るように置いています。 eBPF自体のソースコードはC言語で書く必要がありますが、フロントエンドのソースコードはPyhon, C++, そしてluaを利用可能です。記事ではPythonC++を紹介します。なお、C++よりも情報量やコードの簡潔さの観点において(実行速度が問題にならない限り)、Pythonがおすすめです。 注意 BCC(libbcc)のAPIは、バージョンによって少しずつ変化しており、基的に互換性がなさそうな変化を入れている様子です。 基的な処理フロー eBPFのソースコードを書く BPFクラスのインスタンスに対して、

    eBPF - BCCチュートリアル 編
  • パケット処理の独自実装や高速化手法の比較と実践 独自パケット処理の実装方法の解説(XDP)

  • eBPFに3日で入門した話 - CADDi Tech Blog

    はじめに eBPF とはなにか ざっくり概要 「Packet Filter」なのに「Virtual Machine」? eBPFでなにができるか? カーネルイベントのフック ユーザーランドアプリケーションとのやりとり eBPFの主な用途 eBPFが注目される背景 eBPFの仕組み アーキテクチャと処理フロー カーネルモジュールとeBPFの違い eBPFプログラムの作り方 eBPFプログラムを作ってみる 環境の準備 Hello world もう少し複雑なサンプル その他のサンプル HTTPリクエストのダンプ TCP接続先の調査 tcplife dirtop filetop oomkill まとめ eBPFはなにに使えるか 参考サイト はじめに こんにちは、Platformチームの小森です。 eBPF (extended Berkley Packet Filter) について、2022年8月2

    eBPFに3日で入門した話 - CADDi Tech Blog
  • 「おいしくてつよくなる」eBPFのはじめかた/Learn eBPF

    Concentrated Isolation for Container Networks Toward Application-aware Sandbox Tailoring / UCC-21

    「おいしくてつよくなる」eBPFのはじめかた/Learn eBPF
    ttsurumi
    ttsurumi 2020/07/02
  • 1