CPU 통계 계산 알고리즘

CPU 통계 계산 알고리즘

인터넷에서 너무 많이 검색했는데 top 명령의 결과를 기반으로 %Us, %Sy, %Id 등을 계산하는 알고리즘을 찾을 수 없습니다. 그러나 문서가 발견되지 않았습니다.
일부 파일, 예:이것또는이것CPU 사용률을 계산하지만 출력이 top 명령의 출력과 같지 않습니다. (너무 다르다!!!)

top 또는 mpstat 명령은 CPU 통계를 어떻게 계산합니까?

답변1

저는 다음 공식을 사용하여 계산했습니다.

result=(CurrentUse-PrevUse)*100/(CurrentTotal-PrevTotal)

이것은 CPU [us,sys,idle]를 계산하는 샘플 스크립트입니다.

#!/bin/bash 

prev_total=0 
prev_idle=0
prev_us=0
prev_sys=0

while true
do
        line=$(head -n1 /proc/stat)

        us=$(echo $line | awk '{print $2}') 
        ni=$(echo $line | awk '{print $3}') 
        sy=$(echo $line | awk '{print $4}') 
        id=$(echo $line | awk '{print $5}') 
        io=$(echo $line | awk '{print $6}') 
        irq=$(echo $line | awk '{print $7}') 
        si=$(echo $line | awk '{print $8}') 
        st=$(echo $line | awk '{print $9}') 
        g=$(echo $line | awk '{print $10}') 
        gn=$(echo $line | awk '{print $11}') 

        total=$(expr $us + $ni + $sy + $id + $io + $irq + $si + $st + $g + $gn) 

        let "diff_total=$total-$prev_total"
        let "diff_idle=$id-$prev_idle"
        let "diff_us=$us-$prev_us"
        let "diff_sys=$sy-$prev_sys"

         let "result_us=$diff_us * 100 / $diff_total" 
         let "result_idle=$diff_idle * 100 / $diff_total" 
         let "result_sys=$diff_sys * 100 / $diff_total" 

         echo -en "\rCpu   us:$result_us%  sys:$result_sys%  idle:$result_idle%\b\b"

        prev_total=$total 
        prev_idle=$id
        prev_us=$us
        prev_sys=$sy
        sleep 1
done

출력은 다음과 같습니다.

Cpu   us:1%  sys:0%  idle:97%

관련 정보