로드(컴퓨팅)

Load (computing)
상당한 컴퓨팅 부하를 나타내는 htop(오른쪽 상단: 부하 평균:)

UNIX 컴퓨팅에서 시스템 부하란 컴퓨터 시스템이 수행하는 계산 작업의 양을 측정하는 것입니다.부하 평균은 일정 기간 동안의 평균 시스템 부하를 나타냅니다.통상 마지막 1분, 5분 및 15분 동안의 시스템 부하를 나타내는3개의 숫자의 형태로 표시됩니다.

Unix 스타일의 부하 계산

모든 Unix 및 Unix 유사 시스템은 커널에서 3개의 "부하 평균" 숫자의 차원 없는 메트릭을 생성합니다.사용자는 다음을 실행하여 Unix 쉘에서 현재 결과를 쉽게 조회할 수 있습니다.uptime명령어:

$ 업타임 14:34:03 증가 10:43, 사용자 4명, 부하 평균: 0.06, 0.11, 0.09

및 명령어는 일련의 그래피컬사용자 인터페이스 유틸리티와 마찬가지로 3개의 부하 평균값을 나타냅니다.Linux 에서는 파일을 읽어 액세스 할 수도 있습니다.

유휴 컴퓨터의 로드 번호는 0입니다(유휴 프로세스는 카운트되지 않습니다).CPU(Ready Queue 또는 run queue)를 사용하거나 대기하는 각 프로세스는 로드 번호를 1씩 증가시킵니다.각 프로세스가 종료될 때마다 프로세스가 1씩 감소합니다.대부분의 UNIX 시스템에서는 실행 (CPU 상에서) 또는 실행 가능(CPU 대기 중) 상태의 프로세스만 카운트됩니다.그러나 Linux에는 중단 없는 sleep 상태(일반적으로 디스크 액티비티를 대기)의 프로세스도 포함되어 있습니다.는 I/[1]O시스템이 비지 상태이거나 정지되어 있기 때문에 많은 프로세스가 I/O에서 차단되어 있는 경우 현저하게 다른 결과를 초래할 수 있습니다.예를 들어 NFS 서버 장애나 너무 느린 미디어(예: USB 1.x 스토리지 디바이스)로 인한 프로세스 차단이 포함됩니다.이러한 상황에서는 CPU 사용량의 실제 증가를 반영하지 않는 부하 평균이 높아질 수 있습니다(그러나 사용자가 얼마나 기다려야 하는지를 알 수 있습니다).

시스템부하 평균이 부하 번호의 지수 감쇠/가중 이동 평균으로 계산됩니다.부하 평균의 3가지 값은 시스템 [2]동작의 과거 1분, 5분 및 15분을 나타냅니다.

수학적으로 말하면, 이 세 가지 값 모두 시스템 시작 이후의 모든 시스템 부하를 평균화합니다.모두 기하급수적으로 붕괴하지만 속도는 다릅니다.각각 1분, 5분, 15분 후에 e까지 기하급수적으로 붕괴합니다.따라서 1분간의 부하 평균은 마지막 1분간의 부하 중 63%(1~1/e)와 마지막 1분을 제외한 시작 후 평균 부하 중 37%(1/e)로 구성됩니다.5분 및 15분 부하 평균의 경우 각각 5분 및 15분에 걸쳐 동일한 63%/37% 비율이 계산됩니다.따라서 1분 부하 평균에 과거 액티비티의 37%가 포함되어 있기 때문에 마지막 60초만 포함되는 것은 기술적으로 정확하지 않지만 대부분 마지막 1분을 포함한다고 기술하는 것은 정확합니다.

해석

CPU에 바인드되어 있는 싱글 CPU 시스템의 경우 부하 평균을 각 기간의 시스템 사용률 측정값으로 생각할 수 있습니다.CPU가 여러 개 있는 시스템의 경우 동일한 측정값을 얻으려면 부하를 프로세서 수로 나누어야 합니다.

