htop
명령이 각 CPU 코어와 프로세스의 사용률을 별도로 보고하는 것을 확인했습니다 .
우리는 CPU에서 한 번에 하나의 프로세스만 실행할 수 있다는 것을 알고 있습니다. 프로세스가 CPU의 특정 "비율"을 차지하는 것이 어떻게 가능합니까?
이것이 그것과 관련이 있습니까?명령 파이프라인?
답변1
상단에는 시간 경과에 따른 사용량이 표시됩니다(기본적으로 약 3초). 기본적으로 해당 간격 동안 특정 프로세스 ID가 사용하는 CPU 시간의 비율을 알려줍니다. 이 비율은 100%를 초과할 수 있습니다. 듀얼 코어 시스템에서 두 개의 스레드를 실행하고 두 코어를 모두 사용 중인 프로세스가 있는 경우 해당 프로세스 번호에 대한 %CPU 열에 약 195%가 표시됩니다.
매뉴얼 페이지에 명시된 대로 더 자세한 내용을 추가하려면 다음을 수행하십시오.
k: %CPU - CPU 사용량 마지막 화면 표시 이후 이 작업이 사용한 CPU 시간의 점유율 총 CPU 시간의 백분율로 표시되는 업데이트입니다. 진정한 SMP에서는 환경에서 "Irix Mode"가 꺼지면 top은 "Solaris"에서 실행됩니다. 모드', 여기서 작업의 CPU 사용량은 총 사용량으로 나뉩니다. CPU 수. "I"를 사용하여 "Irix/Solaris" 모드를 대화식으로 전환할 수 있습니다. 주문하다. ... -d: 지연 간격은 다음과 같습니다. -d ss.tt(초.십분의 일) 화면 업데이트와 재정의 사이의 지연을 지정합니다. 개인 프로필의 응답 값 또는 기본값을 시작합니다. 나중에 "d" 또는 "s"를 사용하여 변경할 수 있습니다. 대화형 명령. ... 전역 기본값 'A' - 대체 디스플레이 끄기(전체 화면) * 'd' - 지연 시간 3.0초 'I' - Irix 모드 켜짐('solaris' smp 아님) * 'p' - PID 모니터링 꺼짐 * 's' - 안전 모드 꺼짐(안전하지 않음) 'B' – 굵게 비활성화됨
따라서 %CPU 열은 마지막 화면 업데이트 이후 컴퓨터의 총 CPU 시간에 대한 백분율입니다. 명령줄을 통해 또는 대화식으로 화면 업데이트 간격을 변경할 수 있지만 기본값은 3초입니다. Irix 모드는 기본적으로 활성화되어 있으며 %CPU는 다중 프로세서 시스템에서 100%를 초과할 수 있지만 Irix 모드는 코어 수에 따라 백분율이 축소되도록 비활성화할 수 있습니다.
답변2
짧은 답변
- Linux 커널 통계 사용지피스(CPU 시간 단위)는
/proc/<PID>/stat
단일 프로세스가 시작된 이후 얼마나 많은 jiffies를 사용했는지 알려줍니다. htop
jiffies 합계(CPU 스레드 수로 나눈)의 두 스냅샷을 비교합니다. 이 두 시점 사이의 간격은-d --delay=DELAY
10분의 1초 단위로 구성 가능합니다. 예를 들어1s
업데이트 간격(기본값은1.5s
)입니다-d 15
.
htop -d 10
100%
1.5
이는 관찰된 기간(예: 초) 동안 단일 프로세스가 항상 1개의 CPU 스레드를 사용한다는 것을 의미합니다. 이 값은 장기간에 걸쳐 대표성이 없을 수 있습니다.- +/ 키를 사용하여 -업데이트 간격을 수정할 수 있습니다.
더 긴 설명
가장 좋은 소스는소스 코드:) (Linux 조회 LinuxProcessList_scanCPUTime
기능용).
htop
읽기는PROCSTATFILE
에 저장된 전체 시스템 통계를 가리키며/proc/stat
, 이를 직접 확인할 수 있습니다.
$ cat /proc/stat
각 프로세스의 값은 다음을 참조하세요.
/proc/<PID>/stat
- 첫 번째 행에는 총 CPU 사용량이 표시되고 열에는 다음 값이 표시됩니다.
usertime, nicetime, systemtime, idletime, ioWait, irq, softIrq, steal, guest, guestnice
- 다음 줄은 각 CPU 코어(스레드)에 대해 동일한 값을 보여줍니다.
- 총 시간은 다음과 같이 계산됩니다.
totaltime = usertime + nicetime + systemalltime + idlealltime + steal + virtalltime
totaltime
CPU 수($ nproc
Linux의 값)로 나눕니다.
double period = (double)this->cpus[0].totalPeriod / cpus;
마지막으로 LinuxProcessList_recurseProcTree
백분율은 두 타임스탬프 간의 사용량으로 계산됩니다.
percent_cpu = (period < 1e-6) ? 0.0f : ((lp->utime + lp->stime - lasttimes) / period * 100.0);
utime
사용자 코드가 소비한 CPU 시간(클럭 주기로 측정)stime
클록 주기로 측정된 커널 코드에서 소비한 CPU 시간lasttimes
이전 "시간"lp->utime + lp->stime
(클럭 주기) 입니다.
- 마지막으로 이 계산에 사용되는 시간 단위는 jiffies에 따라 다릅니다.
man 7 time
자세한 내용은 참고자료를 참조하세요.
t * 100 / jiffy
jiffy
정규 시간이 아닌 초당 시계 틱 수는 어디에 있습니까?
jiffy = sysconf(_SC_CLK_TCK);
다음을 사용하여 시계 틱 값을 얻을 수 있습니다.
$ getconf CLK_TCK
100
(즉, 특수 하드웨어나 실시간 Linux 등을 사용하지 않는 경우 이 계산을 무시할 수 있습니다.)
답변3
통계는 다음과 같습니다. 50%는 "일정 기간 동안 CPU의 절반"을 의미하며, 자세히 살펴보면 해당 기간이 무엇인지 알 수 있습니다.