如何释放bpftool创建的BPF map?及内核留存原因问询
关于bpftool创建的BPF Map释放问题的解答
1. 如何释放bpftool创建的BPF map?
- 使用
bpftool map delete命令直接删除,支持通过map的ID或名称指定目标:- 通过ID删除:
bpftool map delete id 123 - 通过名称删除:
bpftool map delete name my_test_map
(如果你的bpftool没有该命令,说明版本过旧,建议升级到Linux内核5.10及以上对应的bpftool版本)
- 通过ID删除:
- 若创建map时用
pin选项将其挂载到/sys/fs/bpf/文件系统,直接删除对应pin文件即可:rm /sys/fs/bpf/my_map - 极端方案(不推荐):编写简单C程序通过bpf系统调用打开该map的文件描述符后关闭,但这种方法繁琐,优先推荐升级bpftool。
2. 为何bpftool命令执行完成后map仍留存于内核中?
这是bpftool的设计逻辑。普通用户态程序创建BPF map后,进程退出时会关闭map的文件描述符,内核会自动回收无任何引用的map。但bpftool作为工具,创建map的核心目的是让它能被其他程序复用,因此在创建后会主动让map脱离当前进程的文件描述符关联(比如通过pin操作或设置持久化属性),即使bpftool进程退出,内核也不会回收该map,直到被显式删除或所有引用它的程序都退出。
内容的提问来源于stack exchange,提问作者Leo Lang
相关产品推荐
相关产品推荐

