如何停止irqbalance宕机 服务

在现代计算机技术中大部分的系统都是拥有多个处理器的,多个处理器之间的连接并连接其他资源则需要通过系统拓扑来调节以产生影响

2 现代计算机技术的两种拓扑类型

SMP(对称多处理器)拓扑允许所有的处理器同时访问内存然而,由于内存访问权限的共享性和平等性固然会迫使所有的CPU和SMP系统序列化的内存访问权限局限性能加,目前这种情况是不被接受的因此,现在服务器系统都是NUMA(非一致性内存访问)机制

2 NUMA 拓扑(非一致性内存访问机制)

比起 SMP 拓扑,NUMA(非一致性内存访问)拓扑是近来才开发的在NUMA系统中,多个处理器物理分组至一个socket每个socket都由一个专用内存区,对该内存进行本地訪问的服务器系统称为一个节点


同一个节点上的服务器能够高速访问该节点的存储体,但访问其他节点的存储体速度就比较慢因此,訪问非本地存储体会造成性能的损失

3 NUMA 拓扑调节注意事项

考虑到性能损失,服务器执行应用程序时NUMA 拓扑结构系统中对性能敏感的应用程序应访问同一节点的内存,并且应尽可能地避免访问任何远程内存


因此,在调节 NUMA 拓扑结构系统中的应用程序性能时重要的是要考虑这┅应用程序的执行点以及最靠近此执行点的存储体。


在 NUMA 拓扑结构系统中/sys 文件系统包含处理器、内存及外围设备的连接信息。

其指令由util-linux 数據包提供包括CPU体系结构信息,如CPU数量线程数,内核数socket数量以及NUMA节点数等。


如果分析数据显示数据包由于 socket 队列排出率太慢而被弃置,有几种方法来解决由此产生的性能问题


减少队列填充速率可以通过筛选或弃置进入队列前的数据包,或是减少设备重量


增加应用程序的 socket 队列深度

如果分析数据显示,数据包由于 socket 队列排出率太慢而被弃置有几种方法来解决由此产生的性能问题


减少队列填充速率可以通過筛选或弃置进入队列前的数据包,或是减少设备重量

设备重量是指设备一次可以接收的数据包数量,设备重量由dev_weight参数控制此参数可鉯通过改变/proc/sys/net/core/dev_weight 文件的内容来做临时更改,或者是使用sysctl 来做永久更改


增加应用程序的 socket 队列深度往往是提高 socket 队列排出率最简单的方法但不可能昰一个长期的解决方法。


要增加队列深度就要增加 socket 接收缓冲区的大小可以做如下变化:


这一参数控制的是以字节为单位的 socket 接收缓冲区的朂大值。使用 getsockopt 系统调用来确

RSS(接收端调整)也叫做多队列接受,是通过一些基于硬件的接受队列来分配网络接受进程从而使得入站网络流量可以由多个CPU进行处理,RSS可以用来缓解接受中断进程中由单个CPU过载而出现的瓶颈并减少网络延迟。


要确定您的网络接口卡是否支持 RSS须查看多个中断请求队列是否在 /proc/interrupts 中有相关的接口。例如如果用户对 p1p1 接口有兴趣:

前的输出显示 NIC 驱动程序为 p1p1 接口创建了 6 个接收队列(p1p1-0 至 p1p1-5)。吔显示出每个队列处理的中断数量以及处理中断的 CPU在这种情况下,由于有 6 个默认队列这一特殊的 NIC 驱动程序就为每个 CPU 创建一个队列,这個系统一共有 6 个 CPU这是 NIC 驱动程序中很常见的模式。或者用户可以在网络驱动程序加载后查看 ls


例如如果用户对 PCI 地址为.0 的设备感兴趣,可以通过以下指令来列出该设备中断请求队列:



配置 RSS 时红帽推荐限制每一个物理 CPU 内核的队列数量。超线程在分析工具中通常代表独立的内核但是所有内核的配置队列,包括如超线程这样的逻辑内核尚未被证实对网络性能有益

启用时,基于每个队列的 CPU 进程数量RSS 在 CPU 间平等地汾配网络进程。但是用户可以使用


irqbalance宕机 后台程序可与 RSS 相结合,以减少跨节点内存及高速缓存行反弹的可能性这降低了处理网络数据包嘚延迟。

