You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux UDP Socket发送性能调优:除wmem_max外的可配置参数咨询

优化UDP发送性能的/proc/sys/net/core参数推荐

针对你开发的C语言UDP发送程序,除了wmem_max,以下几个/proc/sys/net/core下的参数可以针对性优化,帮你拿到额外的吞吐量增益:

  • wmem_default
    这是系统默认的Socket写缓冲区大小,如果你的程序没有通过setsockopt(SO_SNDBUF)手动设置缓冲区,内核会用这个值初始化每个UDP Socket的发送缓冲区。既然已经调大了wmem_max,建议同步提升wmem_default(比如设为和wmem_max同级别或适配你的单包大小),避免每次创建Socket都要手动修改缓冲区,减少不必要的系统调用开销。

  • netdev_max_backlog
    当网卡暂时无法处理发送请求时,待发送的数据包会存在这个内核队列里。如果你的发送速率远超网卡处理能力,默认的队列长度(通常1000)会很快被占满,导致数据包丢包。调大这个值(比如设为4096或更高),能降低高负载下的发送丢包率,提升整体吞吐量。

  • max_skb_frags
    如果你的程序发送大尺寸UDP包(需要分片传输),这个参数控制每个内核缓冲区(skb)能拆分的最大片段数。调大它(比如从默认16改为32/64)可以减少内存拷贝的次数,提升大UDP包的发送效率,不过要注意不要超过系统内存的承载能力。

  • dev_weight_tx_bias
    这个参数用于调整内核调度时对发送任务的权重偏向。如果你的系统主要负载是UDP发送,把它从默认0调大(比如设为5),能让内核分配更多CPU资源给发送路径,减少发送延迟,提升高负载下的吞吐量稳定性。

  • default_qdisc
    默认的网络队列调度器会直接影响数据包的排队效率。如果当前用的是pfifo_fast这类简单调度器,建议换成fq或fq_codel这类针对高吞吐优化的调度器,能更好地避免队列拥塞,降低数据包的排队延迟,提升发送速率。修改命令:sysctl -w net.core.default_qdisc=fq

  • somaxconn
    虽然它主要针对TCP监听队列,但如果你的UDP程序使用了connect模式、或者需要创建大量并发发送Socket,调大这个值(从默认128改为1024)可以避免内核因资源限制拒绝创建Socket,保障高并发场景下的发送能力。

注意:所有参数调整都需要结合你的硬件配置、网络环境做测试验证,没有通用的“最优值”,建议用iperf或自研测试工具对比调整前后的吞吐量变化,找到最适合你的配置。

内容的提问来源于stack exchange,提问作者Simao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:35:08