单队列网卡中断散列
原理
RPS全称是Receive Packet Steering,从Linux内核版本2.6.35开始引入。RPS采用软件模拟的方式,实现了多队列网卡所提供的功能,分散了在多CPU系统上数据接收时的负载,把软中断分到各个CPU处理,而不需要硬件支持,大大提高了网络性能。
对单队列网卡可以使用RPS将中断分散到各个core处理,避免软中断集中到一个core导致该core软中断过高形成性能瓶颈。
修改方式
通过直接修改网卡队列参数设置RPS,能够立即生效,无需重启服务器。
修改前:
/sys/class/net/eth0/queues/rx-0/rps_cpus 0 /sys/class/net/eth0/queues/rx-0/rps_flow_cnt 0 /proc/sys/net/core/rps_sock_flow_entries 0
修改方法:
#echo ff > /sys/class/net/eth0/queues/rx-0/rps_cpus # echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt # echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
这里以单个网卡为例说明,ff对应的是core 0-7,意思是将软中断散列到0-7个core上。如果是多个网卡,对应的ff需要修改。将并发活动连接的最大预期数目设置为32768,是因为这个是Linux官方内核推荐值。
父主题: 优化方法