开启网卡多队列功能

滴滴云技术支持发表于:2019年03月20日 15:33:09更新于:2019年03月20日 17:19:04

单个CPU处理网络中断存在瓶颈,您可以将DC2实例中的网络中断分散给不同的CPU处理。经测试,在网络PPS和网络带宽的测试中,与1个队列相比,2个队列最多可提升性能达50%到1倍,4个队列的性能提升更大。

支持多队列的镜像

目前,提供的系统镜像中,以下镜像支持多队列: 

说明 镜像是否支持多队列与操作系统的位数无关。

系统镜像是否支持多队列是否默认开启多队列
CentOS 6.8/6.9/7.0/7.1/7.2/7.3/7.4/7.5
Ubuntu 14.04/16.04/18.04

在DC2实例上配置网卡多队列

本节先介绍如何手动配置网卡多队列,centos 7.3镜像为例,主网卡interface名称为eth0。

1、运行命令 ethtool -l eth0 查看主网卡支持多队列的情况。

root@localhost:~# ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
RX:		0
TX:		0
Other:		0
Combined:	8   # 表示最多支持设置8个队列
Current hardware settings:
RX:		0
TX:		0
Other:		0
Combined:	1    #表示当前生效的是1个队列

说明 如果两个 Combined 数值相同,则表示已开启支持多队列。


2、运行命令 ethtool -L eth0 combined 8 开启网卡的多队列功能。

[root@localhost ~]# ethtool -L eth0 combined 8 # 设置eth0当前使用8个队列


在DC2上配置默认开启网卡多队列

开机启动时开启网卡多队列,需要在rc.local里写入开机启动脚本, 这样可以使网卡启动网卡多队列。

1、添加脚本 /usr/bin/ddmultiqueue

#!/bin/bash
nicnames=$(ip link | grep -v 'lo: ' | grep '^[0-9]' | awk -F':' '{print $2}')
for nic in $nicnames; do
    queue=$(ethtool -l $nic | grep Combined: | awk '{print $2}' | head -1)
    if [ x"$queue" = x ]; then
         continue
    fi
    if [ $queue -gt 1 ];then
        ethtool -L $nic combined $queue
    fi
done


2、编辑/etc/rc.local ,在文件加入 /bin/sh /usr/bin/ddmultiqueue

 /bin/sh /usr/bin/ddmultiqueue


3、如果是centos7系统操作系统,需要给/etc/rc.d/rc.local 添加可执行权限

chmod a+x /etc/rc.d/rc.local