/proc/의 측정 단위/schedstat

/proc/의 측정 단위/schedstat

통계를 얻어야 해요/proc/pid/schedstat특정 프로세스를 위해.

여기https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt해당 분야에 대한 설명을 찾았습니다.

(1) CPU에서 소요된 시간과 (2) 실행 대기열에서 대기하는 데 소요된 시간을 측정한 값은 무엇입니까? 초로 변환하는 방법은 무엇입니까? 시계 틱 단위로 측정되나요? 나는 그것들을 다음과 같이 나누어야 한다.시스템 구성(_SC_CLK_TCK)?

답변1

문서에는 "jiffies" 상태라고 나와 있지만 문서는 오래되었습니다. CPU 집약적인 작업을 실행하고 몇 초마다 카운터를 샘플링해 보면 카운터가 너무 빨리 증가하여 즉시 완료할 수 없다는 것을 알게 될 것입니다.

최신 커널의 기본값인 CFS(Complete Fair Scheduler)로 인해 문서가 잘못되었으므로 초로 변환하려면 1000000000으로 나눕니다.

https://lkml.org/lkml/2019/7/24/906

답변2

문서에 따르면 시간 단위는 "jiffies"입니다. 즉, "곧 도착하겠습니다!"입니다.

1순간은 빛이 진공 속에서 1cm를 이동하는 데 걸리는 시간과 같으며, 이는 약 33.3564피코초입니다. -위키피디아

그러나 그것은 당신이 원하는 정의가 아닙니다. 이 게시물을 사용해보십시오https://stackoverflow.com/questions/10885685/jiffies-how-to-calculate-seconds-elapsed가장 높은 답변은 다음과 같습니다

jiffy의 크기는 커널 상수 HZ의 값에 의해 결정됩니다.

HZ 값은 커널 버전과 하드웨어 플랫폼에 따라 다릅니다. i386에서 상황은 다음과 같습니다. 2.4.x 및 이전 커널에서는 HZ가 100이며 2.6.0부터 HZ는 0.001초인 1000으로 증가합니다. 커널 2.6.13부터 HZ 값은 100, 250(기본값) 또는 1000일 수 있는 커널 구성 매개변수이므로 각각 0.01, 0.004 또는 0.001초의 jiffies 값이 생성됩니다. 커널 2.6.20부터 더 많은 주파수를 사용할 수 있습니다. 300은 일반 비디오 프레임 속도(PAL, 25HZ, NTSC, 30HZ)를 균등하게 나누는 숫자입니다.

결론적으로:하나를 나누다스케줄링 통계시간 값은 시스템의 HZ 상수를 사용하여 초로 변환됩니다.

고쳐 쓰다:프로그래밍 환경에서 이러한 시간을 처리하는 경우지금 가장 좋은 답변같은 페이지에서는 변환을 위해 호출할 수 있는 일부 시스템 루틴을 가리킵니다(예: jiffies를 밀리초로).

답변3

Linux 2.6.23에서 jiffies에서 나노초로 변경되었습니다. 커밋 425e0968a25f를 참조하세요.

관련 정보