如何在具有虚拟核心的系统中加载一个物理 CPU?

如何在具有虚拟核心的系统中加载一个物理 CPU?

我有一台 AMD 处理器,有 4 个物理核心,并且启用了 SMT。由于启用了后者,我在 Linux 机器上看到了 8 个虚拟核心。

例如,stress命令可以生成许多在 sqrt() 上旋转的 worker。如果我stress使用-c 1选项运行,使用mpstat我会看到一个虚拟核心使用率为 100%。因此,根据我的理解,一个虚拟核心已完全加载,这基本上意味着一个物理核心已完全加载。我理解得对吗?

有没有办法确定一个物理 CPU 的负载?我想看看 Linux 在指标中如何显示它。

PS. 我想了解如何监控具有虚拟核心的系统上的 CPU 负载,并且我不确定我的方法是否正确,但目前我还没有其他想法。

答案1

很少有单线程可以充分将所有资源加载到 CPU 上。这就是 SMT 存在的原因,通过超额订阅物理核心上的逻辑处理器来提高利用率。但是,SMT 线程比核心弱。

保守的做法是根据核心而不是线程来规划容量。这样,任务可以最大限度地减少对处理器资源的争用。

观察应用程序的性能指标,即以用户体验为中心的指标,如用户响应时间或作业吞吐量。当这些指标开始下降时,查看平均负载或 CPU 繁忙等性能计数器。以及所有其他子系统,如内存、存储和文件系统、网络等。寻找瓶颈和症状。Brendan Gregg 的 Linux 性能页面是分析性能的综合方法的良好参考。

Linux 是 SMP(和 NUMA)感知的,调度程序将尽可能避免昂贵的核心和插槽转换。并首先为每个核心加载一个任务。使用 验证系统是否具有超过 1 个“每个核心的线程” lscpu。启动几个 CPU 密集型作业。每个 CPU 监控工具(如) mpstat -P ALL 5将显示一些 CPU 已加载,而另一些未加载的模式。

相关内容