多核 CPU 使用率

多核 CPU 使用率

我正在使用适用于 Linux 的 Windows 子系统 (WSL),但我对 Linux 的功能还不熟悉。最近,我一直想更好地了解进程的 CPU 使用情况,但我越来越困惑。我的电脑有 2 个核心和 4 个逻辑核心。

在我想讨论的 CPU 使用率示例中,我从 2 个终端启动了来自 DFT 代码(物理内容)的 2 个独立串行计算。我在 Windows 系统中打开了其他较小的进程(互联网选项卡、Thunderbird...)。

如果我从 Windows 的任务管理器检查 CPU 使用情况,它会告诉我我正在使用约 70% 的 CPU,这似乎均匀分布在 4 个逻辑处理器上。

当我top在 Linux 上使用命令时,它显示两个“pw.x”进程(我指的计算)每个进程使用大约 100% 的 CPU(!)。我不明白那些“100%”值指的是什么;100% 什么?我以为是显示的所有核心的平均值。我的电脑仍然运行非常顺畅,所以 CPU 单元不可能全部被 DFT 代码用完

如果我使用 查找mpstat -P ALL,还会得到其他结果:它告诉我 4 个处理器中的每一个都使用了约 20%-30%... 这与 Windows 诊断如何一致? 或者与 top 命令一致?

参见下面的截图以了解摘要(抱歉,Windows 上的语言是法语):

有冲突的(?)CPU 报告的屏幕截图

基本上我的问题如下:

  • 这些不同的诊断是否彼此一致?

  • 有人可以为我指出一个初学者的参考资料,清楚地解释这些监控命令的用途,以及报告的数量到底指的是什么?

  • 有没有命令可以让我知道哪个核心在做什么?我正在运行串行计算(非并行),我的理解是每个计算都在一个核心上进行处理,但我可能错了。如果是这样,我想知道每个计算都用到哪个核心,以及它使用了多少

提前非常感谢你,对于初学者的问题深表歉意

答案1

我相信 Top 列出了每个线程(逻辑核心)的百分比,因此在您的计算机上,您最多可以有 4 个进程,每个进程都列为 100% CPU。除非您编写一个程序使其处于空闲状态并等待硬件中断,否则您运行的任何程序只要运行就会占用其正在运行的线程的 100%。您运行的进程只会在单个线程上,除非您明确将它们编程为多线程,尽管您可能会在不知情的情况下调用多线程函数(某些 FFT 算法是多线程的)。

在 WSL 中,top 仅显示 Linux 进程,因此 WSL 使用了总进程的 200%/4=50%,但 Windows 将所有进程都显示在一起,因此它占用了另外 20%,占总 CPU 时间的 70%。 “mpstat -P all” 似乎正在处理 Windows 进程(也许它是一个较低级别的硬件调用)并报告占总 CPU 时间的百分比,因此每个线程的最大值为 25%,但实际值可能在百分之几以内。 我唯一不确定的是为什么 Windows 没有显示 2 个线程固定在 100%。

答案2

据我所知,Windows Subsystem for Linux 以进程的形式在 Windows 内部运行。Windows 操作系统正在将负载分配给所有核心和逻辑处理器。其次,Windows 保留了一些资源,而 WSL 无法 100% 使用处理器。WSL 只能在 Windows 允许的范围内访问有限的处理器。WSL 显示 100% 处理器使用率的原因是它正在使用可用的 100% 处理器资源。另一方面,Windows 确实可以利用 100% 的处理器,但事实并非如此。

如何在 Windows 中找出哪个进程正在使用哪个处理器核心:

  1. 打开任务管理器。
  2. 在“进程”选项卡中 > 右键单击​​任何进程并选择“详细信息”。进程线程将在“详细信息”选项卡中突出显示。
  3. 右键单击线程,然后单击“设置关联性”。弹出框将显示此特定线程正在使用的核心数。您还可以通过选中或取消选中复选框来增加或减少此线程允许的核心数。

相关内容