RPS(接收端包控制)与 RSS类似用于将数据包指派至特定的 CPU 进行处理。但是RPS 是在软件级别上执行的,这有助于防止单个网络接口卡嘚软件队列成为网络流量中的瓶颈


较之于基于硬件的 RSS ,RPS 有几个优点:

RPS 可以用于任何网络接口卡


易于添加软件过滤器至 RPS 来处理新的协议。


RPS 不会增加网络设备的硬件中断率但是会引起内处理器间的中断。



rps_cpus 文件的默认值为 0这会禁用 RPS,以便处理网络中断的 CPU 也能处理数据包


偠启用 RPS,配置适当的 rps_cpus 文件以及特定网络设备和接收队列中须处理数据包的 CPU


rps_cpus 文件使用以逗号隔开的 CPU 位图。因此要让 CPU 在一个接口为接收队列处理中断,请将它们在位图里的位置值设为 1例如,用 CPU 0、1、2 和 3 处理中断将 rps_cpus 的值设为
(1+2+4+8),或 f(十六进制的值为 15)


对于单一传输队列嘚网络设备,配置 RPS 以在同一内存区使用 CPU 可获得最佳性能在非 NUMA 的系统中,这意味着可以使用所有空闲的 CPU如果网络中断率极高,排除处理網络中断的 CPU 也可以提高性能


对于多队列的网络设备,配置 RPS 和 RSS 通常都不会有好处因为 RSS 配置是默认将 CPU 映射至每个接收队列。但是如果硬件队列比 CPU 少,RPS依然有用并且配置 RPS 是来在同一内存区使用 CPU。

RFS(接收端流控制) 扩展了RPS 的性能以增加CPU缓存命中率以此减少网络延迟,RPS仅基于队列长度RFS 使用 RPS 后端预测最合适的 CPU之后会根据应用程序处理数据的位置来转发数据包。这增加了 CPU 的缓存效率


RFS 是默认禁用的。要启用 RFS用户須编辑两个文件:

设置此文件至同时活跃连接数的最大预期值。对于中等服务器负载推荐值为 32768 。所有输入的值四舍五入至最接近的2的幂


从单个发送程序接收的数据不会发送至多个 CPU。如果从单个发送程序接收的数据多过单个 CPU 可以处理的数量须配置更大的帧数以减少中断數量,并以此减少 CPU 的处理工作量或是考虑 NIC 卸载选项来获得更快的 CPU。


考虑使用 numactl 或 taskset 与 RFS 相结合以将应用程序固定至特定的内核、 socket 或 NUMA 节点。这鈳以有助于防止数据处理紊乱

加速 RFS 是通过添加硬件协助来增速的。如同 RFS数据转发是基于应用程序处理数据包的位置。但不同于传统 RFS 的昰数据是直接发送至处理数据线程的本地 CPU:即运行应用程序的 CPU,或是对于在缓存层次结构中的 CPU 来说的一个本地 CPU



一旦满足了这些条件,隊列映射 CPU 就会基于传统 RFS 配置自动导出即队列映射 CPU 会基于由每个接收队列的驱动程序配置的 IRQ 关联而自动导出。从 <第 6.3.7 节 “配置 RFS”> 中来获取配置传统 RFS 的信息,红帽推荐在可以使用 RFS 以及网络接口卡支持硬件加速时使用加速 RFS


允许系统打开的端口范围,前面为下线后面为上线。默认是
注意: 此可用范围决定了最后timewait状态的链接数量:下面两个选项可有效降低 tw状态链接数量


是否启用timeout快速回收:注意: 开启此功能在nat环境下可能会出现严重问题因为TCP有一种行为,他可以缓冲每个链接最新的时间戳后续请求如果时间小于缓冲中的时间戳,即被视为无效並丢弃相应的请求报文Linux是否启用这种行为取决于tcp_timestamp 和 tcp_tw_recycle ,而前一个参数默认是启动的所以启用后面的参数就会激活此功能,




tcp报文时间错關闭可以避免序列号的卷绕 (防止绕一圈回来的问题)



为了打开对端链接,内核需要发送一个SYN并附带一个回应前面的一个SYN的ACK 这业绩所有嘚三次握手中的第二次,这个设置决定了内核放弃链接之前发送SYN+ACK 包的数量繁忙的服务器上建议设置为0或者1;


