BPFマップ内の要素の数をどのように見つけますか? bcc リファレンス ガイドに有用な情報が見つかりません。
1 に答える
低レベル
マップ上にファイル記述子を取得したら (たとえば、ピン留めされたパスまたはマップ ID から取得)、bpf()
そのサブコマンドを使用してシステム コールを呼び出すことができますBPF_OBJ_GET_INFO_BY_FD
。これにより、ユーザー API ヘッダー ファイルで定義されattr
ている へのポインターが引数に入力されます。特に、マップのエントリの最大数に設定されます。libbpfなどのラッパーは、syscall の詳細に役立ちます。struct bpf_map_info
attr->max_entries
bpf_obj_get_info_by_fd()
配列マップには固定数のエントリがありますが、ハッシュ マップなどの一部のタイプには最大数と、現時点で設定されている実際のエントリ数があります。このような場合、現在のエントリ数に使用できるカウンターはありません。解決策は、すべてのエントリを反復してカウントすることです。
BCCで
foo
BCC の場合、Python ラッパーを使用すると、マップのエントリの最大数にアクセスできると思います (ただし、テストはしていません) foo.max_entries
(属性は基本クラスの定義TableBase
で定義されています)。また、演算子を使用して、ハッシュ テーブル:len
など、一部のマップ タイプの現在の要素数を取得できると思います。しかし、繰り返しますが、私は試していません。len(foo)