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。
我正在学习基于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。