29.6. 使用 network RHEL 系统角色增加环缓冲的大小,以减少数据包丢弃率
如果数据包丢失率导致应用程序报告数据丢失、超时或其他问题,则可以增加以太网设备的环缓冲区的大小。
环缓冲区是循环缓冲区,溢出会覆盖现有数据。网卡分配一个传输(TX)和接收(RX)环缓冲区。接收环缓冲在设备驱动程序和网络接口控制器(NIC)之间共享。数据可以通过硬件中断或软件中断(也称为 SoftIRQ)从 NIC 移到内核。
内核使用 RX 环缓冲区来存储传入的数据包,直到设备驱动程序可以处理它们。设备驱动程序排空 RX 环,通常使用 SoftIRQ,其将传入的数据包置于名为 sk_buff
或 skb
的内核数据结构中,以通过内核直至拥有相关套接字的应用程序开始其过程。
内核使用 TX 环缓冲区来存放应发送到网络的传出数据包。这些环缓冲位于堆栈的底部,是可能会发生数据包丢弃的关键点,进而会对网络性能造成负面影响。
当您运行一个使用 network
RHEL 系统角色的 play 时,如果设置值与 play 中指定的值不匹配,则角色会使用相同的名称覆盖现有的连接配置文件。要防止将这些值重置为其默认值,请始终在 play 中指定网络连接配置文件的整个配置,即使配置(如 IP 配置)已存在。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户对其具有
sudo
权限。 - 您知道设备支持的最大环缓冲区大小。
步骤
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with increased ring buffer sizes ansible.builtin.include_role: name: rhel-system-roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 198.51.100.20/24 - 2001:db8:1::1/64 gateway4: 198.51.100.254 gateway6: 2001:db8:1::fffe dns: - 198.51.100.200 - 2001:db8:1::ffbb dns_search: - example.com ethtool: ring: rx: 4096 tx: 4096 state: up
此 playbook 使用以下设置创建
enp1s0
连接配置文件,或者如果配置文件已存在就更新它:-
静态
IPv4
地址 -198.51.100.20
,子网掩码为/24
-
静态
IPv6
地址 -2001:db8:1::1
,子网掩码为/64
-
IPv4
默认网关 -198.51.100.254
-
IPv6
默认网关 -2001:db8:1::fffe
-
IPv4
DNS 服务器 -198.51.100.200
-
IPv6
DNS 服务器 -2001:db8:1::ffbb
-
DNS 搜索域 -
example.com
环缓冲区条目的最大数量:
- 接收(RX):4096
- 传输(TX):4096
-
静态
验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误,但保护有效配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
文件 -
/usr/share/doc/rhel-system-roles/network/
directory