网卡多队列

网卡多队列

内容来自:https://help.aliyun.com/document_detail/52559.html

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

支持多队列的 ECS 实例规格

各种实例规格对网卡多队列的支持现状,详见 实例规格族

支持多队列的镜像

目前,由阿里云官方提供的公共镜像中,支持多队列的镜像如下表所示。镜像是否支持多队列与操作系统的位数无关。

镜像名称 是否支持多队列? 备注
Windows 2012 R2 尚未公开支持,可邀测
Windows 2016 尚未公开支持,可邀测
CentOS 7.2
CentOS 6.8
Ubuntu 16.04
Ubuntu 14.04
Debian 8.6
SUSE Linux Enterprise Server 12 SP1
OpenSUSE 13.1
CoreOS

在 Linux ECS 实例上配置网卡多队列

推荐使用较新的 Linux 发行版(如 CentOS 7.2)配置网卡多队列。

这里以 CentOS 7.2 为例介绍如何配置网卡多队列,假设是 2 个队列,网卡 interface 名称为 eth0。

  • 查看网卡是否支持多队列。运行命令:ethtool -l eth0
  • 设置网卡当前使用多队列。运行命令:ethtool -L eth0 combined 2
  • 对于有多个网卡的用户,可以对多个网卡分别进行设置:
    1. [[email protected] ~]# ethtool -l eth0
    2. Channel parameters for eth0:
    3. Pre-set maximums:
    4. RX: 0
    5. TX: 0
    6. Other: 0
    7. Combined: 2 # 这一行表示最多支持设置2个队列
    8. Current hardware settings:
    9. RX: 0
    10. TX: 0
    11. Other: 0
    12. Combined: 1 #表示当前生效的是1个队列
    13. [[email protected] ~]# ethtool -L eth0 combined 2 # 设置eth0当前使用2个队列
  • 建议开启 irqbalance 服务,让系统自动调整网卡中断在多个 CPU 核上的分配。运行命令:systemctl start irqbalance (CentOS 7.2 已默认开启)。
  • 开启多队列后,如果网络性能提升仍不如您的预期,您可以考虑开启 RPS 特性。参考如下 Shell 脚本:
    1. #!/bin/bash
    2. cpu_num=$(grep -c processor /proc/cpuinfo)
    3. quotient=$((cpu_num/8))
    4. if [ $quotient -gt 2 ]; then
    5. quotient=2
    6. elif [ $quotient -lt 1 ]; then
    7. quotient=1
    8. fi
    9. for i in $(seq $quotient)
    10. do
    11. cpuset="${cpuset}f"
    12. done
    13. for rps_file in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)
    14. do
    15. echo $cpuset > $rps_file
    16. done

在 Windows ECS 实例上配置网卡多队列

注意:目前,Windows 用户采用邀测的方式。Windows 系统使用网卡多队列后其网络性能也会提升,但是提升效果不如 Linux 系统。

如果您使用的是 Windows 系统,您需要下载并安装驱动程序,才能使用网卡多队列功能。

Windows 系统的驱动安装过程如下。

  1. 提交工单,索取并下载驱动安装包。
  2. 解压驱动安装包。您会看到几个文件夹,Windows 2012/2016 应使用 Win8/amd64 文件夹下的驱动。
  3. 升级网卡驱动:
    1. 选择 设备管理器 > 网络适配器
    2. 右键单击 Red Hat VirtIO Ethernet Adapter,选择 更新驱动程序软件
    3. 选择本地刚才解压的驱动目录的 Win8/admin64 目录,更新驱动即可。
  4. 完成驱动升级后,建议重启 Windows 系统。

至此,您就可以开始使用网卡多队列功能了。

时间: 2024-11-07 22:50:14

网卡多队列的相关文章

为什么使能RPS/RFS, 或者RSS/网卡多队列后,QPS反而下降?

http://laoar.github.io/blog/2017/05/07/rps/ TL;DR RPS 即receive side steering,利用网卡的多队列特性,将每个核分别跟网卡的一个首发队列绑定,以达到网卡硬中断和软中断均衡的负载在各个CPU上. 他要求网卡必须要支持多队列特性. RPS receive packet steering 他把收到的packet依据一定的hash规则给hash到不同的CPU上去,以达到各个CPU负载均衡的目的. 他只是把软中断做负载均衡,不去改变硬

