查看虚拟网卡多队列

概述

网卡多队列是一种技术,最初是用来解决网络IO QoS(Quality Of Service)问题的,后来随着网络IO的带宽的不断提升,单核CPU不能完全满足网卡的需求,通过多队列网卡驱动的支持,将各个队列通过中断绑定到不同的核上,以满足网卡的需求。

在下面这些场景时,网卡多队列提升了系统的性能:

  1. 传输的数据包变大。
  2. 客户机中同时存在多个网络连接。
  3. 客户机有多个vCPU,队列最大数与vCPU数量一致。

然而,网卡多队列受到一系列的限制且带来一些负面效果:

  1.  受限于MSI vector:message signal interrupt的数量。
  2. 有时会造成对外流量传输性能下降。
  3. 增加CPU负载。
  4. 多网卡情况下,多队列特性重要性降低。

使用须知

  1. 目前支持网卡多队列的系统为Linux操作系统Kernel内核版本3.1.3以上。移动云提供的默认系统镜像中,使用如下系统镜像可支持开启网卡多队列功能:
    Centos、Red Hat Enterprise Linux、Ubuntu、BC-Linux。
  2. 以下操作系统云主机不支持虚拟网卡多队列功能:
    Windows、CentOS 6.4、SUSE 11SP3、SUSE 11SP4、FreeBSD 12.1。
  3. 如要开启系统的网卡多队列功能,其最大队列数与云主机所在的宿主机的CPU个数有关。当用户虚拟机的vCPU数目小于宿主机的CPU数时,虚拟机网卡最大队列数等于vCPU个数;当用户虚拟机的vCPU数目大于宿主机的CPU数时,虚拟机网卡最大队列数等于宿主机的CPU。用户登录云主机之后也可以查看支持的网卡最大队列数。
  4. 历史创建的云主机不支持网卡多队列功能,从2018-11-29日起创建的云主机默认开启虚拟网卡多队列功能,用户可参考操作手册进行配置。
  5. 为保持云主机性能,第五代及以上云主机(c5、s5、m5、c5e、s5k、c5k、s5h、s6、c6等)为支持网卡多队列功能为默认开启状态(即使自定义镜像设置该参数为关闭),且不支持用户手动修改。

如何在Linux系统中配置网卡多队列?

  1. 为了在实例中启用网卡多队列功能,需要做以下操作:

    a. 选择一个支持网卡多队列的操作系统,如:CentOS和Ubuntu。

    b. 创建一个多vCPU的flavor。

    c. 启动实例后,利用ethtool设定队列数目,如下图。

    虚拟机的vCPU个数为4,虚拟机启动后,可以看出网卡最大队列数为4,而当前设置的网卡队列数为1。

    image.png
    d. 使用ethtool命令设置当前网卡队列数为4,ethtool -L eth0 combined 4,并使用ethtool-l eth0查看设置结果。
    image.png
  2. 建议开启irqbalance服务,让系统自动调整网络中断在多个CPU核上的分配。irqbalance安装方法如下:
    a. 安装glib2-devel。
    yum -y install glib2-devel

    b. 安装irqbalance。

    yum -y install irqbalance

    c. 开启irqbalance服务。

    /etc/init.d/irqbalance start

    d. 关闭irqbalance服务。

    /etc/init.d/irqbalance stop
本文档内容整理自移动云官方帮助中心(查看原文),仅供参考。