eBPF常用map类型和操作

map种类

map类型

特点

Hash Map

BPF_MAP_TYPE_HASH

hash map。

支持value并发更新。

BPF_MAP_TYPE_PERCPU_HASH

per core的hash map。

BPF_MAP_TYPE_LRU_HASH

map塞满之后,继续插入,自动删除最近最少使用的 entry。

不支持value并发更新。

Array Map

BPF_MAP_TYPE_ARRAY

数组,key是整数。

BPF_MAP_TYPE_PERCPU_ARRAY

per core的数组。

Trace Map

BPF_MAP_TYPE_PERF_EVENT_ARRAY

实时保存事件,不需要指定最大条目数。

BPF_MAP_TYPE_RINGBUF

相比于BPF_MAP_TYPE_PERF_EVENT_ARRAY,实时顺序保存事件,需要指定最大条目数。

map一般都要指定最大条目数,除了BPF_MAP_TYPE_PERF_EVENT_ARRAY。

网口卸载和加载clsact后,map会被清空。

函数

返回值

作用

void * bpf_map_lookup_elem(void *map, const void *key)

value指针,

NULL表示不存在key,非NULL表示存在key。

根据key查询value。

long bpf_map_update_elem(void *map, const void *key, const void *value, __u64 flags)

flags可以用BPF_ANY,忽略insert还是update。

执行结果

0表示成功,

负数表示失败。

插入key+value或者根据key更新value。

推荐更新时直接用指针value来操作,避免lru_map可能出现的其他key丢失异常问题。

long bpf_map_delete_elem(void *map, const void *key)

执行结果

0表示成功,

负数表示失败。

删除key+value。

posted on 2024-05-19 16:58  王景迁  阅读(80)  评论(0编辑  收藏  举报

导航