cat /proc/stat의 출력으로 인해 혼란스러워졌습니다.

cat /proc/stat의 출력으로 인해 혼란스러워졌습니다.

저는 Centos 6.10을 실행하는 대학 서버를 사용하고 있습니다. 시스템이 유휴 작업 상태에 있는 시간을 계산하려고 합니다. /proc/stat 의사 파일을 보고 있습니다. 매뉴얼 페이지에 따르면 첫 번째 행의 네 번째 열은 시스템이 유휴 상태였던 시간(100분의 1초)이어야 합니다.

내가 겪고 있는 문제는 이 값이 매우 크다는 것입니다. 초 수를 얻기 위해 100으로 나누고 그 결과를 60^2*24(하루의 초)로 나누어 일 수를 구하면 시스템 가동 시간보다 긴 답을 얻습니다.

간단히 말해서, 이 값(내가 계산한 방식)은 시스템이 부팅된 시간보다 오랫동안 유휴 상태였다는 것을 알려줍니다.

답변1

모든 CPU의 유휴 시간의 합입니다.

첫 번째 cpu/proc/stat뒤에는 가 옵니다 cpu0. cpu1각 줄은 다음과 유사합니다.온라인CPU. 이것은 최신 버전의proc(5)맨페이지.

/proc/uptime모든 CPU가 온라인 상태일 수는 없지만 첫 번째 /system 항목의 유휴 값(두 번째 필드의 초 수와 동일)은 모든 CPU에 대해 계산됩니다.가능한중앙 처리 장치[1].

따라서 이를 CPU 수로 나누어서 얻을 수 있습니다.무엇평균과 같습니다.

현재의 가능한 개방형 및 오프라인 CPU 번호를 얻는 한 가지 방법은 파일 /sys/devices/system/cpu/디렉터리를 살펴보는 것입니다.


[1] 구경해 보세요fs/proc/stat.c소스에서:

static int show_stat(struct seq_file *p, void *v)
{
        ...
        for_each_possible_cpu(i) {
                ...
                idle += get_idle_time(kcs, i);
        ...
        seq_put_decimal_ull(p, "cpu  ", nsec_to_clock_t(user));
        ...
        seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));
        ...
        for_each_online_cpu(i) {
                ...
                seq_printf(p, "cpu%d", i);
                ...
                idle = get_idle_time(kcs, i);
                ...
                seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));

관련 정보