【问题标题】: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_MAPSBPF_ARRAY_OF_MAPS 之间的区别)。我是否被误导了:BPF_HASH_OF_MAPS 结构是否提供类似 hashmap 的功能?

【问题讨论】:

    标签: hashmap trace bpf ebpf bcc-bpf


    【解决方案1】:

    你是对的。 密件抄送在BPF_HASH_OF_MAPSBPF_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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多