1

BPFマップ内の要素の数をどのように見つけますか? bcc リファレンス ガイドに有用な情報が見つかりません。

4

1 に答える 1

1

低レベル

マップ上にファイル記述子を取得したら (たとえば、ピン留めされたパスまたはマップ ID から取得)、bpf()そのサブコマンドを使用してシステム コールを呼び出すことができますBPF_OBJ_GET_INFO_BY_FD。これにより、ユーザー API ヘッダー ファイルで定義されattrている へのポインターが引数に入力されます。特に、マップのエントリの最大数に設定されます。libbpfなどのラッパーは、syscall の詳細に役立ちます。struct bpf_map_infoattr->max_entriesbpf_obj_get_info_by_fd()

配列マップには固定数のエントリがありますが、ハッシュ マップなどの一部のタイプには最大数と、現時点で設定されている実際のエントリ数があります。このような場合、現在のエントリ数に使用できるカウンターはありません。解決策は、すべてのエントリを反復してカウントすることです。

BCCで

fooBCC の場合、Python ラッパーを使用すると、マップのエントリの最大数にアクセスできると思います (ただし、テストはしていません) foo.max_entries(属性は基本クラスの定義TableBaseで定義されています)。また、演算子を使用して、ハッシュ テーブル:lenなど、一部のマップ タイプの現在の要素数を取得できると思います。しかし、繰り返しますが、私は試していません。len(foo)

于 2021-07-21T09:09:54.217 に答える