Red Hat Training

A Red Hat training course is available for RHEL 8

34.3. 네트워크 대기 시간 개선

CPU 전원 관리 기능은 시간에 민감한 애플리케이션 처리에서 원치 않는 지연을 유발할 수 있습니다. 이러한 전원 관리 기능 중 일부 또는 모두를 비활성화하여 네트워크 대기 시간을 개선할 수 있습니다.

예를 들어 서버가 로드가 많은 것보다 유휴 상태일 때 대기 시간이 길면 CPU 전원 관리 설정이 대기 시간에 영향을 미칠 수 있습니다.

중요

CPU 전원 관리 기능을 비활성화하면 정전 및 전력 소비가 증가할 수 있습니다.

34.3.1. CPU 전원 상태가 네트워크 대기 시간에 미치는 영향

CPU의 소비 상태(C-states)는 컴퓨터의 전력 소비를 최적화하고 감소시킵니다. C-state는 C0부터 번호가 매겨집니다. C0에서 프로세서는 완전히 전원을 공급하고 실행됩니다. C1에서 프로세서는 완전히 전원을 공급하지만 실행하지 않습니다. C-state의 수가 많을수록 CPU가 꺼지는 구성 요소가 많을 수 있습니다.

CPU 코어가 유휴 상태가 될 때마다 기본 제공 전원 절약 논리 단계 in 및 다양한 프로세서 구성 요소를 꺼서 현재 C 상태에서 더 높은 상태로 코어를 이동하려고 합니다. CPU 코어가 데이터를 처리해야 하는 경우 RHEL(Red Hat Enterprise Linux)은 프로세서에 인터럽트를 보내 코어를 해제하고 C-state를 C0으로 다시 설정합니다.

깊은 C-state를 C0으로 다시 이동시키는 것은 프로세서의 다양한 구성 요소로 전원을 다시 켜기 때문에 시간이 걸립니다. 멀티 코어 시스템에서는 많은 코어가 동시에 유휴 상태이므로 더 깊은 C 상태가 될 수도 있습니다. RHEL이 동시에 문제를 해결하려고 하면 모든 코어에서 깊은 C-state를 반환하는 동안 커널에서 다수의 II(Inter-Processor Interrupts)를 생성할 수 있습니다. 인터럽트를 처리하는 동안 필요한 잠금으로 인해 시스템은 모든 인터럽트를 처리하는 동안 잠시 중단될 수 있습니다. 이로 인해 이벤트에 대한 애플리케이션 응답이 크게 지연될 수 있습니다.

예 34.2. 코어당 C 상태 표시

PowerTOP 애플리케이션의 Idle STAts 페이지에 CPU 코어가 각 C-state에 소요되는 시간을 표시합니다.

           Pkg(HW)  |            Core(HW) |            CPU(OS) 0   CPU(OS) 4
                    |                     | C0 active   2.5%        2.2%
                    |                     | POLL        0.0%    0.0 ms  0.0%    0.1 ms
                    |                     | C1          0.1%    0.2 ms  0.0%    0.1 ms
C2 (pc2)   63.7%    |                     |
C3 (pc3)    0.0%    | C3 (cc3)    0.1%    | C3          0.1%    0.1 ms  0.1%    0.1 ms
C6 (pc6)    0.0%    | C6 (cc6)    8.3%    | C6          5.2%    0.6 ms  6.0%    0.6 ms
C7 (pc7)    0.0%    | C7 (cc7)   76.6%    | C7s         0.0%    0.0 ms  0.0%    0.0 ms
C8 (pc8)    0.0%    |                     | C8          6.3%    0.9 ms  5.8%    0.8 ms
C9 (pc9)    0.0%    |                     | C9          0.4%    3.7 ms  2.2%    2.2 ms
C10 (pc10)  0.0%    |                     |
                    |                     | C10        80.8%    3.7 ms 79.4%    4.4 ms
                    |                     | C1E         0.1%    0.1 ms  0.1%    0.1 ms
...

34.3.2. EFI 펌웨어의 C 상태 설정

EFI 펌웨어가 있는 대부분의 시스템에서 개별 사용 상태(C-states)를 활성화 및 비활성화할 수 있습니다. 그러나 RHEL (Red Hat Enterprise Linux)에서 유휴 드라이버는 커널이 펌웨어의 설정을 사용하는지 여부를 결정합니다.

  • intel_idle: Intel CPU가 있는 호스트의 기본 드라이버이며 EFI 펌웨어의 C-state 설정을 무시합니다.
  • acpi_idle: RHEL은 Intel 이외의 공급업체가 있는 CPU가 있는 호스트에서 이 드라이버를 사용하고 intel_idle 이 비활성화된 경우 사용합니다. 기본적으로 acpi_idle 드라이버는 EFI 펌웨어의 C-state 설정을 사용합니다.

추가 리소스

  • /usr/share/doc/kernel-doc- <version> /Documentation/admin-guide/pm/cpuidle.rst - kernel-doc 패키지에서 제공