表示服务器主动发送TCP 链接的佽数
在内核中放弃建立连接之前发送SYN包的数量,繁忙的服务器上建议设置为0或者1


系统中最多有多少个TCP套接字不被关联到任何一个用户文件呴柄上如果超过这个数字,连接将即可被复位毛病发音出警告信息这个限制仅仅是为了防止简单的Dos,不能过分依赖人文减少这个值洳果需要修改,在确保有足够内存可能的前提下应该增大此值。


如果套接字由本端要求关闭这个参数决定了我他保持FIN_WAIT-2状态的时间,缺渻值是60秒

然而对端可能会出错或者意外宕机永远不会关闭链接,及时是一个轻量级的web也可能会有大量的四套接字而内存溢出的风险,fin-wait-2 嘚危险性比fin-wait-1 要小因为每个链接最多只能消耗1.5K内存,但是他们的生存期长一些



以 core 开头的主要用于定义非TCP 相关的缓冲单位是字节
定义内核鼡于所有类型的链接的最大接受缓冲大小





定义TCP 协议栈使用的内存空间,分别为最小值默认值和最大值


定义TCP 协议栈中用于接受缓冲的内存涳间,第一个是最小值即便当前主机内存空间吃紧,也得保证TCO协议栈至少有次大小的空能空间第二个值为默认值,他会覆盖net.core.rmem_Default 中为所有協议定义的接受缓冲的大小第三个值为最大值,既能用于TCP接受缓冲的最大内存空间


是一个命令行工具在处理器中分配硬件中断以提高系统性能,默认设置下再后台程序运行但只能通过 --oneshot 选项运行一次


以下参数可用于提高性能

CPU 进入节能模式之前,设定可空闲的 CPU 数量如果囿大于阀值数的 CPU 是大于一个标准的偏差,该差值低于平均软中断工作负载以及没有 CPU 是大于一个标准偏差,且该偏差高出平均并有多于┅个的 irq 分配给它们,一个 CPU 将处于节能模式在节能模式中,CPU 不是irqbalance宕机 的一部分所以它在有必要时才会被唤醒。


决定如何解决 irq 内核关联提礻有效值为 exact(总是应用 irq 关联提示)、subset (irq 是平衡的,但分配的对象是关联提示的子集)、或者 ignore(irq 完全被忽略)


通过设备路径、当作参数嘚irq号码以及 irqbalance宕机 预期的零退出代码,定义脚本位置以执行每个中断请求定义的脚本能指定零或多键值对来指导管理传递的 irq 中 irqbalance宕机。
有效徝为 true(从平衡中排除传递的 irq)或 false(该 irq 表现平衡)

允许用户重写传递的 irq 平衡度。默认设置下平衡度基于拥有 irq 设备的 PCI 设备种类。有效值为 none、package、cache、或 core 允许用户重写视作为本地传送 irq 的 NUMA 节点。如果本地节点的信息没有限定于 ACPI则设备被视作与所有节点距离相等。有效值为识别特萣 NUMA 节点的整数(从0开始)和 -1规定 irq 应被视作与所有节点距离相等。

将带有指定中断请求号码的中断添加至禁止中断的列表


Tuna 使您能够控制處理器和调度关联。此章节包含命令行界面但是也可使用有相同功能范围的图形界面。运行命令行 tuna 启动图形工具

Tuna 接受多种按顺序处理嘚命令行参数。下列命令将负载分配到四个 socket中



取用由 Tuna 控制的 CPU 逗号分隔列表。直到指定新列表前此列表均有效




用于连接 --show_threads。如果启用控制組显示控制组类型,该控制组处理显示带有 --show_threads 所属于的控制组类型



过滤显示,只显示受影响的实体





将选择的实体移至指定的 CPU 中。


当策畧是 OTHER、BATCH、或者 IDLE唯一有效优先级值为 0,它也是默认值




取用受 Tuna 影响的 IRQ 逗号分隔列表 。直到指定新列表之前此列表均有效使用 + 可将 IRQ 添加至列表,使用 - 可从列表中移除


将内核线程调度保存至指定文件。


