【问题标题】:eBPF - Will bpf_object__pin_maps pin internal maps ( for BPF_MAP_TYPE_HASH_OF_MAPS)?eBPF - bpf_object__pin_maps 是否会固定内部映射(用于 BPF_MAP_TYPE_HASH_OF_MAPS)?
【发布时间】:2021-09-15 09:47:37
【问题描述】:

我对 bpf_object__pin_maps(bpf_obj, pin_dir) 是否会固定地图类型 BPF_MAP_TYPE_HASH_OF_MAPS 的内部地图感到困惑。由于此函数将 bpf_obj 作为参数,因此在此之前我们不会创建内部映射。如果它不固定内部地图,那我们该怎么做呢?

【问题讨论】:

    标签: linux linux-kernel bpf ebpf


    【解决方案1】:

    如果您的内部地图与您的程序和外部地图​​在同一个目标文件中定义,我希望 libbpf 能够同时创建和固定它们。

    相反,如果它们尚未创建(因为您稍后会在工作流程中创建它们,例如使用 bpftool 或从另一个目标文件创建),那么您仍然可以稍后固定它们。

    使用 libbpf,您可以通过检索地图的句柄来做到这一点,例如从 struct bpf_objectbpf_object__find_map_by_name() 或类似函数:

    LIBBPF_API struct bpf_map *
    bpf_object__find_map_by_name(const struct bpf_object *obj, const char *name);
    

    然后您可以使用bpf_map__pin() 轻松固定它:

    LIBBPF_API int bpf_map__pin(struct bpf_map *map, const char *path);
    

    使用 bpftool,如果您加载了地图但尚未固定(由用户空间应用程序中的文件描述符或 eBPF 程序引用),您可以使用以下命令固定它:

    # bpftool map pin <map> <pinned path>
    

    请注意,使用 bpftool 创建地图会自动将其固定,并且需要您提供路径:

    # bpftool map create <pinned path> type <type> key <key size> value <value size> \
             entries <max entries> name <name>
    

    【讨论】:

    • 我可以在 bpf_object__find_map_by_name() 中提供包含外部地图的 bpf_object 吗?还是我需要找一些其他不需要bpf_object的类似函数?
    • 我认为应该是 bpf_object 包含您的内部地图的定义。它可以与您的外部地图相同,但在这种情况下,我希望 libbpf 能够同时创建所有地图(但请注意,我有一段时间没有检查过,我可能会出错) .
    猜你喜欢
    • 2011-02-25
    • 2021-09-24
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多