Linux 부하 계산에 단순 1/5/15분 이동 평균이 사용되지 않는 이유는 무엇입니까?

Linux 부하 계산에 단순 1/5/15분 이동 평균이 사용되지 않는 이유는 무엇입니까?

최근까지 나는 로드 평균(상단에 표시)을 "실행 가능" 또는 "실행 중" 상태에 있는 프로세스 수의 마지막 n개 값의 이동 평균으로 생각했습니다. n은 이동 평균의 "길이"로 정의됩니다. 로드 평균을 계산하는 알고리즘은 5초마다 실행되는 것처럼 보이므로 n은 1분 로드 평균의 경우 12, 5분 로드 평균의 경우 12x5, 12x5가 됩니다. 5분 로드 평균의 경우 분 로드 평균, n은 12x15 15분 평균 로드입니다.

그런데 다음 기사를 읽었습니다.http://www.linuxjournal.com/article/9001. 이 기사는 꽤 오래되었지만 오늘날 Linux 커널에도 동일한 알고리즘이 구현되어 있습니다. 로드 평균은 이동 평균이 아니라 이름을 모르는 알고리즘입니다. 어쨌든 저는 Linux 커널 알고리즘을 가상의 주기적 로드의 이동 평균과 비교했습니다.

부하 다이어그램.

이것은 큰 차이입니다.

마지막으로 내 질문은 다음과 같습니다.

  • 실제 이동 평균과 비교하여 이 구현을 선택한 이유는 무엇이며 실제로 누구에게나 의미가 있습니까?
  • 모두가 "1분 로드 평균"에 대해 이야기하는 이유는 알고리즘이 마지막 순간보다 더 많은 것을 고려하기 때문입니다. (수학적으로 이것은 출시 이후의 모든 측정값입니다. 현실적으로 반올림 오류를 고려하면 여전히 많은 측정값입니다.)

답변1

이 차이는 원래 Berkeley Unix로 거슬러 올라가며 커널이 실제로 이동 평균을 유지할 수 없다는 사실에서 비롯됩니다. 특히 과거에는 단순히 평균이 없었던 과거의 판독값을 많이 유지해야 합니다. 저장할 메모리가 부족합니다. 대신 사용되는 알고리즘의 장점은 커널이 이전 계산 결과를 유지해야 한다는 것입니다.

컴퓨터 속도와 해당 클록 주기를 (GHz가 아닌) 수십 MHz로 측정했을 때 알고리즘은 진실에 더 가까웠으며 그 차이는 더 커졌습니다.

관련 정보