E810-CQDA1 E810-CQDA2 E810-2CQDA2 E810-XXVDA2 E810-XXVDA4 英特尔®以太网800系列 Linux性能调优指南(第二篇 续)

E810-CQDA1 E810-CQDA2 E810-2CQDA2 E810-XXVDA2 E810-XXVDA4 英特尔®以太网800系列 Linux性能调优指南(第二篇 续)

4.0性能故障处理

4.1 CPU利用率

在工作负载运行时检查每个核心的CPU利用率。

注意:与总体CPU利用率相比,每个核心的利用率与性能更相关,因为它提供了每个网络队列的CPU利用率。
如果只有几个线程运行网络流量,那么可能只使用了几个内核。但是,如果这些核心是100%,您的网络吞吐量可能受到CPU利用率和它的限制是时候:
•调整IRQ调节/环大小,详见5.6节。
•增加应用程序线程的数量,将CPU负载分散到更多的内核上。如果所有核心
如果您的应用程序以100%的速度运行,那么您的应用程序可能受到CPU限制而不是网络限制。
常用工具:
•top
1. 按1展开cpu列表,查看正在使用的cpu。
2. 注意利用率。
3. 注意哪些进程被列为最活跃的(列表顶部)。
•htop
可视化所有内核利用率的伟大工具。
•mpstat
下面的示例命令行在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
perf工具在查找可能导致高资源利用率的组件方面非常有用
在性能测试期间。它可以在工作负载期间运行,以生成可以给出的报告为进一步调查提供指导。
-在基准测试或工作负载期间开始记录:

perf record -a <benchmark command>

-根据记录的性能数据生成报告:

pref report

4.2 ice Counters

ice驱动程序为接口调试和监控提供了一长串计数器
ethtool -S ethX命令。在工作负载运行和/或运行时查看输出可能会有所帮助比较工作负载运行前后的计数器值。在调试性能问题时,比较这些计数器的输出通常会有所帮助在运行工作负载之后。
•想要获得完整的ice计数器:

ethtool -S ethX

•只看非零计数器:

watch -d ethtool -S ethX | egrep -v :\ 0 | column

需要注意的是:
•rx_drop意味着CPU服务缓冲区不够快。
•rx_dropped。Nic表示槽位/内存/系统中的资源限制。
在工作负载运行前后检查netstat -s。
netstat工具收集来自系统中所有网络设备的网络信息,因此结果可能受测试网络之外的其他网络的影响。输出netstat -s可以很好地指示Linux操作系统或内核中的性能问题。
参考操作系统调优指南,例如Red Hat Enterprise Linux Network Performance调优指南,了解更多关于一般操作系统调优的信息:

4.3 Intel统一驱动统计

英特尔还提供了一个新的框架,通过该框架,ethtool或类似工具收集的统计数据可以利用Intel以太网Linux驱动程序的通用命名方案。当使用ethtool读取信息时从以太网设备,如统计,驱动程序返回一个缓冲区,其中包含各种统计数据。这些统计信息没有标准的命名约定。两者之间存在许多差异各种英特尔以太网设备。由于这些原因和其他原因,一个通用的统计命名方案已创建。

在这里找到有关这些统计数据的更多信息:

https://sourceforge.net/p/e1000/wiki/UnifiedStats/

5.0调优ice Driver设置

5.1 IRQ Affinity

配置IRQ关联以确保硬件Tx/Rx队列的中断被正确地关联CPU内核会对性能产生巨大影响,特别是在多线程工作负载中。适当的当配置包含多个高速端口时,队列关联更加重要。英特尔有一个配置IRQ关联的实用程序,set_irq_affinity脚本,它包含在ice source包中。在不同的工作负载之间,绑定到本地cpu和所有内核的效率优势是不同的。

使用源包中的set_irq_affinity脚本(推荐):

•使用所有核心:

<path-to-ice-packge>/scripts/set_irq_affinity -X all ethX

