我想知道任务管理器如何计算虚拟化环境中的 CPU 利用率。我能想到两种方法:
计算已使用的循环次数,然后除以可用循环次数,或者
计算使用的循环次数,然后除以应该已在一段时间内可用。
在非虚拟化环境中,这些会导致相同的答案,但在使用率很高的虚拟环境中,我可以看到它们会有所不同。 (我暗自怀疑任务管理器正在使用第二种方法,这意味着我无法真正了解我的 CPU 利用率。)
答案1
实际上都不是。任务管理器向内核请求这些统计数据。内核通过测量 CPU 空闲和再次有工作要做之间的时间来计算空闲时间。CPU 利用率是 100% 减去空闲百分比。
在虚拟机中,由于某种原因虚拟处理器未被调度,一些 CPU 时间会消失。(可能是由于接触模拟硬件而导致“虚拟机退出”,也可能是另一个虚拟机需要 CPU 时间,等等。)当时间这样消失时,对于虚拟机来说,它看起来不像是空闲时间,而是忙碌时间。
因此,总而言之,任务管理器将倾向于显示虚拟机使用的 CPU 时间量与虚拟机管理程序授予虚拟机的总时间份额的比较。这或多或少是,但不完全是问题中的 #1。