当我只处理一个进程时,为什么两个 CPU 可以工作?
Why do two CPUs work when I am only working with one process?
我正在 运行 编写一个类似于
的脚本
def test0():
start = time()
for i in range(int(1e8)):
i += 1
print(time() - start)
当我 运行 在我的机器上使用 CPU 时,我使用 Ubuntu 20.04 系统监视器得到以下 CPU 使用跟踪。
在图像中你可以看到我 运行 两个实验相隔一段时间。但在每个实验中,CPU 中有 2 个的 activity 达到峰值。为什么?
这对我来说似乎很正常。 运行 您的 python 代码的过程至少在默认情况下没有固定到特定的核心。这意味着进程可以在不同的核心之间切换,这就是本例中发生的情况。这些尖峰不是同时发生的,这表明该过程已从一个核心切换到另一个核心。
在 Linux 上,您可以使用
观察这一点
watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p 172810
其中 172810
是 python 进程的 PID(例如,您可以从 top
的输出中获得)
如果要将进程固定到特定核心,可以在代码中使用 psutils
。
import psutil
p = psutil.Process()
p.cpu_affinity([0]) # pinning the process to cpu 0
现在,您应该只看到一个核心尖峰。 (但如果你没有充分的理由,请避免这样做)。
我正在 运行 编写一个类似于
的脚本def test0():
start = time()
for i in range(int(1e8)):
i += 1
print(time() - start)
当我 运行 在我的机器上使用 CPU 时,我使用 Ubuntu 20.04 系统监视器得到以下 CPU 使用跟踪。
在图像中你可以看到我 运行 两个实验相隔一段时间。但在每个实验中,CPU 中有 2 个的 activity 达到峰值。为什么?
这对我来说似乎很正常。 运行 您的 python 代码的过程至少在默认情况下没有固定到特定的核心。这意味着进程可以在不同的核心之间切换,这就是本例中发生的情况。这些尖峰不是同时发生的,这表明该过程已从一个核心切换到另一个核心。
在 Linux 上,您可以使用
观察这一点watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p 172810
其中 172810
是 python 进程的 PID(例如,您可以从 top
的输出中获得)
如果要将进程固定到特定核心,可以在代码中使用 psutils
。
import psutil
p = psutil.Process()
p.cpu_affinity([0]) # pinning the process to cpu 0
现在,您应该只看到一个核心尖峰。 (但如果你没有充分的理由,请避免这样做)。