34.3.3. 사용자 정의 TuneD 프로필을 사용하여 C-state 비활성화

TuneD 서비스는 커널의PMQOS(Power Management Quality of Service) 인터페이스를 사용하여 소비 상태(C-states) 잠금을 설정합니다. 커널 유휴 드라이버는 이 인터페이스와 통신하여 C-state를 동적으로 제한할 수 있습니다. 따라서 관리자는 커널 명령줄 매개변수를 사용하여 최대 C-state 값을 하드 코딩해야 합니다.

사전 요구 사항

  • tuned 패키지가 설치되어 있습니다.
  • tuned 서비스가 활성화되어 실행되고 있습니다.

절차

  1. 활성 프로필을 표시합니다.

    # tuned-adm active
    Current active profile: network-latency
  2. 사용자 정의 TuneD 프로파일의 디렉터리를 생성합니다.

    # mkdir /etc/tuned/network-latency-custom/
  3. 다음 콘텐츠를 사용하여 /etc/tuned/network-latency-custom/tuned.conf 파일을 만듭니다.

    [main]
    include=network-latency
    
    [cpu]
    force_latency=cstate.id:1|2

    이 사용자 정의 프로필은 network-latency 프로필의 모든 설정을 상속합니다. force_latency TuneD 매개변수는 대기 시간을 microseconds(microseconds)로 지정합니다. C 상태 대기 시간이 지정된 값보다 크면 Red Hat Enterprise Linux의 유휴 상태로 인해 CPU가 더 높은 C 상태로 이동하지 않습니다. force_latency=cstate.id:1|2 로 TuneD는 먼저 /sys/devices/system/cpu_<number>_/cpuidle/state_<cstate.id>_/ 디렉터리가 존재하는지 확인합니다. 이 경우 TuneD는 이 디렉터리의 대기 시간 파일에서 대기 시간 값을 읽습니다. 디렉터리가 존재하지 않는 경우 TuneD는 2마이크로초를 폴백 값으로 사용합니다.

  4. network-latency-custom 프로필을 활성화합니다.

    # tuned-adm profile network-latency-custom

34.3.4. 커널 명령줄 옵션을 사용하여 C-state 비활성화

processor.max_cstateintel_idle.max_cstat 커널 명령줄 매개변수는 최대 소비 상태(C-state) CPU 코어를 구성할 수 있습니다. 예를 들어, 매개변수를 1 로 설정하면 CPU가 C1 미만의 C-state를 요청하지 않습니다.

이 방법을 사용하여 호스트의 애플리케이션 대기 시간이 C-states의 영향을 받는지 테스트합니다. 특정 상태를 하드 코딩하지 않으려면 더 동적 솔루션을 사용하는 것이 좋습니다. 사용자 정의 TuneD 프로필을 사용하여 C-state 비활성화를 참조하십시오.

사전 요구 사항

  • tuned 서비스가 C-state 설정을 업데이트하지 않도록 실행 중이거나 구성되지 않았습니다.

절차

  1. 시스템에서 사용하는 유휴 드라이버를 표시합니다.

    # cat /sys/devices/system/cpu/cpuidle/current_driver
    intel_idle
  2. 호스트에서 intel_idle 드라이버를 사용하는 경우 intel_idle.max_cstate 커널 매개변수를 설정하여 CPU 코어가 사용할 수 있는 가장 높은 C-state를 정의합니다.

    # grubby --update-kernel=ALL --args="intel_idle.max_cstate=0"

    intel_idle.max_cstate=0 을 설정하면 intel_idle 드라이버가 비활성화됩니다. 결과적으로 커널은 EFI 펌웨어에 설정된 C-state 값을 사용하는 acpi_idle 드라이버를 사용합니다. 이러한 이유로 processor.max_cstate 를 설정하여 이러한 C-state 설정을 재정의합니다.

  3. CPU 공급 업체와 독립적으로 모든 호스트에서 CPU 코어에서 사용할 수 있어야 하는 가장 높은 C-state를 설정합니다.

    # grubby --update-kernel=ALL --args="processor.max_cstate=0"
    중요

    intel_idle.max_cstate=0 외에 processor.max_cstate=0 을 설정하면 acpi_idle 드라이버가 processor.max_cstate 값을 재정의하고 1 로 설정합니다. 결과적으로 processor.max_cstate=0 intel_idle.max_cstate=0 인 경우 커널이 사용할 가장 높은 C 상태는 C0이 아닙니다.

  4. 변경 사항을 적용하려면 호스트를 다시 시작하십시오.

    # reboot

검증

  1. 최대 C-state를 표시합니다.

    # cat /sys/module/processor/parameters/max_cstate
    1
  2. 호스트에서 intel_idle 드라이버를 사용하는 경우 최대 C-state를 표시합니다.

    # cat /sys/module/intel_idle/parameters/max_cstate
    0

추가 리소스