如何找到BPF映射中的元素数量?我在密件抄送参考指南中找不到任何有用的信息。
1 回答
1
低级
一旦您的地图上有一个文件描述符(例如从固定路径或地图 ID 中检索),您就可以bpf()
使用其BPF_OBJ_GET_INFO_BY_FD
子命令调用系统调用。attr
这将使用指向 a 的指针填充参数,该指针在用户 API 头文件中struct bpf_map_info
定义。特别是,将设置为映射的最大条目数。来自 libbpf 的包装器可以帮助处理系统调用细节。attr->max_entries
bpf_obj_get_info_by_fd()
数组映射具有固定数量的条目,但某些类型(例如哈希映射)具有最大数量,以及当前时间设置的实际条目数量。在这种情况下,当前的条目数没有可用的计数器,解决方案包括遍历所有条目以计算它们。
在密件抄送中
对于 BCC,使用 Python 包装器,我认为(但尚未测试)您可以访问地图的最大条目数foo
(foo.max_entries
属性在基类的定义中定义TableBase
)。我也相信您可以使用运算符len
来获取某些地图类型的当前元素数量,例如哈希表:len(foo)
。但同样,我没有尝试过。
于 2021-07-21T09:09:54.217 回答