地图结构的BPF哈希的功能

问题描述 投票:1回答:1

我正在编写一个BPF工具来维护每个进程的跟踪,这意味着我将需要某种2D数据结构。为了绕过512字节的限制,我决定最好使用受支持的结构(映射)。看了一下iovisor docs之后,似乎BPF_HASH_OF_MAPS是我需要的结构。我以为这种结构提供了键-值配对,其中“值”是另一个BPF映射。但是,基于所需的参数,“外部”结构似乎是一个数组(就github文档而言,我个人看不出BPF_HASH_OF_MAPSBPF_ARRAY_OF_MAPS之间的区别)。我是否被误导了:BPF_HASH_OF_MAPS结构是否提供类似哈希图的功能?

hashmap trace bpf bcc ebpf
1个回答
2
投票

您是正确的。 bcc在BPF_HASH_OF_MAPSBPF_ARRAY_OF_MAPS之间没有任何区别,至少在它们的显示方式方面。在内核中,它们实际上是两个不同的数据结构,并且地图的BPF哈希可以具有各种大小的键。

[bcc defines硬编码的int作为int映射的键类型(下面的第一个BPF_HASH_OF_MAPS):

#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

© www.soinside.com 2019 - 2024. All rights reserved.