XDP の検索結果:

BPF_PROG_TEST_RUNでXDPプログラムの挙動をテストする

…。これを活用すると、XDPやtc-bpf(8)向けに実装したパケット処理プログラムの挙動をテストすることができる。 BPF_PROG_TEST_RUN? BPF_PROG_TEST_RUNはbpf syscall経由で使用できる1機能。テストしたいeBPFプログラムとパケットのバイト列を入力として与えると、実行結果の返り値と処理後のパケットバイト列、および処理にかかった時間が出力として得られる。このとき、テスト対象のプログラムは実際にネットワークインタフェースにアタッチされる…

Generic XDPを使えばXDP動作環境がお手軽に構築できるようになった

XDP (eXpress Data Path) ネタ。 パフォーマンス上の理由から、XDPのパケット処理はskbが割り当てられる前にNICドライバから直接呼び出させる。そのため、XDPプログラムの動作にはNICドライバ側でのサポートが必要となる。 5月時点での対応ドライバリストは下記エントリ末尾に記載した。Linux kernel 4.12からixgbeでXDPがサポートされる予定とは言え、ハードウェアの準備も必要であり、従来XDPの動作を気軽に試すことは少し難しかった。 y…

Facebookはレイヤ4ロードバランサをIPVS(LVS)からXDPベースのものに乗り換えつつある

… を使用していたが、XDPベースで自ら開発したものに移行しつつある、という内容。 XDP Production Usage: DDoS Protection and L4LB (slide) www.youtube.com XDP (eXpress Data Path) については以前のエントリで簡単に紹介した。 yunazuno.hatenablog.com XDPを改めて簡単に紹介すると、Linuxカーネルのネットワークスタックの最下部 (NICに一番近い場所) でパケッ…

eBPF tail call 使い方メモ

…ケットをドロップするXDPプログラムを考える*2。 XDP program カーネル空間側で実行されるXDPのコードは下記の通り。通常時はprog_entryを実行するが、パケットをドロップさせたい時はprog_dropにジャンプさせる。jmp_tableがprogram arrayである。 なお、events.perf_submit() はログをカーネル空間からユーザ空間に送るのに使用する。これもbccのsyntax sugarで、bpf_perf_event_output…

Virtio-netでXDPを動かすにはqemuのオプション変更が必要

…irtio_netがXDPをサポートするようになった。だが、動作させるには少しオプション変更が必要となる。 Qemuの起動オプションに下記を渡すことでここに記載のあるオフロード機能が無効になり、XDPが動作するようになる: gso=off,guest_tso4=off,guest_tso6=off,guest_ecn=off,guest_ufo=off virshであれば、該当NICのinterfaceセクションの下に下記設定を入れてあげれば良さそう: $ virsh edi…

Persistent eBPF map object with bcc

…ータ構造があることはXDPの紹介エントリのサンプルコード内で軽く触れた. 通常,mapはそれを作成したプロセスからのみ読み書き可能である.しかし,いくつかのユースケースにおいては,mapを複数のプロセスから読み書きできると都合が良いことがある.たとえば何からの統計情報(例えばパケットカウンタ)をmapに保存してそれを外部に転送したい場合,「統計情報をmapに保存するプロセス」と「収集された統計情報を加工して外部に転送するプロセス」とに分割したほうが,実装の見通しの観点から望ま…

Linuxカーネルの新機能 XDP (eXpress Data Path) を触ってみる

…参加してみたところ,XDP(eXpress Data Path)の話題で持ち切りといった感じだった. というわけで,XDPについて一通り調べつつ,実際に触ってみた. XDPとは何か? 誤解を恐れずに一言で言うと,「Intel DPDKのような高速パケット処理基盤をLinuxカーネル自身が用意したもの」であると理解している.このスライドでは A programmable, high performance, specialized application, packet pro…