【问题标题】:Functionality of the BPF hash of maps structure映射结构的 BPF 哈希的功能
【发布时间】:2020-07-27 13:25:13
【问题描述】:
我正在编写一个维护每个进程跟踪的 BPF 工具,这意味着我需要某种二维数据结构。为了绕过 512 字节的限制,我决定使用支持的结构(映射)是我最好的选择。在看了iovisor docs 之后,似乎BPF_HASH_OF_MAPS 是我需要的结构。我假设这个结构提供了一个键值对,其中“值”是另一个 BPF 映射。但是,根据它所采用的参数,“外部”结构似乎是一个数组(个人而言,从 github 文档中,我无法区分 BPF_HASH_OF_MAPS 和 BPF_ARRAY_OF_MAPS 之间的区别)。我是否被误导了:BPF_HASH_OF_MAPS 结构是否提供类似 hashmap 的功能?
【问题讨论】:
标签:
hashmap
trace
bpf
ebpf
bcc-bpf
【解决方案1】:
你是对的。 密件抄送在BPF_HASH_OF_MAPS 和BPF_ARRAY_OF_MAPS 之间没有区别,至少在暴露方式方面。在内核中,它们实际上是两种不同的数据结构,映射的 BPF 哈希可以有各种大小的键。
bcc defines 硬编码 int 作为 BPF_HASH_OF_MAPS 映射的键类型(下面的第一个 int):
#define BPF_HASH_OF_MAPS(_name, _inner_map_name, _max_entries) \
BPF_TABLE("hash_of_maps$" _inner_map_name, int, int, _name, _max_entries)
要使用不同的密钥类型,您只需使用BPF_TABLE 代替BPF_HASH_OF_MAPS。