예를 들어 단일 CPU 시스템의 부하 평균 "1.73 0.60 7.98"을 다음과 같이 해석할 수 있습니다.

  • 마지막 1분 동안 시스템은 평균 73% 과부하 상태였습니다(1.73개의 실행 가능한 프로세스, 즉 0.73개의 프로세스가 1개의 CPU 시스템에 대해 차례를 기다릴 필요가 있었습니다).
  • 마지막 5분 동안 CPU는 평균 40%의 시간 동안 아이돌 상태였습니다.
  • 마지막 15분 동안 시스템에 평균 698%의 과부하가 걸렸습니다(7.98개의 실행 가능한 프로세스, 따라서 6.98개의 프로세스가 단일 CPU 시스템에서 차례를 기다릴 필요가 있었습니다).

즉, 이 시스템(CPU, 디스크, 메모리 등)이 1.73배 빠르면 마지막 1분에 예약된 모든 작업을 처리할 수 있습니다.

CPU가 4개인 시스템에서는 부하 평균이 3.73이면 평균 3.73개의 프로세스가 실행 준비가 되어 있으며 각 프로세스를 CPU로 스케줄링할 수 있음을 나타냅니다.

현대의 UNIX 시스템에서는 부하 평균에 관한 스레드 처리 방법이 다릅니다.일부 시스템에서는 스레드를 부하 평균 계산을 위한 프로세스로 취급합니다.실행을 대기하는 스레드마다 부하가 1씩 추가됩니다.단, 다른 시스템, 특히 M:N 스레드라고 불리는 시스템은 부하를 목적으로 프로세스를 정확히 한 번 카운트하거나(스레드 수에 관계없이), 사용자 스레드 스케줄러에 의해 현재 커널에 공개되어 있는 스레드만 카운트하는 등의 다른 전략을 사용합니다.이는 설정된 동시성 수준에 따라 달라질 수 있습니다.프로세스입니다.Linux는 부하에 [3]1을 추가하는 것으로 각 스레드를 개별적으로 카운트하는 것으로 보입니다.

CPU 부하 대 CPU 사용률

Ferrari [4]등에 의해 수행된 다양한 부하 지수에 대한 비교 연구는 CPU 큐 길이에 기초한 CPU 부하 정보가 CPU 사용률에 비해 부하 밸런싱에서 훨씬 더 낫다고 보고했습니다.CPU 큐 길이가 더 나은 이유는 아마도 호스트의 부하가 높을 때 CPU 사용률이 100%에 가깝고 사용률의 정확한 부하 수준을 반영할 수 없기 때문일 것입니다.반면 CPU 큐의 길이는 CPU의 부하량을 직접 반영할 수 있습니다.예를 들어 큐에 3개의 프로세스와 6개의 프로세스가 있는 2개의 시스템은 모두 사용률이 100%에 가깝습니다.다만,[original research?] 분명히 다릅니다.

CPU 부하 계산

Linux 시스템에서는 부하 평균이 각 클럭틱에서 계산되지 않고 HZ 주파수 설정에 따라 각 클럭틱에서 테스트되는 변수 값으로 계산됩니다.이 설정은 커널 클럭 틱환율을 헤르츠(초당 횟수)로 정의하고 10ms 틱의 경우 기본 100으로 설정합니다.커널 액티비티에서는 이 틱 수를 사용하여 시간을 설정합니다.구체적으로는 부하 평균을 계산하는 timer.c::calc_load() 함수는 다음 시간마다 실행됩니다.LOAD_FREQ = (5*HZ+1) 눈금 또는 약 5초마다:

서명되어 있지 않다  복수하다[3];  정적인 인라인 무효 calc_load(서명되어 있지 않다  틱스딱) {    서명되어 있지 않다  active_module; /* 고정 소수점 */    정적인 인트 세어보세요 = 로드_FREQ;     세어보세요 -= 틱스딱;    한다면 (세어보세요 < > 0) {       세어보세요 += 로드_FREQ;       active_module = count_active_module();       계산_로드(복수하다[0], EXP_1, active_module);       계산_로드(복수하다[1], EXP_5, active_module);       계산_로드(복수하다[2], EXP_15, active_module);    } } 

