'htop'不能显示正确的CPU%,但是'top'可以显示


12

mencoder以threads = 4 运行时(在四核CPU上)。我注意到,htop它并没有显示其真正的 CPU使用率top

看来htop只报告一个内核。这是htop的错误/局限性吗?这里发生了什么?

有没有其他条目的mencoder中露面pshtoptop。我认为100%意味着1核已用完,但是即使这样对我来说也很奇怪。其他核心呢?

更新:添加了“系统监视器”输出

                  PID   %CPU   COMMAND                    
           "top"  1869   220   mencoder                 
          "htop"  1869    95   mencoder -noodml /media/...  
"System Monitor"  1869   220   mencoder

您为htop使用什么标志?
2010

sep332 ...我只是运行“ htop” ...所以无论默认情况如何。
Peter.O 2010年

答对了!sep332 ..从中做出答案,我将其标记为已解决。.您让我查看了我的默认设置...。“ H”是切换至“隐藏用户线程”的切换键。阅读信息帮助”,但有时正确的方向提示会有所帮助。
Peter.O 2010年

@ Peter.O:不小心投票了(鼠标触摸板!)。如果您修改自己的信息,我会取消。
SabreWolfy 2012年

Answers:


24

正如您自己说的那样,您可以点击H以显示用户线程。

只是以供将来参考(和乐趣),让我们计算的CPU利用率!

一点背景:

在现代操作系统中,有一个调度程序。它旨在确保所有进程及其线程都获得公平的计算时间份额。我不会安排太多时间(这确实很复杂)。但是最后有一个叫做运行队列的东西。在这里,所有进程的所有指令都将排队等待其执行。

任何进程都会将其“任务”放在运行队列中,一旦处理器准备就绪,它将弹出并执行它们。例如,当程序进入睡眠状态时,它将自己从运行队列中删除,并在准备再次运行时返回到“行尾”。

在这个队列排序与流程做优先级(也称为‘nice值’ -即一个过程是很好的关于系统资源)。

队列的长度决定了系统的负载。例如,负载为2.5意味着CPU可以实时处理的每个指令有2.5条指令。

顺便说一下,在Linux上,此负载的计算间隔为10ms(默认情况下)。

现在来看CPU使用率的百分比值:

假设您有两个时钟,一个被称为时钟,t它代表实时时钟。它每秒测量一秒钟。我们打电话给另一个时钟c。它仅在有处理要执行时运行。这意味着,只有当进程计算出某些内容时,时钟才会运行。这也称为CPU时间。系统上的每个进程都具有其中之一。

现在可以为单个进程计算处理器利用率:

U = c / t = 0.5s / 1s = 0.5

或对于所有过程:

替代文字

在多核计算机上,这当然可以得到3.9的值,因为如果使用得当,CPU每秒可以计算出四秒钟的计算时间。

维基百科提供了以下示例:

在6-CPU UNIX计算机上运行的软件应用程序会创建三个UNIX进程来满足用户需求。这三个进程中的每一个都会创建两个线程。软件应用程序的工作均匀地分布在为该应用程序创建的6个独立的执行线程上。如果不涉及等待资源,则预计总CPU时间将是实际经过时间的六倍。

这是一个执行此操作的小python代码段

>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %

在理想情况下,您可以由此推断系统负载为100-66.93 = 33,1%。(但实际上,由于诸如I / O等待,调度效率低下之类的复杂事情,这是错误的)

负载相反,这些计算将始终得出0到处理器数量之间的值,即0到1或0到100%之间的值。现在无法区分运行100%cpu的三个任务的计算机和运行100万个任务的100万个任务的计算机。例如,如果您试图平衡多台计算机上的多个进程,则CPU利用率几乎是无用的。负载就是您想要的。

现在实际上,有多个处理时钟。例如,有一个等待I / O。因此,您还可以计算I / O资源利用率。

对于原始问题,这可能没有帮助,但我希望它很有趣。:)


我真的应该已经包括不确定性值,因为使用这种简单的方法,计算将可能是关闭的±1%,但我不希望大家孔多。
Stefano Palazzo

感谢您的教训。我知道大多数,但是有些事情比我学到的要具体。
NightwishFan 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.