我在尝试使用 eBPF 的 BPF_PROG_TYPE_SK_SKB 与 BPF_MAP_TYPE_SOCKHASH 实现 socket 的铰接转发,目标是基于 bpf_sk_redirect_hash 将一个 socket 的 ingress 队列数据转发到另一个 socket 的 egress 队列,但是在实际的吞吐量测试时出现了系统 OOM 。
具体的环境如下:
我的疑问:
bpf_sk_redirect_hash 没有背压(流量控制),导致数据堆积造成 OOM ?希望各位前辈大佬指教!
1
swananan 7 小时 20 分钟前
我不太熟悉这个,插个眼,等大哥回复。
我本来是想 ebpf redirect 是 unix domain socket 场景的优化方案,我看到你出现了 oom 有点震惊,不是有 sk send_buf 之类可以背压保护吗。问了 ai ,说 ebpf redirect 这个实现,直接绕开了这个限制。。。 我又问了 ai ,说 绕开的原因是什么,ai 说,是因为 ebpf redirect 运行在软中断里面,没有进程上下文可以阻塞,我觉得这个很合理,说服了我。 那既然这样,就不适合用 ebpf redirect 方案,去解决这种生产者消费者速率不匹配的场景问题了。 ai 推荐了 splice 和 io-uring 。 以上是我边搬砖(围观 cc )边水贴问的,耗时不过十几分钟,按我以前的经验,要探索到这个阶段,得花一个晚上。。。 |
2
SunBK201 OP @swananan 感谢回复。其实我之前就是用 splice 做的,用 eBPF 就是想看看能不能再把转发性能提升一些,目前测试看来对于发送时延和 CPU 负载都能有 20% 到 30% 的优化提升,不过目前看来可能只适用于网络接口带宽收发对等的场景。
|
3
openstackceph 1 小时 53 分钟前
可以分析一下 kmalloc-2048 分配使用情况
|
4
macscsbf 24 分钟前
没看懂需求是什么还有怎么测试,我可以那我机子测试下。
|