Avenrun 어레이에는 평균 1분, 5분 및 15분이 포함됩니다.CALC_LOAD매크로 및 관련 값은 sched로 정의됩니다.h:

# FSHIFT 11의 정의/*nr 정밀도 */ #고정_1 (1 < FSHIFT >)의 정의/* 1.0은 고정 소수점 */ #부하의 정의_FREQ(5*Hz+1)/* 5초 간격 */ #정의 EXP_1 1884/* 1/exp(5sec/1min) 고정 소수점 */ #정의 EXP_5 2014/* 1/exp(5초/5분) */ #정의 EXP_15 2037/* 1/exp(5초/15분) */  #정의 CALC_LOAD(부하, exp,n) \ 로드 *= exp; \ 로드 += n*(FIXED_1-exp); \ 로드 >>= FShift; 

부하 평균의 「샘플링」계산은, 어느 정도 일반적인 동작입니다.FreeBSD도 5초마다 값을 갱신합니다.일반적으로 간격은 정확하지 않은 것으로 간주되므로 [5]특정 시점에 실행되도록 예약된 프로세스를 수집하지 않습니다.

Linux 메일링 리스트의 투고는 +1틱이 이러한 컬렉션에서 Moire 아티팩트를 회피하기에 불충분하다고 판단하고 대신 [6]4.61초의 간격을 제안합니다.이 변경은 Android 시스템 커널에서 흔히 볼 수 있지만 사용된 정확한 표현은 [7]HZ가 100이라고 가정합니다.

기타 시스템 퍼포먼스명령어

시스템 성능을 평가하기 위한 기타 명령어는 다음과 같습니다.

  • uptime– 시스템의 신뢰성과 부하 평균
  • top – 시스템 전체의 표시
  • vmstat – vmstat는 실행 가능 또는 차단된 프로세스, 메모리, 페이징, 블록 I/O, 트랩 및 CPU에 대한 정보를 보고합니다.
  • htop – 인터랙티브 프로세스 뷰어
  • dstat,atop– 프로세스, 메모리, 페이징, 블록 I/O, 트랩 및 CPU 액티비티에 대한 모든 기존 리소스 데이터의 상관 관계를 분석합니다.
  • iftop – 인터페이스별 인터랙티브 네트워크 트래픽 뷰어
  • nethogs– 프로세스별 인터랙티브 네트워크 트래픽 뷰어
  • iotop– 인터랙티브 I/O뷰어[8]
  • iostat – 스토리지 I/O 통계 정보
  • netstat – 네트워크 통계 정보용
  • mpstat– CPU 통계 정보용
  • tload– 단말기의 부하 평균 그래프
  • xload– X의 부하 평균 그래프
  • /proc/loadavg– 부하 평균을 포함하는 텍스트 파일

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Linux Tech Support: What exactly is a load average?". 23 October 2008.
  2. ^ Walker, Ray (1 December 2006). "Examining Load Average". Linux Journal. Retrieved 13 March 2012.
  3. ^ http://serverfault.com/a/524818/27813 를 참조해 주세요.
  4. ^ Ferrari, Domenico 및 Zhou, Songian; "부하 밸런싱 애플리케이션의 부하 지수에 대한 경험적 조사", 퍼포먼스 진행 '87, 제12회 컴퓨터 퍼포먼스 모델링, 측정 및 평가에 관한 국제 심포지엄, 네덜란드 암스테르담, 1988년 5페이지, 네덜란드.
  5. ^ "How is load average calculated on FreeBSD?". Unix & Linux Stack Exchange.
  6. ^ Ripke, Klaus (2011). "Linux-Kernel Archive: LOAD_FREQ (4*HZ+61) avoids loadavg Moire". lkml.iu.edu. 그래프와 패치
  7. ^ "Patch kernel with the 4.61s load thing · Issue #2109 · AOSC-Dev/aosc-os-abbs". GitHub.
  8. ^ "Iotop(8) - Linux manual page".

외부 링크