dro*_*nus 14 linux cpu-usage top hyper-threading
如何获得启用多核超线程的 cpu 的真正用途?
例如,让我们考虑一个 2 核 CPU,表示 4 个虚拟核。
单线程工作负载现在将在 中显示为 100% top,因为虚拟核心中的一个核心已被完全使用。CPU 和top按预期工作,就像有 4 个真正的内核一样。
然而,对于两个线程,事情变得很糟糕:如果一切正常,它们就会平衡到两个真实内核,所以我们得到了 200% 的使用率:两次 100% 和两个空闲的虚拟内核,并且正在使用所有可用的 CPU 功率. 对我来说似乎没问题。
但是,如果两个线程在单个真实核心上运行,它们将显示为使用 100% 的两倍,即 200% 的虚拟核心使用率。但在实际情况下,这将是一个内核在两个线程上共享其功率,然后仅使用总 CPU 功率的一半。
所以显示的使用数字top不能用于衡量总 CPU 工作负载。
我也想知道超线程如何在一个真正的核心上平衡两个虚拟。如果两个线程占用不同的周期数,即使实际负载不同,虚拟内核是否会“适应”以便两者都显示 100% 负载?
Oracle 的 Martin Tegtmeier 去年撰写了一篇关于此的有趣博客文章:https ://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2
简短的回答;超线程确实干扰了 top 报告整体 CPU 利用率/CPU 空闲百分比的能力。
在最坏的情况下,以每核 100% 利用率运行 2 个线程的 2 核 4 虚拟核 CPU 可能几乎使 CPU 饱和。(取决于执行端口的使用情况;只有在 cpu 上使用完全不同计算资源的线程仍然可以运行,而不会影响当前线程的性能。)但是,在这种情况下,top 仍然会报告 50% 空闲。
小智 5
核心利用率与系统负载非常不同。核心利用率仅显示核心正在计算或等待指令的程度。它可以是 100%,对应于 CPU 正在计算的任何给定时间。
但负载是另一回事,负载通常被测量以确定是否有任何进程必须等待任何资源。如果进程不等待任何资源,您将看到一个非常高性能的系统。但有时您会看到系统缓慢但 CPU 利用率低。这通常意味着某些进程正在等待资源而不释放 CPU。对于这种情况,您不会看到高 CPU 利用率,但系统可能远远超出其容量。
在 Linux 系统中,平均负载是衡量系统整体性能的计算值。平均负载的值应该与并行计算资源、内核进行比较。因此,如果具有 4 个物理内核的系统的平均负载为 4 个或更多,我们可以有把握地说某些进程将等待资源。
CPU 利用率是 100% 还是 10% 并不重要。平均负载可以高达 200 或 300,在这些情况下系统几乎没有响应。
在正常运行条件下,服务器负载平均值不应长时间超过内核数。在我看来,短尖峰并不重要。您将在w输出中看到的 3 个数字是负载 av。1/5/15 分钟。
| 归档时间: |
|
| 查看次数: |
14156 次 |
| 最近记录: |