한 번에 하나의 프로세스만 실행할 수 있는 경우 htop의 사용률은 무엇을 의미합니까?

한 번에 하나의 프로세스만 실행할 수 있는 경우 htop의 사용률은 무엇을 의미합니까?

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를 사용했는지 알려줍니다.
  • htopjiffies 합계(CPU 스레드 수로 나눈)의 두 스냅샷을 비교합니다. 이 두 시점 사이의 간격은 -d --delay=DELAY10분의 1초 단위로 구성 가능합니다. 예를 들어 1s업데이트 간격(기본값은 1.5s)입니다 -d 15.
htop -d 10
  • 100%1.5이는 관찰된 기간(예: 초) 동안 단일 프로세스가 항상 1개의 CPU 스레드를 사용한다는 것을 의미합니다. 이 값은 장기간에 걸쳐 대표성이 없을 수 있습니다.
  • +/ 키를 사용하여 -업데이트 간격을 수정할 수 있습니다.

더 긴 설명

가장 좋은 소스는소스 코드:) (Linux 조회 LinuxProcessList_scanCPUTime기능용).

  1. htop읽기는 PROCSTATFILE에 저장된 전체 시스템 통계를 가리키며 /proc/stat, 이를 직접 확인할 수 있습니다.
$ cat /proc/stat

각 프로세스의 값은 다음을 참조하세요.

/proc/<PID>/stat
  1. 첫 번째 행에는 총 CPU 사용량이 표시되고 열에는 다음 값이 표시됩니다.
usertime, nicetime, systemtime, idletime, ioWait, irq, softIrq, steal, guest, guestnice
  1. 다음 줄은 각 CPU 코어(스레드)에 대해 동일한 값을 보여줍니다.
  2. 총 시간은 다음과 같이 계산됩니다.
totaltime = usertime + nicetime + systemalltime + idlealltime + steal + virtalltime

  1. totaltimeCPU 수( $ nprocLinux의 값)로 나눕니다.
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(클럭 주기) 입니다.
  1. 마지막으로 이 계산에 사용되는 시간 단위는 jiffies에 따라 다릅니다. man 7 time자세한 내용은 참고자료를 참조하세요.
 t * 100 / jiffy

jiffy정규 시간이 아닌 초당 시계 틱 수는 어디에 있습니까?

 jiffy = sysconf(_SC_CLK_TCK);

다음을 사용하여 시계 틱 값을 얻을 수 있습니다.

$ getconf CLK_TCK
100

(즉, 특수 하드웨어나 실시간 Linux 등을 사용하지 않는 경우 이 계산을 무시할 수 있습니다.)

답변3

통계는 다음과 같습니다. 50%는 "일정 기간 동안 CPU의 절반"을 의미하며, 자세히 살펴보면 해당 기간이 무엇인지 알 수 있습니다.

관련 정보