최고 및 부하 평균 이해


12

세 가지로드 필드 모두에서 특정 머신 (약 9)에서 높은 평균로드를 관찰하고 있습니다. 로드가 "실행"/ 현재 CPU 시간을 원하는 프로세스 수로 이해합니다. N 프로세스가 내 컴퓨터에서 실행되고 있으면 N보다 큰 부하를 생성 할 수 없다는 추론이 맞습니까?

또한 프로세스 또는 스레드와 관련하여로드가 계산됩니까? 다시 말해, 멀티 스레드 프로세스가 1보다 큰로드를 생성 할 수 있습니까?


(일반적으로 매우 빨리 예약 될 것으로 예상되므로) "무정전"상태의 작업도 실행중인 것으로 계산됩니다. 질문을 바꾸는 것이 아니라 세부 사항입니다.
mattdm

답변:


7

로드 평균은 일반적으로 "평균 실행 큐 길이"로 설명됩니다. 따라서 CPU를 많이 사용하는 프로세스 나 스레드는 LA를 1보다 크게 올릴 수 없습니다. LA가 총 CPU 코어 수보다 작은 경우 문제가 없습니다. 그러나 CPU 수보다 많으면 일부 스레드 / 프로세스가 대기열에 남아서 실행할 준비가되었지만 사용 가능한 CPU를 기다리는 것을 의미합니다.


3

로드 평균을 계산하는 데 사용되는 숫자는 실행 중이거나 중단 할 수없는 상태의 작업 및 이동 평균의 타임 슬라이스에서 수행 된 작업량입니다. 이러한 작업은 멀티 스레드 프로세스의 일부일 수 있습니다. 사용 된 알고리즘의 결과가 매끄 럽기 때문에 필드가 더 멀리 퍼지됩니다.

1의로드는 하나의 CPU 가치 작업의 100 %와 같습니다. 사용 가능한 CPU 수를 초과하여 여러 개의 활성 스레드를 보유한 멀티 스레드 응용 프로그램이있는 경우 단일 프로세스가 1보다 큰로드를 발생시킬 수 있습니다. 이는 단기적인 스파이크 일 가능성이 있으며 로드 평균의 더 긴 시간 슬라이스보기.

또한 멀티 코어 시스템이 있기 전에로드 평균이 개발되었으므로로드 수를 사용 가능한 총 코어 수로 나누는 것이 중요합니다. 4 소켓 쿼드 코어 시스템에서 이것이 9의 지속적인로드 인 경우, 이것은 9/16로드이며 실제로 문제가되지는 않습니다.


1
— 소켓의 여러 코어가 사용자 공간에 노출되어 더 많은 CPU가 아닌 것처럼 보이는 시스템을 아직 보지 못했습니다. 따라서 4 소켓 쿼드 코어 시스템에는 16 개의 CPU가 있습니다. (따라서 9의로드가 CPU 수보다
적다

나는 숫자가 대수적이라는 것을 이해하고 있습니다. 그래서 그것들은 단지 1보다 작거나 위에 있습니다. 내가 가지고있는 한 시스템에서, 시스템이 이것을보고하는 것을 보았습니다 :로드 평균 : 10.41, 9.57, 9.26. 뭐?? 왜 한 리눅스 시스템이로드 평균을 0.81, 1.57, 0.98로보고하는 반면이 시스템은로드 평균을보고합니까? 10.41, 9.57, 9.26? 이것에 대해 모든 유닉스가 동일하지 않습니까?
djangofan 2016 년

3

실행 가능한 스레드 수 ( "실행 큐")와 중단 불가능 스레드 수 (기다리는 대기 수)의 기하 급수적으로 평균에서로드 평균 도출을 설명하는 시작에 길고 훌륭한 설명이있는 kernel / sched / loadavg.c 를 참조하십시오. I / O 또는 잠금 대기 중).

주석의 핵심은 다음과 같습니다.

 * The global load average is an exponentially decaying average of
 * nr_running + nr_uninterruptible.
 *
 * Once every LOAD_FREQ:
 *     nr_active = 0;
 *     for_each_possible_cpu(cpu)
 *         nr_active += cpu_of(cpu)->nr_running +
 *                      cpu_of(cpu)->nr_uninterruptible;
 *     avenrun[n] = avenrun[0] *
 *                  exp_n + nr_active *
 *                  (1 - exp_n)

실제 생활에서는 CPU 당 카운터, 틱리스 커널, 핫스왑 CPU, 고정 소수점 exp (n) 구현이 필요한 부동 소수점 코드 부족으로 인해 코드가 다소 복잡해집니다. 그러나 이것들이 모두 주석에 설명 된 방법을 충실히 구현하기 위해 노력하고 있음을 쉽게 알 수 있습니다.

리눅스는 프로세스뿐만 아니라 스레드를 계산 하여 질문에 답합니다.


0

3 개의로드 평균은 숫자 1을 중심으로 회전하는 로그 함수와 같은 것입니다. f (x) = eX (e와 X 지수)와 유사한 것. 기술적으로 평균을 시뮬레이트하는 지수 감쇠 함수의 고정 소수점 표현. CPU 당 추가 적이므로 쿼드 코어 시스템에서 전체로드는 4.00처럼 보일 수 있습니다. 첫 번째 숫자는 마지막 분 동안의 평균이고, 두 번째 숫자는 지난 5 분 동안의 평균이며, 세 번째 숫자는 지난 15 분 동안의 평균입니다. 나는 그것을 언급하는 대답을 여기에 드롭해야한다고 생각했습니다.


0

즉시로드 : 실행 또는 실행 대기중인 작업 수 또는 다른 방법으로 실행하려는 작업 수

로드 평균 : 위의 측정 값이지만 동일한 측정 값의 이전 샘플로 지수 평균화 됨

이 두 숫자는 제한이 없으며 종종 N보다 훨씬 큽니다.

분명히 : Linux의로드 수에는 스레드가 포함되어 있지만 의심의 여지가 없습니다. 많은 스레드를 생성하는 단일 프로세스로 임의로 큰로드를 생성 할 수 있습니다.

여기에 더 많은

http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html

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