取用受 Tuna 控制的 CPU socket逗号分隔列表该选项考虑了系统的拓扑结构,例如共享单┅处理器缓存且在同一个物理芯片上的核心。


取用受 Tuna 控制的线程逗号分隔列表直到指定新列表之前此列表均有效。使用 + 可将线程添加臸列表- 可从列表中移除。



更多帮助请参见选定的实体。


ethtool 工具允许管理员查看和编辑网络接口卡设置这有助于观察某些设备的统计信息,比如被设备丢弃的数据包的数量

ss 是一个命令行工具,显示 socket的统计信息允许管理员超时访问设备性能。默认设置下ss 列出打开的非監听且已建立联系的 TCP socket,但向管理员提供一些为筛选掉特定 socket数据的有用选项

Tuned 是一个调整的后台程序,在某种工作负载量下通过设置调整配置文件使操作系统有更好的性能表现
对其进行配置,使其对 CPU 和网络使用的变化做出响应调整设置以提高激活设备的性能,并减少在未噭活设备中的能耗


tuned-adm 是一个命令行工具,提供一些不同配置文件以提高一些特定用例性能它也提供一个评估系统和输出推荐的调整配置攵件的子命令(tuned-adm recommend)。在您系统安装时它也能设置默认配置文
件以便能用于返回默认配置文件。


自红帽企业版 Linux 7 起tuned-adm 有能力运行所有命令,這些命令是启用和禁用调整配置文件的一部分这允许您添加 tuned-adm 中不可用的环境特定检测。例如在选择应用何种调整配置文件之前检测系統是否是主数据库节点。


红帽企业版 Linux 7 在配置定义文件中提供 include 参数允许您将自己的 tuned-adm 配置文件建立在存在的配置文件基础上。


以下调整配置攵件是随 tuned-adm 一起提供的并由红帽企业版 Linux 7 支持。

服务器配置文件的重点在于提高吞吐量这是默认配置文件,并是为大多数系统推荐的


服務器配置文件的重点在于降低延迟。该配置文件是为延迟敏感的工作负载所推荐的其中工作负载会从 c- 状态调整和透明大页面增加的 TLB 高效性中获益。


服务器配置文件的重点在于降低网络延迟




虚拟主机是一个重点在于优化红帽企业版Linux 7虚拟主机的性能的配置文件。

perf 提供一些有鼡的指令此章节列出了其中一些指令。perf 的更多信息请参见《 红帽企业版 7 开发者指
南》 可在下列网站中查找 或者参见手册页。


此命令为瑺见性能事件提供整体数据包括执行步骤和消耗所用的时间周期。您可使用选项标志来收集事件数据而非默认测量事件。自红帽企业蝂 Linux 6.4 起根据一个或多个特定控制组(c组),可使用 perf stat 筛选监控


更多信息请参见手册页:


此命令将性能数据记录到随后可使用 perf report 分析的文件中。更多信息请参见手册页。


此命令从文件中读取性能数据并分析记录数据更多信息,请参见手册页


此命令列出特定机器上有效事件。这些事件因系统性能监控硬件和软件配置而异更多信息,请参见手册页


此命令执行与 top 工具相似的功能。它实时生成并显示性能计数器配置文件更多信息,请参见手册页


此命令执行与 strace 工具相似的功能。它监控特定线程或进程使用的系统调用以及该应用程序接收的所囿信号可获得其他的跟踪目标。请参见手册页以查看完整列表:

查看当前策略运行以下命令:

设置新策略,运行以下命令:

用以下配置文件的其中之一替代配置文件名
处理器不为节能而降低性能。这是默认值


处理器能容忍由潜在的显著节能所造成的微小性能下降。對于大多数服务器和桌面而言这是合理的节省


处理器接受潜在的显著性能下降,以便充分利用能效


默认设置下,turbostat 为整个系统显示计数器结果的摘要随后每隔五秒出现计数器结果,以下列标头:





cpu 执行完毕的指令间隔百分比


当 CPU 处于 c0 状态时,平均时钟速度


整个间隔进程Φ的平均时钟速度。



处理器分别在 pc3 或者 pc6 状态下的间隔百分比
使用 -i 选项指定计数器结果间的不同周期,例如:运行 turbostat -i 10 改为每10秒显示结果

numastat 由 numactl 軟件包提供,并以每个 NUMA 节点为基础为处理器和操作系统显示内存统计数据(例如分配时断时续)。

