1

如何找到BPF映射中的元素数量?我在密件抄送参考指南中找不到任何有用的信息。

4

1 回答 1

1

低级

一旦您的地图上有一个文件描述符(例如从固定路径或地图 ID 中检索),您就可以bpf()使用其BPF_OBJ_GET_INFO_BY_FD子命令调用系统调用。attr这将使用指向 a 的指针填充参数,该指针在用户 API 头文件中struct bpf_map_info定义。特别是,将设置为映射的最大条目数。来自 libbpf 的包装器可以帮助处理系统调用细节。attr->max_entriesbpf_obj_get_info_by_fd()

数组映射具有固定数量的条目,但某些类型(例如哈希映射)具有最大数量,以及当前时间设置的实际条目数量。在这种情况下,当前的条目数没有可用的计数器,解决方案包括遍历所有条目以计算它们。

在密件抄送中

对于 BCC,使用 Python 包装器,我认为(但尚未测试)您可以访问地图的最大条目数foofoo.max_entries属性在基类的定义中定义TableBase)。我也相信您可以使用运算符len来获取某些地图类型的当前元素数量,例如哈希表len(foo)。但同样,我没有尝试过。

于 2021-07-21T09:09:54.217 回答