'htop'은 올바른 CPU %를 표시하지 않지만 'top'은


12

mencoderthreads = 4 (쿼드 코어 CPU에서)로 실행하는 동안 실제 CPU 사용량을 htop보여주지는 않지만 알아 냈습니다 . top

htop 은 하나의 코어 에만보고하는 것 같습니다 . 이것이 htop 의 버그 / 제한 입니까? 무슨 일이야?

에 대한 다른 항목이 없습니다 mencoder가 에 표시 ps하거나 htop또는 top. 100 % 는 1 개의 코어가 최대가된다는 것을 의미 한다고 생각 하지만, 이것조차 나에게는 이상해 보입니다. 다른 코어는 어떻습니까?

업데이트 : "시스템 모니터"출력 추가

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

Htop에 어떤 플래그를 사용하고 있습니까?
sep332

sep332 ... 방금 "htop"을 실행합니다. 따라서 기본값이 무엇이든 관계가 없습니다.
Peter.O

빙고! sep332 .. 그것으로 대답하고 그것을 해결하겠다고 표시하겠습니다 .. 당신은 저의 기본값을 보았습니다 .... "H"는 "사용자 스레드 숨기기" 의 토글 키입니다 ... 정보 도움말을 읽으십시오 ", 그러나 때때로 올바른 directon의 편리한 힌트가 더 도움이됩니다.
Peter.O

@ Peter.O : 실수로 다운 보트 (마우스 터치 패드!). 게시물을 수정하면 취소하겠습니다.
SabreWolfy 2016 년

답변:


24

당신이 말했듯이, H사용자 스레드를 보여주기 위해 칠 수 있습니다 .

다만 향후의 참조를 위해 (그리고 재미)의 계산 CPU 사용률을하자!

약간의 배경 :

최신 운영 체제에는 스케줄러가 있습니다. 모든 프로세스와 해당 스레드가 컴퓨팅 시간을 공평하게 공유하는 것을 목표로합니다. 나는 너무 많은 일정에 들어 가지 않을 것입니다 (정말 복잡합니다). 그러나 결국에는 실행 큐라 는 것이 있습니다. 이것은 모든 프로세스의 모든 명령이 차례가 실행될 때까지 대기하는 곳입니다.

모든 프로세스는 실행 대기열에 "태스크"를두고 프로세서가 준비되면 프로세스를 시작하여 실행합니다. 예를 들어 프로그램이 휴면 상태가되면 실행 대기열에서 자신을 제거하고 다시 실행할 준비가되면 "줄 끝"으로 돌아갑니다.

이 큐에 정렬하면 공정 '과 관련이있다 우선 순위 (또한 "좋은 값"이라고 - 즉 프로세스가 좋은 시스템 리소스에 대한).

큐 길이에 따라 시스템 로드 가 결정 됩니다. 예를 들어 2.5의로드는 CPU가 실시간으로 처리 할 수있는 모든 명령에 대해 2.5 개의 명령이 있음을 의미합니다 .

Linux에서는이로드가 10ms 간격 (기본적으로)으로 계산됩니다.

이제 CPU 사용률의 백분율 값으로 :

두 개의 시계가 있다고 가정합니다. 하나는 호출 t되고 실시간 을 나타냅니다 . 매 초마다 1 초를 측정합니다. 우리가 부르는 다른 시계 c. 처리가있는 경우에만 실행됩니다. 즉, 프로세스가 무언가를 계산할 때만 클럭이 실행됩니다. 이것을 CPU 시간이라고도합니다. 시스템의 모든 프로세스는 그 중 하나를 '가져 왔습니다'.

이제 단일 프로세스에 대한 프로세서 사용률을 계산할 수 있습니다.

U = c / t = 0.5 초 / 1 초 = 0.5

또는 모든 프로세스에 대해 :

대체 텍스트

멀티 코어 머신에서는 CPU가 완벽하게 활용되면 초당 4 초 분량의 계산을 계산할 수 있기 때문에 물론 3.9의 값이 될 수 있습니다.

Wikipedia는 다음 예제를 제공합니다.

6-CPU UNIX 시스템에서 실행되는 소프트웨어 응용 프로그램은 사용자 요구 사항을 충족시키기 위해 세 가지 UNIX 프로세스를 만듭니다. 이 세 가지 프로세스는 각각 두 개의 스레드를 만듭니다. 소프트웨어 응용 프로그램 작업은 응용 프로그램에 대해 생성 된 6 개의 독립적 인 실행 스레드에 균등하게 분배됩니다. 리소스 대기 시간이 없으면 총 CPU 시간은 실시간으로 6 배가됩니다.

이 작업을 수행하는 작은 파이썬 스 니펫이 있습니다.

>>> 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 대기, 비 효율성 스케줄링 등과 같은 복잡한 문제로 인해 잘못된 것입니다)

load 와 달리 , 이러한 계산은 항상 0과 프로세서 수 사이의 값, 즉 0과 1 또는 0과 100 % 사이의 값이됩니다. 이제 100 % CPU를 사용하는 3 가지 작업을 실행하는 시스템과 100 만 작업을 수행하는 작업을 100 만 CPU로 수행하는 시스템을 구분할 수있는 방법이 없습니다. 예를 들어 많은 컴퓨터에서 많은 프로세스의 균형을 유지하려는 경우 CPU 사용률이 쓸모가 없습니다. 로드는 당신이 원하는 것입니다.

실제로 실제로는 처리 시간 시계 중 하나 이상이 있습니다. 예를 들어 I / O를 기다리는 것이 하나 있습니다. 따라서 I / O 리소스 사용률을 계산할 수도 있습니다.

원래 질문에 대해서는 도움이되지 않았지만 흥미 롭기를 바랍니다. :)


이 간단한 방법을 사용하면 아마도 ± 1 %의 계산이 해제 될 것이기 때문에 불확실성 값을 포함해야했지만 모든 사람을 너무 많이 낳고 싶지는 않았습니다 .
Stefano Palazzo

수업 감사합니다. 나는 그 대부분을 알고 있었지만 몇 가지가 내가 배운 것보다 더 구체적이었습니다.
NightwishFan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.