多核 CPU 使用率

Bar*_*ien 5 cpu-load multi-core cpu top windows-subsystem-for-linux

我正在使用适用于 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 报告的屏幕截图

基本上我的问题如下:

  • 这些不同的诊断是否相互一致?

  • 有人可以指出我给初学者的参考,清楚地解释了这些监控命令的使用,以及报告的数量究竟指的是什么?

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

非常感谢您,并为初学者的问题道歉

小智 0

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

在 WSL 中,顶部仅显示 Linux 进程,因此 WSL 使用总量的 200%/4=50%,但 Windows 将所有内容一起显示,因此它占用了另外 20%,从而获得了总 CPU 时间的 70%。“mpstat -P all”似乎正在获取 Windows 进程(可能是较低级别的硬件调用)并报告为总 CPU 时间的百分比,因此每个线程的最大值为 25%,但可能会在几个百分点内尽可能接近实际情况。我唯一不确定的是为什么 Windows 没有显示 2 个线程处于 100%。


MOH*_*ZAD 0

据我了解,Linux 的 Windows 子系统作为一个进程在 Windows 内部运行。Windows 操作系统在所有内核和逻辑处理器之间分配负载。其次,Windows保留了一些资源,WSL无法100%利用处理器。WSL 对处理器的访问权限仅限于 Windows 允许的范围。WSL 显示 100% 处理器使用率的原因是它正在利用 100% 可用的处理器资源。另一方面,Windows 可以真正利用 100% 的处理器,但事实并非如此。

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

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