我有一个 UDP 繁重的工作流程,由于deactivate_slab.isra.82
调用__alloc_skb
(15% 以上的 CPU 时间)而出现瓶颈。 alloc 方法似乎在 Intel 卡驱动程序内部最频繁地调用(我假设是针对 RX 路径),但也由我的发送系统调用调用。
由于这个瓶颈,我只能在 10G 服务器上推送大约 1.1Gbps,我想知道是否可以调整任何内核参数来减少这种开销,也许可以扩大 SKB 的空闲列表的大小,以便内核- malloc 路径不那么频繁地被命中。
我已经注意到slub_debug
Debian 上默认启用了该功能,这进一步减慢了我的应用程序速度(从 850Mbps 降至 1.1Gbps)。
答案1
这是我对 slub_debug 选项的误解,关闭它的正确方法是“slub_debug=-”,“slub_debug=off”禁用了slab调试检查,但不是所有调试代码。
正确禁用调试模式后,我发现 UDP 繁重工作负载的性能显着提升,并且不再有明显的单个内核函数导致瓶颈。