Linux에서 재부팅 한 후 현재 지프 수를 얻는 방법은 무엇입니까?


6

리눅스 /proc/PID/stat에는 지피에서 측정되는 몇 가지 지표가있다. 재부팅 후 현재 지프 수를 얻는 방법이 있습니까? Jiffies 또한 USER_HZ 값의 초에 해당한다고 가정합니다.

나는에 처음 4 개 인수를 합산하여받을 수 cpu라인 /proc/stat?


업데이트 :

$ date +"%s.%N" && grep '^jiffies' timer_list
1262103103.162169230
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
$ date +"%s.%N" && grep '^jiffies' timer_list
1262103108.706475051
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351

이 사이의 델타는 거의 정확히 250jiffies / second입니다. CPU 당 모든 jiffies 라인이 동일한 것처럼 나타납니다 (핫 디맨드 CPU가 프로비저닝 / 교체 된 경우에는 그렇지 않을 수도 있음). 나는 이것이 일관된 jiffies 카운터를 당기기에 가장 좋은 장소라고 생각합니다.

답변:


4

컴퓨터 용어에서 기술적으로 지피는 시스템 타이머 인터럽트의 1 틱 기간입니다. 그러나 절대적인 것은 아닙니다. Intel x86에서 Linux 2.6.13+의 경우 jiffy는 4ms이지만 아키텍처 및 커널 버전에 따라 1ms에서 10ms 사이입니다.

로부터 커널 타이머 시스템 페이지 :

역사적으로 커널은 HZ의 값으로 100을 사용하여 10ms의 지피 간격을 생성했습니다. 2.4에서는 i386의 HZ 값이 1000으로 변경되어 1ms의 지피 간격이 나타납니다. 최근 (2.6.13) 커널은 i386의 HZ를 250으로 변경했습니다. 1000이 너무 높은 것으로 간주되었습니다.

목록 /proc/timer_list/proc/timer_stats.

부팅시 timer_stats를 활성화 한 다음이 파일을 cat하여 통계를 인쇄 할 수 있습니다.


timer_stats를 어떻게 활성화합니까? 맞습니다 .'jiffies '는 다양한 /proc/PID/stat파일이 상대적 % s를 계산하는 데 사용할 수있는 총계와 동등한 메트릭을보고하는 한이 경우 임의의 증분입니다 . 에 'jiffies'줄이 있으므로 /proc/timer_list원래 게시물을 업데이트하겠습니다.
Jé Queue

1
통계 수집을 시작하려면 "echo 1> / proc / timer_stats"를 시작 사이클의 시작 부분에 넣을 수 있습니다.
Darren Hall

2

아니요, 첫 줄만 있으면됩니다. 첫 번째 줄은 다른 CPU 줄의 다른 모든 것을 집계합니다.

출력 예 :

[john @ awesome] $ cat / proc / stat
CPU 35024984 1771325 94153391 1810948613 2648063 352387 557232
CPU0 13955475 927654 59431476 895791946 1910028 318618 438048
CPU1 21069509 843671 34721915 915156667 738035 33769 119184
intr 1403502159 1138402452 50000 30003150000 92119425 000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 57676632 000000 115290726 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
ctxt 21043582666
btime 1252332786
프로세스 25663823
procs_running 1
procs_blocked 0

각 열의 의미 (왼쪽에서 오른쪽) :

  • 사용자 : 사용자 모드에서 실행되는 일반 프로세스
  • nice : 사용자 모드에서 실행되는 niced 프로세스
  • 시스템 : 커널 모드에서 실행되는 프로세스
  • 유휴 : 유휴 시간
  • iowait : I / O가 완료되기를 기다리는 중
  • irq : 서비스 인터럽트
  • softirq : softirq 서비스

보시다시피 cpu (사용자 모드 프로세스) 다음의 첫 번째 열은 함께 추가 된 2 개의 숫자와 같습니다.


이것은 CPU가 예약 된 사용자 시간만을위한 것이 아닙니까? 다른 사람은 좋은 시스템 및 유휴?
Jé Queue

각 열의 의미를 추가했습니다.
John T

맞습니다. 그러나 시작 이후 총 지프 수를 찾으려면 다음과 같은 작업을 수행하지 awk '/^cpu/{print $2+$3+$4+$5}' /proc/stat않겠습니까?
Jé Queue

당신은 사용자, 좋은, 시스템 및 유휴 만 원하십니까? 당신은 할 수 있습니다awk '/^cpu\>/{print $2+$3+$4+$5}' /proc/stat
John T

주어진 시간 델타가 전체의 합과 일치하지 않는 것처럼 보입니다 /proc/stat!
Jé Queue

1

초당 지프 :

awk 'BEGIN {"cat /proc/timer_list | grep '\''^jiffies'\'' | awk '\''{print $2}'\''" | getline a; "cat /proc/uptime | awk '\''{print $1}'\''" | getline b ;printf "%.4f\n", a/b}'

설명 : 부트가 / proc / timer_list에서 찾은 이후 지프를 / proc / uptime에서 찾은 이후의 초로 나눕니다.


내가 얻을 75409.1301그래서 일반적인 경우에 안정적으로 보이지 않는다. uname -a보고서 Linux semyol-329-b 3.19.0-33-lowlatency #38~14.04.1-Ubuntu SMP PREEMPT Fri Nov 6 19:30:45 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux.
Mikko Rantalainen

1

이후 Linux 커널 /proc/timer_list에서는 시스템 내에있는 각 CPU에서 재부팅 한 후 지프 수를 쿼리 하고 찾을 수 있습니다 . 항상 일치해야합니다.

$ grep -E "^cpu|^jiff" /proc/timer_list
cpu: 0
jiffies: 4299690231
cpu: 1
jiffies: 4299690231

timer_list.c위를 인쇄하는 비트 뒤 의 코드를 보면 :

...
...
        P_ns(iowait_sleeptime);
        P(last_jiffies);
        P(next_timer);
        P_ns(idle_expires);
        SEQ_printf(m, "jiffies: %Lu\n",
               (unsigned long long)jiffies);

그건 알 수 있습니다 unsigned long long.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.