eBPF - bpf_object__pin_maps 会固定内部映射(对于 BPF_MAP_TYPE_HASH_OF_MAPS)吗?
eBPF - Will bpf_object__pin_maps pin internal maps ( for BPF_MAP_TYPE_HASH_OF_MAPS)?
我很困惑 bpf_object__pin_maps(bpf_obj, pin_dir) 是否会固定地图类型 [=19] 的内部地图=].由于此函数将 bpf_obj 作为参数,因此我们在此之前不会创建内部映射。如果它不固定内部地图,那我们怎么办?
如果您的内部映射与您的程序和外部映射在同一个目标文件中定义,我希望 libbpf 能够同时创建和固定它们。
相反,如果它们尚未创建(因为您稍后在工作流程中创建它们,例如使用 bpftool 或从另一个目标文件),那么您仍然可以稍后固定它们。
使用 libbpf,您可以通过检索映射的句柄来做到这一点,例如从带有 bpf_object__find_map_by_name()
的 struct bpf_object
或类似函数中检索:
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,如果您加载了地图但尚未固定(由用户 space 应用程序中的文件描述符或 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__pin_maps(bpf_obj, pin_dir) 是否会固定地图类型 [=19] 的内部地图=].由于此函数将 bpf_obj 作为参数,因此我们在此之前不会创建内部映射。如果它不固定内部地图,那我们怎么办?
如果您的内部映射与您的程序和外部映射在同一个目标文件中定义,我希望 libbpf 能够同时创建和固定它们。
相反,如果它们尚未创建(因为您稍后在工作流程中创建它们,例如使用 bpftool 或从另一个目标文件),那么您仍然可以稍后固定它们。
使用 libbpf,您可以通过检索映射的句柄来做到这一点,例如从带有 bpf_object__find_map_by_name()
的 struct bpf_object
或类似函数中检索:
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,如果您加载了地图但尚未固定(由用户 space 应用程序中的文件描述符或 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>