•仅在本地NUMA套上使用内核:

<path-to-ice-packge>/scripts/set_irq_affinity -X local ethX

•您也可以选择一个范围的核心。避免使用cpu0,因为它运行定时器任务

<path-to-ice-packge>/scripts/set_irq_affinity -X 1-8,16-24 ethX

注意:关联脚本在以下情况下启用传输数据包控制(XPS)作为绑定过程的一部分指定了-X选项。当开启XPS功能时,建议关闭irqbalance,如使用XPS的内核平衡器可能会导致不可预测的性能。关联脚本当指定-X选项时禁用XPS。禁用XPS和启用对称队列对于在Tx和Rx流量达到时实现最佳性能的工作负载是有益的在同一队列对上提供服务。要了解更多细节,请参见章节5.3,“发送和接收”
队列对齐”

配置中irqbalance的效果取决于工作负载和平台配置。但是,当启用irqbalance时,它可能导致不可预测的性能测量,如内核可以将工作转移到不同的内核。

禁用用户空间IRQ均衡器以启用队列固定:

systemctl disable irqbalance

systemctl stop irqbalance

手动配置IRQ affinity:

•使用以下命令查找连接到每个节点的处理器:

numactl --hardware

lscpu

•查找每个处理器的位掩码:
假设节点0的核心数为0-11:[1,2,4,8,10,20,40,80,100,200,400,800]
•查找分配给被分配端口的IRQs;

grep ethX /proc/interrupts

并注意IRQ值。例如,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 affinity:

•显示所有内核的IRQ affinity:

<path-to-ice-package>/scripts/set_irq_affinity -s ethX

•仅显示本地NUMA插槽上的内核:

<path-to-ice-package>/scripts/set_irq_affinity -s local ethX

•您还可以选择一系列核心:

<path-to-ice-package>/scripts/set_irq_affinity -s 0-8,16-24 ethX

5.2 Tx/Rx队列

初始化时驱动程序为每个以太网端口启用的默认队列数等于平台中可用cpu的总数。这适用于许多平台和工作负载配置。然而,在具有高核数和/或高以太网端口密度的平台中,这是不可能的配置可能导致资源争用。因此,在某些情况下可能需要进行修改系统中每个端口的默认值。


在这些情况下,建议将每个端口的默认队列数减少到不超过适配器端口所在NUMA节点的可用cpu数量。在某些情况下,当尝试为了平衡高端口数实现上的资源,可能有必要减少这个数量甚至进一步。
•修改队列配置:
下面以设置端口为32个Tx/Rx队列为例:

ethtool -L ethX combined 32

示例输出:

ethtool -l ethX

Channel parameters for ethX:

Pre-set maximums:

RX: 96

TX: 96 Other: 1

Combined: 96

Current hardware settings:

RX: 0

TX: 0

Other: 1

Combined: 32

5.3发送和接收队列对齐

Tx/Rx队列对齐在某些配置(如多线程)中可能会有所帮助在工作负载或繁忙的轮询环境中,不可能将线程固定到CPU上。的set_xps_rxqs脚本设计用于根据Rx队列映射对齐Tx队列。这是由通过sysfs配置Rx队列映射到每个Tx队列。的选择过程中使用这个Rx队列映射数据路径中的Tx队列。
对齐Tx/Rx队列的性能优势因工作负载的不同而不同。

使用源包中的set_xps_rxqs脚本:

<path-to-ice-package>/scripts/set_xps_rxqs ethX

5.4发送均衡

800系列设备允许启用传输均衡特性,以改善传输队列一定条件下的公平。当启用该特性时,您应该体验到更一致的体验跨队列和/或pf和vf传输性能。

默认的Tx队列分配在最高层以8为一组进行分配,每个组分配8个VFsVSI层的父节点。中的每个节点在每个层上调度Tx个操作层。示例树与Tx平衡功能禁用(默认),使用单个E810端口80队列。
•根据每层分组,平均分配最小保证带宽。
•最大带宽取决于相邻线程的位置。

