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。 |