You need to enable JavaScript to run this app.
导航
在Linux操作系统中调整RPS相关参数
最近更新时间:2024.07.16 14:32:02首次发布时间:2024.07.16 14:32:02

本文主要介绍如何在Linux操作系统中,配置RPS(Receive Packet Steering,接收数据包定向)功能相关参数,优化网络数据包处理的功能,改善多核系统上的网络性能和负载均衡。

参数说明

net.core.rps_sock_flow_entries

该参数用于配置Linux内核中的的最大流表项数目,即能够同时跟踪的网络流的数量。增加这个参数的值可以提高RPS的性能,从而更有效地利用多个CPU核心来处理网络流量。流表中的每个流对应着一个网络连接,当一个数据包到达时,内核会根据数据包的源地址、目的地址、协议等信息来确定对应的流,并将数据包分发到流对应的CPU核心上进行处理。

rps_cpus

本实践是指/sys/class/net/<interface>/queues/rx-<queue>/rps_cpus参数,该参数用于指定处理来自单个网卡(interface)指定队列(queues)的网络流(flow)数据包的CPU核心。通过设置这个参数可以限制参与RPS处理的CPU核心的数量,从而提高系统性能。

rps_flow_cnt

本实践是指/sys/class/net/<interface>/queues/rx-<queue>/rps_flow_cnt参数,这个参数用于控制单个网卡(interface)指定队列(queues)中,每个CPU核心上的RPS队列中最多可以缓存多少个流。通过增加这个值,可以允许更多的数据包在多个处理核心之间分配,从而加速数据包的处理速度。

操作场景

  • 在CPU数量远大于网卡队列时,可通过配置rps_sock_flow_entries参数值,提升网络性能。
  • 云服务器使用虚拟网卡时(例如veth),通过配置rps_sock_flow_entries参数值,可较大程度提升网络性能。

注意

  • 普通的物理网卡不建议配置,否则可能会造成核间中断开销增大,反而降低性能。
  • RFS依赖于RPS,RPS是默认关闭的,需要开启RPS后,RFS相关配置才能生效。RPS配置CPU列表时,尽量选取与中断CPU同一个NUMA域内的CPU,同时也应尽量排除负载已经很高的CPU。

操作步骤

本方式可在操作系统运行过程中永久修改参数值,重启实例后需再次配置。

  1. 登录目标实例。操作详情可查看登录Linux实例
  2. 执行如下命令,查看接口值。
    • 查看rps_sock_flow_entries参数值。
      cat /proc/sys/net/core/rps_sock_flow_entries
      
      回显示例:
    • 查看rps_cpus参数值。
      cat /sys/class/net/eth0/queues/rx-*/rps_cpus
      
      回显示例:
    • 查看rps_flow_cnt参数值。
      cat /sys/class/net/eth0/queues/rx-*/rps_flow_cnt
      
      回显示例:
  3. 执行如下命令,配置参数值。
    • 配置rps_sock_flow_entries参数值。

      说明

      建议值配置为32768,您也可以根据实际业务需求自行调整。

      echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
      
    • 配置rps_cpus参数值。

      说明

      本命令作用是配置eth0网卡接收接收数据包时,使用所有可用的CPU核心进行处理,请将eth0替换为实际网卡名。

      echo ff > /sys/class/net/eth0/queues/rx-*/rps_cpus
      
    • 配置rps_flow_cnt参数值。

      说明

      本实践中,实例CPU核数为8,网卡名为eth0
      * 请将4096替换为rps_sock_flow_entries / CPU核数的值,
      * 请将eth0替换为实际网卡名。

      echo 4096 > /sys/class/net/eth0/queues/rx-*/rps_flow_cnt