图1.默认Tx树

启用传输平衡功能后,Tx树架构被平展到允许多达512个分配给最高级别的队列和父节点中最多64个vf。这种变化不会减少设备支持的队列总数

启用Tx Balancing特性的示例树,使用单个E810端口,80个队列。
•在所有队列中平均分配最小保证带宽。
•最大带宽取决于相邻线程的位置。

图2. 启用Tx均衡

缺省情况下,NVM的发送均衡功能处于关闭状态。启用发送均衡特性为推荐用于存在高规模工作负载和传输不均匀的环境在线程或虚拟机组之间可以看到性能。并非所有配置和工作负载都看到相同的结果启用Tx Balancing的好处,因为该特性高度依赖于Tx队列的数量它们由默认的Tx树调度器、工作负载和Tx流量、HT开/关、VFs等映射出来等等。如果在您的环境中观察到不均匀的Tx带宽,建议启用

传输平衡特性,看看它是否有助于更均匀地分配Tx流量。要启用发送均衡特性,请使用以下方法之一持久地更改
设备设置:
•使用以太网端口配置工具(EPCT)启用tx_balancing选项。参考有关更多信息的EPCT README文件。
•启用传输平衡设备设置系统BIOS或UEFI HII。
•通过Linux devlink命令使能传输均衡(见下文)。当驱动程序加载时,它从NVM读取传输平衡设置并配置设备相应的行动。

注:

•EPCT、系统BIOS、HII或Linux devlink中传输均衡的用户选择为a
设备固件中的持久设置。
•选择的设置需要重启系统才能生效。
•此设置与物理接口(PF)相关。
•驱动程序、NVM和DDP包必须都支持此功能才能启用该特性。如果
安装的驱动或NVM版本过低,不支持Tx Balancing
特性,固件加载默认设置(禁用传输平衡)。

要求:
•内核与devlink参数支持
•800系列网卡
•E810 NVM v4.00及以上版本
•ice驱动1.9.11及以上版本

配置:
•通过devlink设置传输均衡功能:

devlink dev param set <pci/D:b:d.f>name txbalancing value <setting>cmode permanent

例句:

- < pci / D: b: D.f>为PF的PCI地址。
- <setting>为true,开启发送均衡;为false,关闭发送均衡。

•显示当前传输均衡设置:

devlink dev param show [ <pci/D:b:d.f>name txbalancing ]

查看设备的发送队列拓扑。

1. 明确dmesg命令:

dmesg- c

2. 使用PCI地址xx:xx.x获取Tx树特定的设备端口。使用ethtool -i查找PCIe
端口的总线详细信息。

echo get scheduling tree topology > /sys/kernel/debug/ice/0000:xx:xx.x/command

3. Pipe dmesg到output.txt:

Dmesg > output.txt

特定的输出取决于已在您的环境。请注意Node、Parent和num_children的值。使用默认值
配置num_children的最大分配是每个父节点8个。启用该功能后,上限是512。

grep Node output.tx

5.5中断控制

默认情况下,自适应中断调节是开启的,旨在提供一种平衡的方法低CPU利用率和高性能。而默认的自适应调节速率适用于在大多数情况下,对于某些工作负载,手动中断率可以显示改进的性能。
•关闭自适应中断调节:

ethtool -C ethX adaptive-rx off adaptive-tx off

•打开自适应中断调节(默认):

ethtool -C ethX adaptive-rx on adaptive-tx on

注意:当启用自适应时,每个Tx/Rx队列的ITR速率是动态的。它们是静态的当自适应关闭时,全局。有关静态调优ITR的更多详细信息,请参阅驱动程序README基于每个队列的值。

