eBPF sockops + redirection:为什么我们不需要从 sockmap 中删除元素?



我正在学习基于eBPF sockmap/重定向的环回TCP加速技术。

我发现,在所有相关的文章和示例中,我们似乎只需要通过bpf_sock_hash_update方法向sockmap表添加条目,然后查找该表并通过bpf_msg_redirect_hash方法重定向。例如:这里,这里,这里。

我没有找到任何代码来从sockmap表中删除条目(例如:调用bpf_map_delete_elem等(。同时,我在内核中也没有发现任何自动删除关闭的tcp连接项的代码,例如:here。

所以我很好奇,为什么在这些文章和代码中没有必要删除封闭连接的sockmap条目?

我们是否需要在ebpf代码中检测TCP FIN事件,然后显式删除sockmap中的相应条目?

谢谢:-(

经过一些测试,我意识到没有必要手动删除sockmap表中的条目。

通过使用bpftool map dump id <sockmap_id> | grep "key:" | wc -l命令观察sockmap表中的条目,可以看到表大小始终等于环回设备上并发TCP连接数的两倍。

很明显,关闭的TCP连接会自动从sockmap表中删除。

相关内容

最新更新