linux内核对网卡驱动多队列的支持

linux的招牌就是它强大的网络功能,稳定,高效,能随着现实的日新月异而日趋完善.众所周知,linux的网卡由结构体net_device表示,一 个该结构体对应一个可以调度的数据包发送队列,注意,这里不谈数据包接收,数据包的实体在内核中以结构体sk_buff表示,这样的话,上述文字就可以用 以下图示来表示: 所谓的网卡对发送数据包的调度指的是多个数据包共享一个网卡的规则,当然就要拥有一系列的约定,比如区分数据包的优先级,区分数据包的类型,内核根据不同的调度策略来对不同的数据包进行排队,然后按照队

网卡中断及多队列

网卡中断及多队列 作者:cb9e58ff5a37链接:https://www.jianshu.com/p/e64d8750ab1c ============================= 1.判断当前系统环境是否支持多队列网卡,执行命令: lspci -vvv 如果在Ethernet项中.含有MSI-X: Enable+ Count=9 Masked-语句,则说明当前系统环境是支持多队列网卡的,否则不支持. 2.ethtool -l eth0命令可以看到eth0网卡是否支持多队列,最多支持多

驱动11.网卡驱动程序

1 网络传输的简介 (1)接收过程,如上图,网络上的数据包到达网卡后,网卡产生中断,然后设备驱动层收到中断后,开始进行网络包的接收,接收完之后调用一个netif_rx函数交给网络协议层(层次结构上图一),然后就是一层一层的网上传到用户空间了. (2)发送过程,从用户空间过来的数据包,经过层层穿越之后,到达网络协议层,然后调用一个dev_queue_xmit()函数之后就不管了,剩下的交给驱动层经过处理后,使用函数hard_start_xmit()函数发送,然后硬件上网卡开始发送数据包了. 2 d

OpenVPN多处理之-多队列TUN多实例

两年前我以前提到了多个OpenVPN共享一个tun虚拟网卡,旨在降低管理开销和切换开销,由于我讨厌在外面对一大堆网卡做Bridge或者Bonding,除了初衷不同,其实的关于TUN的进展一直没有偏离我的思路.假设你看一下哪怕是Linux 3.9.6的内核的tun.c就知道我当初的思路并没有错.Linux内核社区相同也是这么做的,无疑,大牛们做的更好. 1.关于网卡多队列 硬件在不断的进步,可是终究会遇到物理瓶颈,而此时再想扩展性能就须要横向优化了,就是说,一个芯片遇到了瓶颈,我就搞多个,这也是非

Linux TC 带宽管理队列规则

在着手学习TC之前,请先了解TC采用如下单位来描述带宽: mbps = 1024 kbps = 1024 * 1024 bps => byte/s mbit = 1024 kbit => kilo bit/s mb = 1024 kb = 1024 * 1024 b => byte mbit = 1024 kbit => kilo bit 内定:数值以bps和b方式储存.但当设置tc输出速率时,使用如下表示: 1Mbit = 1024 Kbit = 1024 * 1024 bps 

Linux TCP队列相关参数的总结 转

    在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过来后,可能很快就忘记或混淆了它们的含义.本文尝试总结TCP队列缓冲相关的内核参数,从协议栈的角度梳理它们,希望可以更容易的理解和记忆.注意,本文内容均来源于参考文档,没有去读相关的内核源码做验证,不能保证内容严谨正确.作为Java程序员没读过内核源码是硬伤. 下面我以server端为视角,从 连接建

IMX257虚拟网卡vnet驱动程序

20150419 IMX257虚拟网卡vnet驱动程序 2015-04-19 Lover雪儿 一.一个简单的虚拟网卡驱动 1 static struct net_device *vnet_dev; //定义一个网络设备结构体 2 3 4 static const struct net_device_ops virt_netdev_ops = { 5 .ndo_start_xmit = NULL, 6 }; 7 8 9 static int virt_net_init(void){ 10 11 /

Linux TCP队列相关参数的总结

在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过来后,可能很快就忘记或混淆了它们的含义.本文尝试总结TCP队列缓冲相关的内核参数,从协议栈的角度梳理它们,希望可以更容易的理解和记忆.注意,本文内容均来源于参考文档,没有去读相关的内核源码做验证,不能保证内容严谨正确.作为Java程序员没读过内核源码是硬伤. 下面我以server端为视角,从连接建立. 数据