numastat 命令的默认跟踪类别如下所示:
成功汾配至该节点的页面数量


因预期节内存不足分配至该节点的页面数量。每个 numa_miss 事件在另一个节点上都有相应的


原本预期分配至此节点而妀为分配至其他节点的页面数量。numa_foreign 事件在另外节点上,有一个相应的 numa_miss 事件


成功分配至该节点、交叉存取策略页面数量。


由节点上进程成功汾配至该节点的页面数量


由其他节点的进程分配至该节点的页面数量。


提供以下任一选项会改变按兆字节内存计算的显示单元(约两个尛数位)且其他指定的 numastat 行为也会改变,描述如下:

水平浓缩信息的显示表这有助于含有大量 NUMA 节点的系统,在某种程度上列宽度和列内涳间不可预测使用该选项时,内存的数量四舍五入到最近的兆


根据单位节点,显示系统范围的内存使用信息与 /proc/meminfo 中的信息类似。



为指萣模式显示单位节点内存信息如果模式的值是由数字组成的,numastat 假定它是数字进程标识符否则,numastat 从进程命令行查找指定的模式
假定 -p 选項值后输入的命令行参数是附加模式,目的是将其过滤 附加模式扩展,而非缩减过滤器


将显示的数据按降序排列,以便将最大的内存消耗者(根据所有列)列在首位


您也可指定节点,这样表格将根据节点列分类使用该选项时,节点值必须马上采用 -s 选项具体如下:
鈈要在选项和其值之间使用空格符。


显示更多冗长的信息即多进程的进程信息将显示每个进程的细节信息。



从显示的信息中省略表中只為 0 值的行和列请注意为了便于显示,一些四舍五入后接近 0 的值不会从显示输出中被省略

Numactl 允许管理员使用指定的调度或内存放置策略来運行进程。Numactl 也能为共享的内存段或文件设置永久策略以及进程的处理器关联和内存关联。

Numactl 提供许多实用的选项此附录概述一部分选项,也为用户提供了一些使用建议但并不详细。

显示系统中的可用节点且包含节点间的相对距离的详细目录。


确保内存只由指定节点分配如果指定地点没有足够的可用内存,分配会失败


确保指定命令及其子进程只在指定的节点上执行。


确保指定的命令及其子进程只在指定的处理器上执行


指明内存应当始终从本地节点分配。


指定分配内存的优选节点如果内存不能从指定的节点分配,其他的节点将被鼡于回退

numad 是一个自动 NUMA 关联管理后台程序。为了动态提高 NUMA 资源分配和管理它在系统内监控

NUMA 的拓扑结构和资源使用。
注意启用 numad 时 其行为將替代默认的自动 NUMA 平衡的行为。

将 numad 作为执行表使用只需运行:

numad 运行的时候,其活动被记录在 /var/log/numad.log它会持续运行直到被以下命令终止:

终止 numad 鈈会移除它所做的提高 NUMA 关联的变更。如果系统使用有显著的变化再次运行 numad 能调整关联来提高新条件下的性能。


如需将 numad 管理限制为特定进程用下列选项来启动它:


该选项将指定的 pid 添加到显式的包含列表中。当指定的进程达到 numad 进程的显著门限值指定的进程才会被管理。


它將进程扫描的类型设置为 0这会将 numad 管理限制到显式包含的进程

它尝试基于当前系统的工作负载来动态调整系统。其活动记录在/var/log/numad.log

taskset 工具是由 util-linux 軟件包提供的。它允许管理员检索和设置正在运行的进程的处理器关联或通过
指定的处理器关联运行进程。
重要taskset 不保证本地内存分配洳果您需要本地内存分配的额外性能收益,红帽推荐使用 numactl来替代 taskset


设置正在运行的进程的 CPU 关联,运行下列命令:

使用处理器的逗号分隔列表或处理器的范围(例如1、3、5-7)替换 processors。使用欲重新配置的进程 的进程标识替换 pid
用指定的关联运行进程,运行下列命令:

用处理器的逗号分隔列表或处理器的范围替换 processors使用您欲运行的应用程序的命令、选项和参数替换 application。

我要回帖

更多关于 irqbalance宕机 的文章

 

随机推荐