当禁用自适应中断调节时,必须指定接收和发送速率的值。取值范围为0 ~ 236(0=无限制)微秒,有效取值范围为4237 ~每秒25万次中断。一般调优的一个好起点是80毫秒,或~12,500个中断
每秒。
•将中断调节设置为80ms(每秒12500次中断)的固定中断率:

ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 80 tx-usecs 80

如果rx_dropped计数器在流量期间增加(使用ethtool -S ethX),您可能有一个太慢的CPU,适配器的环大小(ethtool -G)没有足够的缓冲区,或者中断率太低。如果如果CPU利用率没有达到最大值,可以通过降低ITR值来提高中断率。


这使用更多的CPU,但服务缓冲更快,并且需要更少的描述符(环大小,ethtool -G)。如果您的CPU利用率过高或达到100%,不建议增加中断率。在某些情况下,例如CPU负载受限,您可能希望将中断率降低到


增加Tx/Rx ms值,为其他应用程序提供更多的CPU时间。如果您需要最低的延迟性能和/或有足够的CPU用于网络处理时,您可以完全禁用中断调节,这使中断能够以最快的速度触发可能的。
•完全禁用中断审核:

ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 0 tx-usecs 0

注意:在禁用中断调节的情况下运行时,每个队列上的中断率可以为非常高。考虑使用rx-use -high参数来设置中断的上限率。以下命令禁用自适应中断调节,并允许一个最大值在指示接收或发送完成之前的5微秒。而不是结果在每秒多达200,000个中断的情况下,它将每秒的总中断限制为50,000个通过rx-usecs-high参数

# ethtool -C<ethx> adaptive-rx off adaptive-tx off rx-usecs-high 20 rx-usecs 5 tx-usecs 5

5.6环的尺寸

如果在ethtool -S ethX计数器(rx_dropped, rx_dropped.nic)中看到丢包,或者有丢包在多个队列活动的情况下,可能存在缓存压力,请尝试从默认值调整环大小价值。
•检查当前值:

ethtool -g ethX

如果怀疑缓冲区空间分配导致了当前中断率下的数据包丢失,那么您应该执行以下操作可能会尝试提高或降低值以检查是否有改进。然后,继续二分查找,直到

您将获得最佳性能。如果怀疑存在缓存压力(有许多队列处于活动状态),减少默认缓冲区可以帮助英特尔®数据直接I/O (Intel®DDIO)更高效地运行。英特尔建议每个队列尝试256或512个,意识到通过ethtool -C增加中断率可能是必要的,以避免增加rx_dropped率。
•将戒指大小设置为固定值:

ethtool -G ethX rx 256 tx 256

5.7流量控制

第2层流量控制可以显著影响TCP性能,并且在驱动程序中默认禁用。这是大多数工作负载的推荐设置。一个潜在的例外是非常繁忙的交通,其中突发持续时间不长,可能导致丢包。
•启用流量控制:

ethtool -A ethX off rx on tx on

•关闭流量控制。

ethtool -A ethX rx off tx off

注意:必须在有能力的链路伙伴上配置流控制才能成功启用流适配器上的控件。

注意:数据中心桥接(DCB)和优先流控制(PFC)是其他控制方法数据包速率和会影响性能。然而,这些都超出了本文的范围文档

5.8超大帧

当预期的流量环境由正在传输的大量数据块组成时,它可能是有利于启用巨型框架功能。启用巨型帧支持将MTU (Maximum Transmission Unit)设置为大于默认值1500的值。这允许在网络环境中以大包传输数据的设备。这个设置可能会改进吞吐量和降低大I/O工作负载的CPU利用率。但是,它可能会影响小数据包或对延迟敏感的工作负载。

注意:巨型帧或更大的MTU设置必须在您的网络中正确配置环境。
使用ifconfig命令增加MTU的大小。例如,输入如下,其中<ethX>为接口号:

ifconfig <ethX> mtu 9000 up

也可以使用ip命令如下所示:

ip link set mtu 9000 dev <ethX>
ip link set up dev <ethX>

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值