了解 Cumulus Linux 上的 CPU 使用率

问题

我的 Cumulus Linux 交换机处于空闲状态,只有几个端口处于活动状态,没有路由配置,没有流量。当查看 top 的输出时,switchd 占用了 15% 到 25% 的 CPU。当我的网络负载流量时,我应该担心路由或交换性能吗?

背景

在您开始了解 CPU 使用率之前,您需要了解一些关于路由和交换性能的概念。

“性能”一词用于许多不同类型的测量,包括

最大流量速率(数据平面)

  • 交换机或路由器上两个端口之间最大流量速率(Mbps 或 Gbps)。
  • 交换机或路由器上所有端口同时进出的最大聚合流量速率。

路由和交换表大小(控制平面)

  • 您可以存储在路由表和 3 层硬件交换表中的最大 3 层子网前缀数量。
  • 您可以存储在交换机硬件表中的最大 2 层 MAC 条目数量。

压力下的稳定性(控制和数据平面)

  • 当大量稳态流量正在流动(数据平面)并且路由变得不稳定(控制平面)时,交换机/路由器的性能以及它收敛回稳态的速度。

重要的是要理解控制平面与数据平面的分离。数据平面是数据包通过系统进行交换的地方。在所有现代路由器/交换机中,这都发生在硬件中,通过交换 ASIC。几乎所有现代交换机都可以在基本上线速的情况下交换数据包,并且大多数可以在所有端口上同时以最大速率进行交换。

因此,当您查看 CPU 统计信息时,您正在查看交换机如何处理控制平面活动,而不是数据平面交换。

对于控制平面,如上所述,主要关注的是路由和交换表大小以及压力下的稳定性。

交换 ASIC 中的内存量限制了路由和交换表大小。

压力下的稳定性:交换机能够很好地处理的网络动荡量在很大程度上取决于您的特定网络设计,而不是其他任何因素。可靠的网络设计和选择与您的要求相匹配的路由协议,可以减少网络事件期间所需的协议处理量,并提高网络的稳定性。同一吞吐量类别的所有现代交换机都使用性能类别基本相同的 CPU。此外,Cumulus Linux 使用控制平面策略和基于 QoS 的缓冲来保护 CPU,并帮助确保在网络不稳定时处理关键控制平面流量。

switchd 在做什么?

switchd 的主要任务是监视 2 层和 3 层路由更改,在需要时更新路由/交换表,然后更新交换 ASIC 的任何更改。它还更新来自 ASIC 上存储的数据的交换计数器,并进行错误检查。因此,它花费空闲时间进行内务处理活动。

Linux CPU 使用率基础知识

CPU 测量是一门不精确的科学,尤其是在低 CPU 使用率下。基本上,它是对完成的工作量除以时间间隔的测量,然后转换为百分比。Web 上有几个页面描述了如何进行此计算。

Linux 操作系统轮询所有活动进程。当每个进程唤醒时,它会查看是否有工作要做。如果有,它基本上会在一段时间内占用 CPU 来处理所有工作。如果它有很多工作要做,CPU 基本上会以 100% 的速度运行,直到工作完成。如果一个进程在 top 中显示为 20% 的使用率,则意味着它在大约 1/5 的时间测量间隔内以大约 100% 的速度运行。您可以将其中一些工作归因于与唤醒/睡眠处理相关的开销。switchd 必须定期唤醒并运行其维护。

15% 到 25% 的 CPU 是 switchd 在“什么都没发生”时的基本开销。如果出现工作,则 CPU 使用率会在短时间内增加以处理该工作。您需要记住的主要事情是 switchd 可以扩展到大量更改。100% 的负载远大于 20% 负载的空闲状态的 5 倍。

多核 CPU

如果您正在查看 top 以监视 CPU,您通常会看到每个 CPU 的统计信息,因此理论上您只需要在总活动开始接近 200%(或顶部的负载平均值 2.0)时才需要担心。switchd 使用率 20% 是仅在一个 CPU 上使用的百分比的测量值,而不是两个 CPU 的平均值。

如果您在观看 top 时按下 1 键,它会切换 top 显示以在输出上显示两个 CPU。在空闲路由器中,您可以看到只有一个 CPU 获得任何明显的活动。

注意事项

如果 CPU 跳升到 50% 以上的某个量,但在几秒钟内恢复正常,则您无需担心。这只是表明出现了一些工作,并且该进程花费时间来处理该工作。

但是,如果 CPU 长时间高温运行(稳态),则表明网络中某些东西正在变化或不稳定,或者存在大量控制平面流量的其他原因。此时,请查找那些接收最多活动的进程,并尝试确定哪些网络事件正在创建该活动并修复根本原因,或相应地调整您的网络配置。

Cumulus Linux 使用 systemd 来监控系统健康状况,包括高 CPU。当 CPU 使用率在一段时间内达到临界水平时,systemd 会提醒您此情况。