信创操作系统层面tcp短时高并发短连接应当如何调优?

我这当前使用的统信1050e 已经抛弃了tcp_tw_recycle 参数,当前在大量并发短连接环境下,操作系统层面应该怎么优化,会有什么副作用,望有经验的大佬解惑,谢谢!显示全部

我这当前使用的统信1050e 已经抛弃了tcp_tw_recycle 参数,当前在大量并发短连接环境下,操作系统层面应该怎么优化,会有什么副作用,望有经验的大佬解惑,谢谢!

收起
参与6

查看其它 1 个回答三虎的回答

三虎三虎联盟成员系统运维工程师中国邮政储蓄银行

1、调整网卡的ringBuffer大小。接收数据包后,首先会通过DMA引擎将数据送到RingBuffer中。使用ethtool -g <网卡名>可查看RingBuffer的大小。RingBuffer是收发中转站,如果瞬间接收的请求数超过了软中断(ksoftirqd)处理能力,那在RingBuffer填满后,再来的包会被网卡直接丢弃。丢包的统计查询:ethtool -S <网卡名>
2、多队列网卡RSS调优。网卡的每个队列对应一个中断进程,即一个CPU来处理中断,如果队列数越多,也就会有更多的CPU参与到数据包的接收上来。详细信息可查看/proc/interrupts。中断号和CPU的对应关系通过smp_affinity网卡亲和性来控制的,一般通过irqbalance服务来自动管理,即中断进程尽量都使用不同的CPU来poll包。所以通过查看当前配置和支持的最大队列数(ethtool -l <网卡>),来调大网卡队列数(ethtool -L <网卡>),将提高数据接收的性能。
*注意:
这里针对信创环境下的调优需要特别说明!部分国产品牌的CPU,在跨路访问方面,会有高延迟问题,之前在别的回答中也提到,使用NUMA绑定来减少跨路访问。
但在一些批处理高IO的场景下,并不能完全解决问题,网卡队列池满、主机卡顿也会偶尔出现,针对此,关闭irqbalance服务,调整中断进程的亲和性(/proc/irq/<中断号>/smp_affinity),将网卡中断号都固定到一个物理CPU的不同core上,将能避免跨物理CPU的网卡中断。 如主机有2颗CPU,CPU 0对应的core id为0-31,如果主机有64个中断进程,可以对0-31顺序挑选,并写入到/proc/irq/<中断号>/smp_affinity文件中,减少网卡中断的跨路。*
4、合并参数的优化。检查网卡的硬中断合并是否打开(ethtool -c <网卡>),看Adaptive是否为on;接收处理合并是否打开(ethtool -k), 确认receive-offload是否为on;
5、优化软中断一次处理的包数量。内核参数net.cor.netdev_budget来控制,增加这个值,让CPU每次多处理一些网络包接收工作,再让出CPU,以提高效率。
6、使用mmap或sendfile等系统调用来减少用户态和内核态之间的内存拷贝。
7、TCP三次握手优化,在内核参数上,加速端口回收,开启端口重用等,但需要注意在NAT下参数配置防止冲突,可能会因为包的时间戳问题,导致后发送的包先到,进而造成先发的包因为晚到而被丢弃。
8、大招,ebpf可以绕开协议栈的本地网络IO,其实数据包送到网卡,直到送给应用程序这中间的环节好开销还是很多的。那么如果能利用ebpf的sockmap等,将大大提高效率。
9、观测系统资源瓶颈,简单说就是见招拆招,看出现什么问题做对应的性能优化,如半连接队列长度为256,但当前TCP连接中SYN_RECV状态的连接数已经到了256,则说明半连接队列已经溢出了,需要扩大半连接队列长度,那么需要一并考虑backlog、somaxconn和tcp_max_syn_backlog参数。

银行 · 2024-03-30
浏览154

回答者

三虎
系统运维工程师中国邮政储蓄银行
擅长领域: 服务器信创Linux

三虎 最近回答过的问题

回答状态

  • 发布时间:2024-03-30
  • 关注会员:3 人
  • 回答浏览:154
  • X社区推广