최고 및 평균 부하 이해

최고 및 평균 부하 이해

나는 특정 기계(약 9대)가 세 가지 로드 필드 모두에서 높은 로드 평균을 갖는 것을 관찰했습니다. 나는 로드를 "실행 중" 상태의 프로세스 수/현재 필요한 CPU 시간으로 이해합니다. 내 컴퓨터에서 N개의 프로세스가 실행 중이면 N보다 큰 로드를 생성할 수 없습니다. 내 추론이 맞습니까?

또한 로드는 프로세스 또는 스레드에 대해 계산됩니까? 즉, 멀티스레드 프로세스가 1보다 큰 로드를 생성할 수 있습니까?

답변1

로드 평균은 종종 "실행 큐의 평균 길이"로 설명됩니다. 따라서 CPU를 많이 사용하는 프로세스나 스레드가 거의 없으면 LA가 1 이상으로 증가할 수 있습니다. LA가 총 CPU 코어 수보다 적으면 문제가 없습니다. 그러나 CPU 수보다 높으면 일부 스레드/프로세스가 대기열에 남아 실행할 준비가 되었지만 유휴 CPU를 기다리고 있음을 의미합니다.

답변2

로드 평균을 계산하는 데 사용되는 숫자는 실행 중이거나 중단되지 않은 상태의 작업과 이동 평균의 시간 조각 동안 수행된 작업량입니다. 이러한 작업은 다중 스레드 프로세스의 일부일 수 있습니다. 사용된 알고리즘의 평활화 결과로 인해 필드는 시간이 지날수록 더 흐려집니다.

로드 1은 1 CPU 워크로드의 100%와 같습니다. 다중 스레드 애플리케이션이 있고 활성 스레드 수가 사용 가능한 CPU 수를 초과하도록 관리하는 경우 로드를 1보다 높게 구동하는 프로세스가 있을 수 있습니다. 이는 단기적인 급증일 수 있으며 평균 로드의 더 긴 시간 조각 보기에는 반영되지 않습니다.

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

답변3

바라보다커널/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) 고정 소수점 구현이 필요한 부동 소수점 코드 부족 등 코드가 다소 복잡해집니다. 하지만 이들은 댓글에 설명된 접근 방식을 충실히 구현하려고 노력하고 있음을 쉽게 알 수 있습니다.

Linux가 중요하다는 것을 알게 될 것입니다, 귀하의 질문에 답변하는 프로세스뿐만 아니라.

답변4

즉시 로드: 실행 중이거나 실행 대기 중인 작업 수, 즉 실행하려는 작업 수

로드 평균: 위의 측정항목이지만 동일한 측정항목의 이전 샘플에 대해 기하급수적으로 평균을 낸 것입니다.

두 숫자 모두 제한이 없으며 일반적으로 N보다 훨씬 큽니다.

명확하게 말하면 Linux의 로드 수에는 물론 스레드가 포함됩니다. 많은 스레드를 생성하는 단일 프로세스를 사용하면 임의로 큰 로드를 생성할 수 있습니다.

더 많은 관련 내용을 보려면 여기를 클릭하세요

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

관련 정보