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

eBPF sockops + redirection: Why we don't need DELETE elements from the sockmap?

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

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

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

所以我很好奇,为什么这些文章和代码中不需要删除关闭连接的sockmap条目?

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

谢谢 :-)

经过一些测试,我意识到不需要手动删除sockmap中的条目table。

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

显然关闭的 TCP 连接会自动从 sockmap 中删除 table。