zoukankan      html  css  js  c++  java
  • 常见的网卡调优

    常见的网卡调优

    网卡多队列

    如果网卡及其驱动支持 RSS/多队列,那你可以会调整 RX queue(也叫 RX channel)的数量。这可以用 ethtool 完成。
    查看 RX queue 数量:

    $ sudo ethtool -l eth0
    Channel parameters for eth0:
    Pre-set maximums:
    RX:   0
    TX:   0
    Other:    0
    Combined: 8
    Current hardware settings:
    RX:   0
    TX:   0
    Other:    0
    Combined: 4
    

    这里可以看到允许的最大值(网卡及驱动限制),以及当前设置的值。
    注意:不是所有网卡驱动都支持这个操作。如果你的网卡不支持,会看到如下类似的错误:

    $ sudo ethtool -l eth0
    Channel parameters for eth0:
    Cannot get device channel parameters
    : Operation not supported
    

    这意味着驱动没有实现 ethtool 的 get_channels 方法。可能的原因包括:该网卡不支持调整 RX queue 数量,不支持 RSS/multiqueue,或者驱动没有更新来支持此功能。

    调整 RX queues

    设置 combined 类型网卡的收发队列为 8 个:

    $ sudo ethtool -L eth0 combined 8
    

    如果你的网卡支持独立的 RX 和 TX 队列数量,那你可以只修改 RX queue 数量:

    $ sudo ethtool -L eth0 rx 8
    

    注意:对于大部分驱动,修改以上配置会使网卡先 down 再 up,因此会造成丢包。请酌情使用。

    kvm中设置网卡多队列:
    编辑虚拟机yaml文件,添加 <driver name='vhost' queues='4'/>
    一般队列数和虚拟机的vcpu保持一致

    网卡队列长度

    增加RX queue 的大小可以在流量很大的时候缓解丢包问题,但是,只调整这个还不够,软件层面仍然可能会丢包,因此还需要其他的一些调优才能彻底的缓解或解决丢包问题

    ethtool -g 可以查看 queue 的大小。

    $ sudo ethtool -g eth0
    Ring parameters for eth0:
    Pre-set maximums:
    RX:   4096
    RX Mini:  0
    RX Jumbo: 0
    TX:   4096
    Current hardware settings:
    RX:   512
    RX Mini:  0
    RX Jumbo: 0
    TX:   512
    

    以上显式网卡支持最多 4096 个接收和发送 descriptor(描述符,简单理解,存放的是指向包的指针),但是现在只用到了 512 个。

    ethtool -G 修改 queue 大小:

    $ sudo ethtool -G eth0 rx 4096
    

    注意:对于大部分驱动,修改以上配置会使网卡先 down 再 up,因此会造成丢包。请酌情使用。

    网卡哈希字段

    可以用 ethtool 调整 RSS 计算哈希时所使用的字段。

    例子:查看 UDP RX flow 哈希所使用的字段:

    $ sudo ethtool -n eth0 rx-flow-hash udp4
    UDP over IPV4 flows use these fields for computing Hash flow key:
    IP SA
    IP DA
    

    可以看到只用到了源 IP(SA:Source Address)和目的 IP。

    我们接下来修改一下,加入源端口和目的端口:

    $ sudo ethtool -N eth0 rx-flow-hash udp4 sdfn
    

    sdfn 的具体含义解释起来有点麻烦,请查看 ethtool 的帮助(man page)。

    调整 hash 所用字段是有用的,而 ntuple 过滤对于更加细粒度的 flow control 更加有用

  • 相关阅读:
    03 Linux下运行Django项目
    02 Linux常用基本命令(二)
    01 Linux常用基本命令(一)
    08 基本数据结构
    07 Deque的应用案例-回文检查
    给select增加placeholder技巧
    易经中人生的六大阶段 :潜、现、惕、跃、飞、亢 你在第几个阶段?
    java 实现傅立叶变换算法 及复数的运算
    java 正则表达式 复习
    关于mysql varchar(N)
  • 原文地址:https://www.cnblogs.com/mrwuzs/p/14636367.html
Copyright © 2011-2022 走看看