英特尔® 以太网 700 系列
Linux 性能调优指南
NEX云网络集团(NCNG)
修订版 1.2
2024 年 XNUMX 月
修订历史
修订 | 日期 | 评论 |
1.2 | 2024 年 XNUMX 月 | · 添加了额外的电源管理指南。 · 添加了 Intel* Turbo Boost。 · 添加了网络设备积压。 · 添加了平台特定的配置和调整。 · 添加了第四代英特尔* %eon* 可扩展处理器。 · 添加了 AMD EPYC。 · 更新了检查系统硬件功能。 · 更新了 iPerf2。 · 更新了 iPerf3。 · 更新了 Tx/Rx 队列。 · 更新了中断审核。 · 更新了戒指尺寸。 · 更新平台调整(i40e 非特定)。 · 更新 BIOS 设置。 · 更新了 C 状态控制。 · 更新了 CPU 频率缩放。 · 更新应用程序设置。 · 更新的操作系统/内核设置。 · 更新 IP 转发。 · 更新了低延迟。 |
2023 年 XNUMX 月 | 本文档的变更包括: · 增加了相关参考资料。 · 添加了确保 DDP 包正确加载。 · 添加了 iPerf2。 · 添加了 iPerf3。 · 添加了 netperf。 · 更新了 IRQ 亲和性。 · 添加了 Tx/Rx 队列。 · 更新了戒指尺寸。 · 添加了巨型帧。 · 增加了适配器粘合。 · 增加了英特尔 svr-info 工具。 |
|
1.0 | 2016 年 XNUMX 月 | 初始版本(英特尔公开)。 |
介绍
本指南旨在指导您在 Linux 环境中使用英特尔® 以太网 700 系列网卡来优化网络性能。本指南重点介绍可能提升网络性能的硬件、驱动程序和操作系统条件及设置。需要注意的是,网络性能可能会受到多种外部因素的影响,本指南仅介绍其中最常见和最显著的因素。
1.1 相关参考文献
- 所有英特尔® 以太网适配器和设备的用户指南,支持 Windows 和 Linux:
英特尔® 以太网适配器和设备用户指南 - 技术数据表:
英特尔® 以太网控制器 X710/XXV710/XL710 数据表 - 所有英特尔® 以太网产品的完整软件包(下载所有驱动程序、NVM、工具等):
英特尔® 以太网适配器完整驱动程序包 - NVM(非易失性存储器)更新包:
适用于英特尔® 以太网网络适配器 700 系列的非易失性内存 (NVM) 更新实用程序 - Linux 的 svr-info 工具可以从服务器捕获相关硬件和软件详细信息: https://github.com/intel/svr-info
- DDP技术指南:
英特尔® 以太网 700 系列动态设备个性化 (DDP) 技术指南
初始清单
2.1 更新驱动程序/固件版本
使用 ethtool -i ethx 检查驱动程序/固件版本。
根据需要更新以下内容:
- 更新 i40e 驱动程序
http://sourceforge.net/projects/e1000/files/i40e%20stable/ or https:// downloadcenter.intel.com/ download/24411/Network-Adapter-Driver-for-PCI-E-40- Gigabit-Network-Connections-under-Linux - 更新固件
https://downloadcenter.intel.com/download/24769/NVM-Update-Utility-for-Intel-Ethernet-ConvergedNetwork-Adapter-XL710-X710-Series
2.2 阅读自述文件
检查已知问题并从 README 获取最新的配置说明 file 包含在 i40e 源包中。
2.3 检查您的 PCI Express (PCIe) 插槽是否为 x8
某些 PCIe x8 插槽实际上配置为 x4 插槽。这些插槽的带宽不足以支持双端口和四端口设备的全线速传输。此外,如果将支持 PCIe v3.0 的适配器插入 PCIe v2.x 插槽,则无法获得全带宽。软件设备驱动程序会检测到这种情况,并在系统日志中写入以下消息:
此卡可用的 PCI-Express 带宽不足以实现最佳性能。要实现最佳性能,需要 x8 PCI-Express 插槽。
如果出现此错误,请将适配器移至真正的 PCIe v3.0 x8 插槽以解决问题。
2.4 检查系统硬件功能
在 10 Gbps、25 Gbps 和 40 Gbps 以太网中,有一些最低 CPU 和系统要求。一般来说,现代服务器级处理器和适合您平台的最佳内存配置应该足够了,但需求会因您的工作负载而异。所有内存通道都应填充,并且应在 BIOS 中启用内存性能模式。验证您的 CPU 和内存配置是否能够支持您工作负载所需的网络性能水平。
笔记
XL710 是一个 40 GbE 控制器。使用此控制器的 2 x 40 GbE 适配器并非旨在成为 2 x 40 GbE,而是具有活动备用端口的 1 x 40 GbE。当尝试使用涉及两个端口的线速流量时,内部交换机会饱和,并且两个端口之间的组合带宽被限制为总共 XNUMX Gbps。
2.4.1 内核启动参数
如果在 BIOS 中启用了英特尔® 定向 I/O 虚拟化技术 (英特尔® VT-d),英特尔建议 IOMMU 处于直通模式,以实现最佳主机网络性能。这可消除主机流量的 DMA 开销,同时使虚拟机 (VM) 仍能享受英特尔® VT-d 的优势。这可以通过将以下行添加到内核启动参数来实现:fommu-pt。
2.5 确保 DDP 包正确加载
140ea 和 140eb 基础驱动程序不直接支持动态设备个性化 (DDP)。要将 DDP 与 700 系列设备一起使用,需要 DDP profile 可以与 testpmd 应用程序一起应用。
有关 DDP pro 的详细信息file以及如何应用 DDP profile 使用 700 系列设备上的 testpmd,请参阅英特尔® 以太网 700 系列动态设备个性化 (DDP) 技术指南。
验证 DDP 是否file 已成功加载:
testpmd> ddp 获取列表 0 Profile 数量为:1
笔记
如果亲file 如果数字为 0,则表示未加载任何 DDP 包。如果发生 DDP 包加载错误,设备将默认进入安全模式,并且许多性能功能将不可用。如果存在与加载 DDP 包相关的错误,则会导致性能问题。有关故障排除步骤,请参阅 Inte/* 以太网 700 系列动态设备个性化 (DDP) 技术指南。
基线性能测量和调整方法
3.1 网络性能基准
在开始调优之前,对网络性能进行良好的基准测量非常重要。通常,除了对特定应用程序/工作负载的性能进行初步测量外,最好还使用标准网络性能基准来验证网络设备是否处于良好状态。
对于单系统优化,netperf 或 iperf 和 NetPIPE 都是可靠的开源免费工具,可让您强调连接并诊断性能问题。
Netperf 在吞吐量和延迟测试方面都表现出色。NetPIPE 是一款专门针对延迟的工具,但可以针对任何类型的环境进行编译。
笔记
netperf 中的 TCP_RR 测试以事务/秒为单位返回延迟。这是一个往返数。单向延迟可使用以下公式计算:
延迟(微秒)= (1⁄2) / [事务数/秒] * 1,000,000
3.1.1 iPerf2
由于 iperf2 易于使用且支持单个应用程序实例中的多个线程,因此英特尔建议在大多数基准测试情况下使用 iperf3 而不是 iperf2。英特尔建议使用 -P 选项运行 4G 连接中的 25-4 个线程,6G 连接中的 40-XNUMX 个线程。
- 要运行从客户端到服务器的单向流量:服务器命令 examp乐:iperf2 -s
客户端命令示例amp乐:iperf2 -c -P - 要运行从客户端到服务器的双向流量(反之亦然):服务器命令 examp乐:iperf2 –s –p
客户端命令示例amp乐:
iperf2 -c -p -P -全双工或
iperf2 -c -p -P –d
笔记
iperf2 中的 –full-duplex 和 -d 选项都允许用户执行双向测试。但是 –full-duplex 选项专门用于全双工测试。
笔记
在跨多个服务器端口测试 iperf2 时,可以将 -d 标志添加到服务器命令中,以便从同一终端窗口在后台运行所有服务器会话。当服务器命令嵌入脚本中的 for 循环中时,也可以使用 -d 标志。
笔记
使用单个流/线程运行网络吞吐量测试时(例如ample: P1),AMD 处理器可能无法提供预期的吞吐量,尤其是带宽更高的 NIC(如果速度 >= 25G 带宽)。因此,需要将应用程序固定到特定核心才能实现更高的吞吐量。请参阅第 22 页的应用程序设置。
3.1.2 iPerf3
如果使用 iperf3,则需要应用程序的多个实例才能发挥优势tag多线程、RSS 和硬件队列。英特尔建议 2G 连接运行 4-25 个应用程序会话,4G 连接运行 6-40 个会话。每个会话应使用 -p 选项指定唯一的 TCP 端口值。
- 要运行从客户端到服务器的单向流量:
服务器命令示例amp乐:
iperf3 -s -p
客户端命令示例amp乐:
iperf3 -c -p - 要运行从客户端到服务器的双向流量(反之亦然):
服务器命令示例amp乐:
iperf3 –s –p
客户端命令示例amp乐:iperf3 -c -p -P –-bidir - 要启动 iperf3 的多个实例(线程),建议使用 for 循环将线程映射到 TCP 端口,并使用 & 在后台运行 iperf3 以并行创建多个进程。
服务器命令示例ample,启动4个线程:port=””; for i in {0..3}; do port=520$i; bash -c “iperf3 -s -p $port &”; done; 客户端命令 example,启动 4 个线程 - 传输测试端口 =“”; for i in {0..3}; do port=520$i; bash -c “iperf3 -c $serverIP -p $port &”; done; 客户端命令 example,启动 4 个线程 - 接收测试端口 =“”; for i in {0..3}; do port=520$i; bash -c “iperf3 -R -c $serverIP -p $port &”; done; 对于 40G 连接,增加 for 循环以创建最多 6 个实例/线程。
笔记
使用单个流/线程运行网络吞吐量测试时(例如amp例如:P1),AMD 处理器可能无法提供预期的吞吐量,尤其是更高的带宽
NIC(如果速度 >= 25G 带宽)。因此,需要将应用程序固定到特定核心才能实现更高的吞吐量。请参阅第 22 页的应用程序设置和第 26 页的 AMD EPYC。
3.1.3 netperf
netperf 工具是吞吐量和延迟测试的最佳选择。
- netperf 中的 TCP_STREAM 测试用于测量设备的吞吐能力。服务器命令示例ample: netserver 客户端命令 examp例如:netperf -t TCP_STREAM -l 30 -H
- netperf 中的 TCP_RR 测试返回延迟值,单位为事务/秒。这是一个往返次数。建议使用 -T x,x 选项,其中 x 表示设备本地 CPU。单向延迟可以使用以下公式计算:延迟 (usec)=(1⁄2)/ [事务/秒]*1,000,\ 服务器命令示例ample: 网络服务器
客户端命令示例amp示例:netperf -t TCP_RR -l 30 -H -T x,x - 要启动 netperf 的多个实例(线程),建议使用 for 循环将线程映射到 TCP 端口,并使用 & 在后台运行 netperf 以并行创建多个进程。
服务器命令示例ample,启动8个线程:
端口 =””; 对于 i 在 {0..7} 中; 执行端口 = 520$i; bash -c “netserver -L $serverIP -p $port &”; 完成;
客户端命令示例ample,启动8个线程:port =“”; for i in {0..7}; do port = 520 $ i; bash -c“netperf -H $serverIP -p $port -t TCP_STREAM -l 30 &”; done;
3.2 调优方法
每次只关注一个调整变化,这样你就能知道每个变化对测试的影响。调整过程越有条不紊,就越容易识别和解决性能瓶颈的原因。
调整 i40e 驱动程序设置
4.1 IRQ 亲和性
配置 IRQ 亲和性,以便不同网络队列的中断被亲和到不同的 CPU 核心,这会对性能产生巨大影响,尤其是多线程吞吐量测试。
要配置 IRQ 亲和性,请停止 irqbalance,然后使用 i40e 源包中的 set_irq_affinity 脚本或手动固定队列。禁用用户空间 IRQ 平衡器以启用队列固定:
- systemctl 禁用 irqbalance
- systemctl 停止 irqbalance
使用 i40e 源包中的 set_irq_affinity 脚本(推荐): - 要使用所有核心:
[i40epackage 路径]/scripts/set_irq_affinity -X all ethX - 仅使用本地 NUMA 套接字上的核心:[path-to-i40epackage]/scripts/set_irq_affinity -X local ethX
- 您还可以选择一系列核心。避免使用 cpu0,因为它运行计时器任务。[path-to-i40epackage]/scripts/set_irq_affinity 1-2 ethX
笔记
当指定 -x 选项时,亲和性脚本会将传输数据包控制 (XPS) 作为固定过程的一部分启用。启用 XPS 后,英特尔建议您禁用 irqbalance,因为带有 XPS 的内核平衡器可能会导致不可预测的性能。当指定 -X 选项时,亲和性脚本会禁用 XPS。禁用 XPS 并启用对称队列对工作负载有益,因为当 Tx 和 Rx 流量在同一队列对上得到服务时,可实现最佳性能。
在 Linux 中配置对称队列涉及调整网络接口驱动程序参数,以便为受支持的网络适配器启用对称接收队列 (Rx) 和对称传输队列 (Tx)。
笔记
- 对称队列是一种高级网络功能,并非所有 700 系列网络适配器或驱动程序都支持它们。
- 在尝试配置对称队列之前,请确保您拥有必要的驱动程序和硬件支持。
要配置对称队列,请遵循以下常规步骤:
- 编辑网络接口配置 File:使用文本编辑器(例如ample、vi、nano 或 gedit 来编辑网络接口配置 file。 这 file 通常位于 /etc/sysconfig/network-scripts/ 目录下,名称类似 ifcfg-ethX,其中 ethX 是网络接口的名称。
- 添加对称队列参数。将以下几行添加到网络接口配置中 file: ETHTOOL_OPTS=”rx-队列 8 tx-队列 8″
- 重新启动网络服务。
进行更改后,重新启动网络服务以应用新配置。sudo systemctl restart network
手动:
-
使用以下命令查找连接到每个节点的处理器:numactl –hardware lscpu
-
找到每个处理器的位掩码:
- 假设节点 0 的核心 11-0:[1,2,4,8,10,20,40,80,100,200,400,800]
- 找到分配给端口的 IRQ:grep ethX /proc/interrupts 并记下 IRQ 值。例如ample,181-192 为加载的 12 个向量。
- 将 SMP 亲和性值回显到相应的 IRQ 条目中。请注意,这需要针对每个 IRQ 条目执行: echo 1 > /proc/irq/181/smp_affinity echo 2 > /proc/irq/182/smp_affinity echo 4 > /proc/irq/183/smp_affinity 显示 IRQ 亲和性:
- 显示所有核心的 IRQ 亲和性: /脚本/set_irq_affinity -s ethX
- 仅显示本地 NUMA 套接字上的核心: /scripts/set_irq_affinity -s 本地 ethX
- 您还可以选择一系列核心: /scripts/set_irq_affinity -s 40-0-8,16 ethX
笔记
set_irq_affinity 脚本在 i40e 驱动程序版本 2.16.11 及更高版本中支持 -s 标志。
4.2 Tx/Rx 队列
驱动程序在初始化时为每个以太网端口启用的默认队列数等于平台中可用的 CPU 总数。这适用于许多平台和工作负载配置。但是,在具有高核心数和/或高以太网端口密度的平台上,此配置可能会导致资源争用。因此,在某些情况下可能需要修改系统中每个端口的默认值。
默认的 Tx/Rx 队列数量可能因具体型号和驱动程序版本而异。可以使用下面列出的 ethtool -L 命令调整队列数量。
笔记
在这些情况下,Intel 建议您将每个端口的默认队列数减少到不超过适配器端口本地 NUMA 节点中可用的 CPU 数量。在某些情况下,当尝试平衡高端口数实现上的资源时,可能需要进一步减少此数量。
修改队列配置:
以下示例ample 将端口设置为 32 个 Tx/Rx 队列:ethtool -L ethX combined 32
Examp文件输出:
ethtool -l ethX
ethX 的通道参数:预设最大值:
接收:96
德克萨斯州:96
其他:1
合计:96
当前硬件设置:
接收:0
德克萨斯州:0
其他:1
合计:32
4.3 中断审核
自适应中断调节默认处于开启状态,旨在在低 CPU 利用率和高性能之间取得平衡。不过,您可以尝试手动调整中断设置以适应您的用例。
0-235 微秒的范围提供每秒 4,310 到 250,000 次中断的有效范围。rx-μsecs-high 的值可以独立于 rx-μsecs 和 tx-μsecs 在同一个 ethtool 命令中设置,并且也独立于自适应中断调节算法。底层硬件支持以 2 微秒为间隔的粒度,因此相邻的值可能会导致相同的中断率。
- 要关闭自适应中断调节:ethtool -C ethX adapt-rx off adapt-tx off
- 要打开自适应中断调节:ethtool -C ethX adapted-rx on adapted-tx on
常规调整的良好起点是 84 μs,或 ~12000 中断/秒。如果您看到 rx_dropped 计数器在流量期间运行(使用 ethtool -S ethX),则可能是 CPU 太慢,适配器环大小(ethtool -G)的缓冲区不足以容纳 84 μs 的数据包,或者中断率太低。
- 要将中断调节设置为中断间隔固定为 84 μs(每秒 12000 次中断):ethtool -C ethX 自适应接收关闭自适应发送关闭 rx-usecs 84 tx-usecs 84 如果 CPU 利用率未达到最大值,则下一个要尝试的值是 62 μs。这会使用更多 CPU,但可以更快地为缓冲区提供服务,并且需要更少的描述符(环大小,ethtool -G)。
- 将中断调节设置为固定中断率,即中断间隔为 62 微秒(每秒 16000 次中断)。ethtool -C ethX adapt-rx off adapt-tx off rx-usecs 62 tx-usecs 62
如果 rx_dropped 计数器在流量期间增加(使用 ethtool -S ethX),则可能是 CPU 太慢、适配器环大小的缓冲区不足(ethtool -G),或者中断率太低。如果 CPU 利用率未达到最大值,则可以通过降低 ITR 值来增加中断率。这会使用更多 CPU,但服务缓冲区更快,并且需要更少的描述符(环大小,ethtool -G)。
如果您的 CPU 处于 100%,则不建议增加中断率。在某些情况下(例如 CPU 受限的工作负载),您可能需要增加 μs 值,以便为其他应用程序提供更多的 CPU 时间。
如果您需要低延迟性能和/或有足够的 CPU 用于网络处理,您可以完全禁用中断审核,这使得中断尽快触发。 - 要禁用中断调节,ethtool -C ethX adapt-rx off adapt-tx off rx-usecs 0 tx-usecs 0
笔记
在禁用中断调节的情况下运行时,每个队列上的中断率可能会非常高。考虑包含 rx-usec-high 参数以设置中断率的上限。以下命令禁用自适应中断调节,并允许最多 5 微秒的时间指示接收或传输已完成。它通过 rx-usec-high 参数将每秒总中断数限制为 200,000,而不是导致每秒多达 50,000 次中断。# ethtool -C ethX adapted-rx off adapted-tx off rx-usecs-high 20 rx-usecs 5 txusecs 5 尝试将传输/接收/高优先级合并计时器调高(80/100/150/200)或调低(25/20/10/5),以找到工作负载的最佳值。
4.4 戒指尺寸
如果您在 ethtool -S ethX 中看到 rx_dropped 计数器(rx_dropped、rx_dropped.nic),或者怀疑多个活动队列存在缓存压力,您可以尝试调整环大小(默认值)。默认值为 512,最大值为 4096。
- 要检查当前值:ethtool -g ethX
如果怀疑缓冲不足导致当前中断率下降,您可以先尝试最大值,然后尝试最小值,然后继续进行二进制搜索,直到看到最佳性能。
如果怀疑缓存压力过大(许多队列处于活动状态),减少默认缓冲区数量有助于英特尔 ® 数据直接 I/O(英特尔 ® DDIO)更高效地运行。英特尔建议尝试每个队列使用 128 或 256 个缓冲区,但需要注意的是,可能需要通过 ethtool -C 提高中断率,以避免 rx_dropped 值增加。 - 要将环大小设置为固定值:ethtool -G eth12 rx 256 tx 256
笔记
要修复使用 ethtool -S ethX|grep drop 发现的 Rx 数据包丢失,请考虑将环大小增加到 4096。通过实验找到最适合工作负载的设置,但要注意较高值会导致内存使用过多。
4.5 流量控制
第 2 层流量控制会显著影响 TCP 性能,建议在大多数工作负载下禁用该功能。突发流量(持续时间不长)可能是一个例外。
默认情况下,流量控制是禁用的。
- 启用流量控制:ethtool -A ethX rx on tx on
- 要禁用流量控制:ethtool -A ethX rx off tx off
笔记
您必须具有具有流量控制功能的链路伙伴才能成功启用流量控制。
4.6 巨型帧
当预期的流量环境包含大量正在传输的数据时,启用巨型帧功能可能会有所帮助。通过将最大传输单元 (MTU) 更改为大于默认值 1500 的值,即可启用巨型帧支持。这允许设备在网络环境中以更大的数据包传输数据。此设置可能会提高吞吐量并降低大型 I/O 工作负载的 CPU 利用率。但是,它可能会影响小数据包或延迟敏感的工作负载。
笔记
必须在您的网络环境中正确配置巨型帧或更大的 MTU 设置。
使用 ifconfig 命令增加 MTU 大小。例如ample,输入以下内容,其中是接口号:ifconfig mtu 9000 已启动
或者,您可以使用以下 ip 命令:ip link set mtu 9000 dev ip 链路设置 dev
平台调优(i40e 非特定)
5.1 BIOS 设置
- 启用 Intel® VT-d 来处理虚拟化工作负载。
- 超线程(逻辑处理器)可能会影响性能。请根据您的工作负载尝试开启或关闭该功能。
- 英特尔® Turbo Boost 允许 CPU 内核以高于 CPU 基本频率的频率运行。启用英特尔® Turbo Boost 可以提高许多工作负载的性能,但会消耗更多电量来使内核保持更高的频率。请针对您的工作负载尝试关闭/打开 Turbo Boost。
笔记
如果平台的整体 CPU 利用率较高,则无法保证睿频频率。随着整体 CPU 利用率的提高,更高的核心睿频频率会降低。
5.2 电源管理
电源管理会影响性能,尤其是在低延迟工作负载下。如果性能比降低功耗更重要,英特尔建议您尝试限制电源管理的影响。有很多不同的方法可以限制电源管理,包括通过操作系统工具、BIOS 设置和内核启动参数。选择最适合您环境的方法和级别。
5.2.1 C状态控制
将 C 状态进入限制为 CO 或 C1 可提高性能并增加电源利用率。
禁用 CPU 包 C6 状态进入可以提高网络性能。但是,这会增加功耗。
有以下选项可用:
- 动态控制C状态进入:
打开
/dev/cpu_dma_latency 并将最大允许延迟写入其中。
笔记
有一个名为 cpudmalatency.c 的小程序可以从开源社区下载、编译并从命令行运行来执行此操作。
以下示例ample 允许 1 μs 的唤醒时间,从而允许 C5 进入:cpudmalatency XNUMX &
- 限制内核启动设置中的最大 C 状态:
对于英特尔 CPU:intel_idle.max_cstates=1
对于非英特尔 CPU:processor.max_cstates=1 - 使用 cpupower 命令检查并禁用 CPU C6 状态:检查:cpupower monitor 或 cpupower idle-info
禁用 C6:cpupower idle-set -d3 或
禁用 C 状态:cpupower idle-set -D0
笔记:
- 如果服务器配备 Intel® 第四代 Intel® Xeon® 可扩展处理器,请禁用 CPU 上的 C 状态。启用或禁用超线程时,禁用空闲状态 (-D4) 可防止内核在空闲期间进入低功耗状态,并减少 CPU 在空闲状态和活动状态之间转换的延迟。
- Intel® 第四代 Intel® Xeon® 可扩展处理器的电源管理非常激进。为避免内核进入低功耗状态,请尝试减少正在使用的内核数量,以使其保持更长时间的唤醒状态 (ethtool -L合并)。此外,使用 set irq affinity 将中断绑定到特定核心(通常使用 -x local 或 CPU 核心列表),并使用 taskset 或 numactl 确保工作负载在相同的核心上运行。这可以通过保持核心活跃并优化中断处理来提高性能。
启用 C6:
cpupower 空闲设置-d3
启用 C 状态:
cpupower 空闲设置-E
- 另一种方法是利用 tuned 工具(包含在许多 Linux 发行版中)来设置性能file。这些亲file修改多个操作系统设置,这些设置可能会影响许多应用程序的性能。据发现,网络吞吐量file 为大多数工作负载提供改进。
查看:
tuned-adm 处于活动状态
放:
tuned-adm profile 网络吞吐量
笔记
必须运行 Tuned 服务才能执行上述命令。要检查/重新启动 Tuned:systemctl status tuned systemctl restart tuned
您还可以通过在内核引导行中添加以下内容来禁止任何 C 状态条目:
空闲=轮询 - 通过系统的 BIOS 电源管理设置来限制 C 状态,这可能会对性能产生影响file 可用的。
可以使用 turbostat 或 x86_energy_perf_policy 等工具来检查或设置电源管理设置。
5.2.2 PCIe 电源管理
活动状态电源管理 (ASPM) 可在 PCIe 链路未处于活动状态时启用较低的电源状态。这可能会导致 PCIe 网络设备的延迟增加,因此英特尔建议您针对延迟敏感的工作负载禁用 ASPM。通过在内核引导行中添加以下内容来禁用 ASPM:pcie_aspm=off
5.2.3 CPU 频率调节
CPU 频率调节(或 CPU 速度调节)是一种 Linux 电源管理技术,可动态调整系统时钟速度以节省电量和热量。与 C 状态一样,这可能会导致网络连接出现不必要的延迟。
cpupower 工具还可用于检查和修改 CPU 性能默认值和限制:
- 检查:cpupower 监视器或
- 将 CPU 设置为性能模式: cpupower frequency-set -g performance
笔记
修改 CPU 频率限制可能会对许多工作负载产生影响,并且可能会禁用其他功能,例如 CPU 涡轮模式。
要禁用 CPU 频率调整,请通过以下命令禁用 CPU 电源服务:
systemctl stop cpupower.service
systemctl disable cpupower.service
5.2.4 附加电源管理指南
更多详细信息请参见此高级概述view 第三代英特尔® 至强® 可扩展处理器中的许多电源管理功能,以及如何在平台级别集成这些功能的指导: https://networkbuilders.intel.com/solutionslibrary/power-management-technologyoverview-technology-guide
5.3 英特尔® Turbo Boost
英特尔® Turbo Boost 可在需要时提高处理器速度,但会消耗更多电量。关闭 Turbo Boost 可使处理器保持稳定速度,让您在特定工作负载下获得一致的性能水平。
5.4 防火墙
防火墙会影响性能,尤其是延迟性能。
如果不需要,请禁用 iptables/firewalld。
5.5 应用设置
通常,单个线程(对应单个网络队列)不足以实现最大带宽。某些平台架构(例如 AMD)在使用单线程时,相比采用 Intel 处理器的平台,会丢弃更多 Rx 数据包。
考虑使用诸如taskset或numactl之类的工具将应用程序固定到NUMA节点或网络设备本地的CPU核心。对于某些工作负载(例如存储I/O),将应用程序移动到非本地节点会带来好处。
如果可能的话,尝试增加应用程序使用的线程数。
5.6 内核版本
大多数现代内置内核都针对性能进行了合理的优化,但根据您的使用情况,更新内核可能会提高性能。下载源代码还使您能够在构建内核之前启用/禁用某些功能。
5.7 操作系统/内核设置
查阅操作系统调整指南,例如《Red Hat Enterprise Linux 网络性能调整指南》,以获得有关一般操作系统调整的更多见解。
下表列出了一些常用的调整参数。请注意,这些参数只是建议的起点,更改默认值可能会增加系统使用的资源。虽然增加这些值有助于提高性能,但有必要尝试不同的值来确定最适合给定系统、工作负载和流量类型的值。
可以使用 Linux 中的 sysctl 实用程序配置内核参数,如下所示。
到 view 系统上 rmem 和 wmem 的默认值:
sysctl net.core.rmem_default
sysctl net.core.wmem_default
将值设置为最大值 (16 MB):
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
套接字缓冲区大小,也称为接收缓冲区 (rmem) 和传输缓冲区 (wmem),是指定为传入和传出网络流量保留的内存量的系统参数。
运行不带 -w 参数的 sysctl 会列出该参数及其当前设置。
堆栈设置 | 描述 |
net.core.rmem_default | 默认接收窗口大小 |
net.core.wmem_default | 默认传输窗口大小 |
net.core.rmem_max | 最大接收窗口大小 |
net.core.wmem_max | 最大传输窗口大小 |
net.core.optmem_max | 最大选项内存缓冲区 |
net.core.netdev_max_backlog | 内核开始丢弃之前未处理的数据包积压 |
net.ipv4.tcp_rmem | TCP 读取缓冲区的内存预留 |
net.ipv4.tcp_wmem | TCP 发送缓冲区的内存预留 |
内核、网络堆栈、内存处理程序、CPU 速度和电源管理参数会对网络性能产生很大影响。常见的建议是将网络吞吐量应用于file 使用 tuned 命令。这将修改一些操作系统设置,以提供对网络应用程序的优先权。
查看:
tuned-adm 处于活动状态
放:
tuned-adm profile 网络吞吐量
5.8 网络设备积压
此功能可有效管理传入流量、减少数据包丢失、降低延迟和提高吞吐量,从而帮助提高网络性能。这将带来更好的用户体验和更快的系统响应。
默认情况下,它在大多数 Linux 操作系统中都是启用的。要检查默认值:
sysctl net.core.netdev_max_backlog
netdev_max_backlog 的最大值可能因内核版本、硬件、内存和工作负载等因素而异。在许多情况下,8192 被视为一个不错的值。sysctl -w net.core.netdev_max_backlog=8192
5.9 平台特定的配置和调整
5.9.1 第四代英特尔® 至强® 可扩展处理器
与第三代英特尔® 至强® 可扩展处理器相比,英特尔® 第四代英特尔® 至强® 可扩展处理器的电源管理非常激进。为避免内核进入低功耗状态,请尝试减少正在使用的内核数量,以使其保持唤醒状态更长时间。
为获得最高性能而推荐的 BIOS 设置
- 在 CPU 上启用/禁用超线程(基于工作负载要求和性能目标)。
- 设置系统专业版file 达到性能的最高性能。
笔记
这会导致更高的功耗 - 将 CPU 电源管理设置为“最大性能”,以优先考虑最大 CPU 性能而不是电源效率。
- 启用 Turbo Boost。在系统 BIOS 设置中禁用 Turbo Boost 通常可以防止 CPU 动态地将其时钟速度提高到超出其基本频率。
- 笔记
禁用 Turbo Boost 可能适合某些用例,在这些用例中,一致性能、电源效率或热管理优先于最大性能。 - 如果系统不使用虚拟化技术,请关闭单根 I/O 虚拟化 (SR-IOV) 功能。
- 禁用 C 状态以指示 CPU 保持活动状态并防止进入更深的空闲状态。
- 禁用C1E,确保CPU保持活动状态并且不会进入C1E空闲状态。
- 将非核心频率设置为最大值,以指示系统以最高可用频率运行。
- 在戴尔平台上,将多 APIC 描述表 (MADT) 核心仿真设置为线性(或根据 BIOS 设置为循环),以提供清晰且可预测的 CPU 核心映射。
推荐操作系统级别调优以优化性能
- 将 CPU 频率缩放调节器设置为性能。cpupower frequency-set -g performance cpupower frequency-info
- 禁用 C 状态。cpupower idle-set -D0
- 将核心 Rx(rmem)和 Tx(wmem)缓冲区设置为最大值。sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
- 设置网络设备积压。sysctl -w net.core.netdev_max_backlog=8192
- 设置调谐专业版file (工作负载取决于吞吐量/延迟)。
tuned-adm profile 网络吞吐量
推荐的适配器级别调整以优化性能
- 限制用于应用程序流量的队列数量。使用保持相关 CPU 核心处于活动状态所需的最小队列数量,以防止它们进入更深的空闲状态(根据工作负载进行调整):ethtool -L合计 32
- 设置中断调节率。ethtool -C自适应 rx 关闭 自适应 tx 关闭 rx-usecs-high 50 rx-usecs 50 tx-usecs 50
尝试调整传输/接收/高优先级合并计时器以提高(80/100/150/200)或降低(25/20/10/5)以找到工作负载的最佳值。 - 设置 Rx/Tx 环大小。ethtool -G接收 4096 发送 4096
笔记
如果您使用 ethtool -S| grep drop 命令发现 Rx 数据包丢失,请尝试将环大小减小到 4096 以下。尝试找到不丢包的工作负载的最佳值。 - 设置 IRQ 亲和性。使用 NIC 本地核心或特定核心映射(其中核心数等于第 1 页 26 中设置的队列数)。systemctl stop irqbalance set_irq_affinity -X local或者 set_irq_affinity -X
5.9.2 AMD EPYC
AMD EPYC 处理器是专为服务器和数据中心打造的强大 CPU,基于 AMD 的 Zen 架构。以下设置来自 AMD 的第四代 EPYC 系列。
获得最高性能的推荐 BIOS 设置
- 启用自定义模式可让用户调整 CPU 性能、功耗和其他设置。这有助于微调系统,以在性能和能效之间实现最佳平衡。
- 启用核心性能提升,让 CPU 自动提高速度来处理更密集的任务,从而提高整体性能。
- 禁用全局 C 状态控制,以防止 CPU 进入更深的省电状态(称为 C 状态),从而可以保持响应能力。
笔记
禁用 C 状态可能会导致额外的功耗并增加热温度。监控两者以了解工作负载。 - 根据工作负载要求和性能目标,启用/禁用 CPU 上的同步多线程 (SMT)。SMT 相当于 Intel CPU 上的超线程。
笔记
为优化性能,请参阅第 40 页上的调整 i13e 驱动程序设置和第 40 页上的平台调整(i19e 非特定)以了解推荐的操作系统和适配器级别调整。
适配器粘合
Linux 绑定是一项强大的功能,可以显著提高服务器环境中的网络性能、冗余和容错能力。但需要注意的是,它需要兼容的网络硬件以及服务器和交换机上的正确配置才能正常运行。
Linux 中的绑定驱动程序允许您将多个物理网络接口聚合为一个绑定接口。此绑定接口对操作系统和应用程序而言是单个虚拟网络接口。
笔记
Bond 是一个逻辑接口,因此无法直接在 Bond 接口上设置 CPU 亲和性(例如ample,bond0)。也就是说,它无法直接控制中断处理或 CPU 亲和性。必须为绑定的底层接口配置 CPU 亲和性。
Bonding 提供了几种操作模式,每种模式都有自己的特点。
模式 | 类型 |
0 | 循环赛 |
1 | 主动备份 |
2 | 异或 |
3 | 播送 |
4 | 链路控制协议 |
5 | 传输负载平衡 |
6 | 自适应负载平衡 |
在 Linux 中创建绑定有多种方法。最常用的方法之一是使用网络配置 files(例如amp例如,/etc/network/interfaces 或 /etc/sysconfig/network-scripts/ifcfg-bondX)。
使用网络配置进行配置 Files
以下步骤通过网络配置创建绑定 files.
- 选择两个或多个 NIC 端口进行绑定(例如ample、ethX 和 ethY)
- 打开 NIC 配置 File/etc/sysconfig/network-scripts/ 下所需的 NIC 接口(例如ample、vi ifcfg-ethX 和 vi ifcfg-ethY) 并附加以下文本:
MASTER=bondN [注意:N 是一个整数,表示键号。] SLAVE=yes - 创建绑定网络脚本 file 使用 vi /etc/sysconfig/networkscripts/ifcfg-bondN 并输入以下文本:
DEVICE=bondN [注意:N 是一个整数,表示键数] ONBOOT=yes USERCTL=no BOOTPROTO=dhcp (或)none
IPADDR=200.20.2.4 [如果 BOOTPROTO=none,则必填] NETMASK=255.255.255.0 [如果 BOOTPROTO=none,则必填] NETWORK=200.20.2.0 [如果 BOOTPROTO=none,则必填] BROADCAST=200.20.2.255 [如果 BOOTPROTO=none,则必填] BONDING_OPTS=”mode=1 miimon=100″
笔记
根据需要,模式可以是 0 到 6 之间的任意整数。 - 使用 service network restart 或 systemctl restart NetworkManager.service 重新启动网络服务
性能故障排除
7.1 CPU利用率
检查工作负载运行时每个核心的 CPU 利用率。
请注意,每个核心的利用率与性能的关系比整体 CPU 利用率更密切,因为它提供了每个网络队列的 CPU 利用率的概念。如果您只有几个线程在运行网络流量,那么您可能只有几个核心在被使用。但是,如果这些核心的利用率达到 100%,那么您的网络吞吐量可能会受到 CPU 利用率的限制,是时候执行以下操作了:
- 调整 IRQ 调节/环大小,详情请参阅中断调节。
- 增加应用程序线程数,将 CPU 负载分散到更多核心上。如果所有核心都以 100% 的负载运行,则您的应用程序可能受 CPU 限制,而不是网络限制。
常用工具:
- 顶部
— 按 1 展开 CPU 列表并检查正在使用哪些 CPU。
— 注意利用率水平。
— 注意哪些进程被列为最活跃的进程(列表顶部)。 - 统计工具
以下示例ample 命令行在 Red Hat Enterprise Linux 7.x 上进行了测试。
它显示每个核心的 CPU 利用率(通过查找总空闲百分比并从 100 中减去)并用红色突出显示 80% 以上的值。mpstat -P ALL 1 1 | grep -v Average | tail -n +5 | head -n -1 | awk '{ print (100-$13)}' | egrep -color=always '[^\.][8-9][0-9][\.]?.*|^[8-9][0-9][\.]?.*| 100|' | column - perf top 查找周期被花费的地方。
7.2 i40e 计数器
i40e 驱动程序通过 ethtool -S ethX 命令提供了一长串计数器,用于接口调试和监控。在工作负载运行时观察输出和/或比较工作负载运行前后的计数器值会很有帮助。
- 要获取 i40e 计数器的完整转储:ethtool -S ethX
- 要仅监视非零计数器:watch -d (ethtool -S ethX) | egrep -v :\ 0 | column
需要注意的事项: - rx_dropped 意味着 CPU 无法足够快地服务缓冲区。
- port.rx_dropped 意味着插槽/内存/系统中某些东西速度不够快。
7.3 网络计数器
在工作负载运行之前/之后检查 netstat -s。
Netstat 会从系统中所有网络设备收集网络信息。因此,结果可能会受到测试网络以外的网络的影响。netstat -s 的输出可以很好地指示 Linux 操作系统或内核的性能问题。请参阅操作系统调优指南,例如《Red Hat Enterprise Linux 网络性能调优指南》,了解更多关于常规操作系统调优的见解。
7.4 系统日志
检查系统日志中的错误和警告(/var/log/messages、dmesg)。
7.5 Intel svr-info 工具
Intel 提供了一个 svr-info 工具(参见 https://github.com/intel/svr-info) 可从服务器捕获相关硬件和软件详细信息。svr-info 输出对于识别系统瓶颈或未针对工作负载进行优化的设置/调整非常有用。在向英特尔提交与以太网相关的性能问题支持案例时,请务必包含 svr-info 输出(文本 file) 适用于测试配置中的每个 Linux 服务器。
- 下载并安装 svr-info:
wget -qO- https://github.com/intel/svr-info/releases/latest/download/svrinfo.tgz| tar xvz cd svr 信息
./svr-信息
> 主机名.txt - 收集输出:
./svr-info > 主机名.txt - 附加一个文本(.txt) file 将每个服务器提交到您的英特尔支持案例进行分析。
常见性能场景的建议
8.1 IP 转发
- 更新内核。
由于路由代码中的内核更改(首先是出于安全考虑删除了路由缓存),某些最新发行版内核的路由性能有所下降。最新发行版外的内核应该有补丁,可以减轻这些更改对性能的影响,并可能提供更好的性能。 - 禁用超线程(逻辑核心)。
- 编辑内核启动参数。
— 从内核启动行强制关闭 iommu(intel_iommu=off 或 iommu=off),除非虚拟化需要
— 关闭电源管理:processor.max_cstates=1 idle=poll pcie_aspm=off - 将队列数量限制为与本地套接字上的核心数量相等(本例中为 12 个amp乐)。 ethtool -L ethX 组合 12
- 仅将中断固定到本地套接字。set_irq_affinity -X local ethX 或 set_irq_affinity -X local ethX
笔记
根据工作负载可以使用 -X 或 -x。 - 根据需要更改 Tx 和 Rx 环大小。较大的值需要更多资源,但可以提供更好的转发速率。ethtool -G ethX rx 4096 tx 4096
- 路由时禁用 GRO。
由于已知的内核问题,路由/转发时必须关闭 GRO。ethtool -K ethX gro off,其中 ethX 是要修改的以太网接口。 - 禁用自适应中断调节并设置静态值。ethtool -C ethX adapted-rx off adapted-tx off ethtool -C ethX rx-usecs 64 tx-usecs 64
笔记
根据处理器的类型和工作负载,可以调整 RX 和 TX 的合并参数以提高性能(或减少帧丢失)。
- 禁用防火墙。 sudo systemctl disable firewalld sudo systemctl stop firewalld
- 启用 IP 转发。sysctl -w net.ipv4.ip_forward=1
- 配置接收和发送套接字缓冲区大小的最大值。sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
笔记
根据工作负载或要求,这些值可以从默认值更改。
8.2 低延迟
- 关闭超线程(逻辑核心)。
- 确保网络设备位于 numa core 0 本地。
- 使用 tasket -c 0 将基准固定到核心 0。
- 使用 systemctl stop irqbalance 或 systemctl disable irqbalance 关闭 irqbalance
- 运行亲和性脚本以跨核心传播。尝试本地或全部。
- 关闭中断调节。ethtool -C ethX rx-usecs 0 tx-usecs 0 adapt-rx off adapt-tx off rxusecs- high 0
- 限制队列数量与本地套接字上的核心数量相等(本例中为 32 个)amp乐)。 ethtool -L ethX 组合 32
- 仅将中断固定到本地套接字(与 i40e 驱动程序源一起打包的脚本)。set_irq_affinity -X local ethX
- 使用已建立的基准,例如 netperf -t TCP_RR、netperf -t UDP_RR 或 NetPipe。netperf -t TCP_RR 或 netperf -t UDP_RR
- 将基准测试固定到本地 NUMA 节点中的单个核心。taskset -c
英特尔® 以太网 700 系列
Linux 性能调优指南
2024 年 XNUMX 月
文档编号:334019,修订版:1.2
文件/资源
![]() |
英特尔以太网 700 系列 Linux 性能调优 [pdf] 用户指南 334019,以太网 700 系列 Linux 性能调优,以太网 700 系列,Linux 性能调优,性能调优,调优 |