31.3. 네트워크 대기 시간 개선
CPU 전원 관리 기능은 시간에 민감한 애플리케이션 처리에서 원치 않는 지연을 유발할 수 있습니다. 이러한 전원 관리 기능 중 일부 또는 모두를 비활성화하여 네트워크 대기 시간을 개선할 수 있습니다.
예를 들어 서버가 로드가 많은 것보다 유휴 상태일 때 대기 시간이 길면 CPU 전원 관리 설정이 대기 시간에 영향을 미칠 수 있습니다.
CPU 전원 관리 기능을 비활성화하면 정전 및 전력 소비가 증가할 수 있습니다.
31.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)를 생성할 수 있습니다. 인터럽트를 처리하는 동안 필요한 잠금으로 인해 시스템은 모든 인터럽트를 처리하는 동안 잠시 중단될 수 있습니다. 이로 인해 이벤트에 대한 애플리케이션 응답이 크게 지연될 수 있습니다.
예 31.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 ...
추가 리소스
31.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
패키지에서 제공
31.3.3. 사용자 정의 TuneD 프로필을 사용하여 C-state 비활성화
TuneD 서비스는 커널의PMQOS
(Power Management Quality of Service) 인터페이스를 사용하여 소비 상태(C-states) 잠금을 설정합니다. 커널 유휴 드라이버는 이 인터페이스와 통신하여 C-state를 동적으로 제한할 수 있습니다. 따라서 관리자는 커널 명령줄 매개변수를 사용하여 최대 C-state 값을 하드 코딩해야 합니다.
사전 요구 사항
-
tuned
패키지가 설치되어 있습니다. -
tuned
서비스가 활성화되어 실행되고 있습니다.
절차
활성 프로필을 표시합니다.
# tuned-adm active Current active profile: network-latency
사용자 정의 TuneD 프로파일의 디렉터리를 생성합니다.
# mkdir /etc/tuned/network-latency-custom/
다음 콘텐츠를 사용하여
/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마이크로초를 폴백 값으로 사용합니다.network-latency-custom
프로필을 활성화합니다.# tuned-adm profile network-latency-custom
추가 리소스
31.3.4. 커널 명령줄 옵션을 사용하여 C-state 비활성화
processor.max_cstate
및 intel_idle.max_cstat
커널 명령줄 매개변수는 최대 소비 상태(C-state) CPU 코어를 구성할 수 있습니다. 예를 들어, 매개변수를 1
로 설정하면 CPU가 C1 미만의 C-state를 요청하지 않습니다.
이 방법을 사용하여 호스트의 애플리케이션 대기 시간이 C-states의 영향을 받는지 테스트합니다. 특정 상태를 하드 코딩하지 않으려면 더 동적 솔루션을 사용하는 것이 좋습니다. 사용자 정의 TuneD 프로필을 사용하여 C-state 비활성화를 참조하십시오.
사전 요구 사항
-
tuned
서비스가 C-state 설정을 업데이트하지 않도록 실행 중이거나 구성되지 않았습니다.
절차
시스템에서 사용하는 유휴 드라이버를 표시합니다.
# cat /sys/devices/system/cpu/cpuidle/current_driver intel_idle
호스트에서
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 설정을 재정의합니다.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이 아닙니다.변경 사항을 적용하려면 호스트를 다시 시작하십시오.
# reboot
검증
최대 C-state를 표시합니다.
# cat /sys/module/processor/parameters/max_cstate 1
호스트에서
intel_idle
드라이버를 사용하는 경우 최대 C-state를 표시합니다.# cat /sys/module/intel_idle/parameters/max_cstate 0
추가 리소스
- CPU "C-states"란 무엇이며 필요한 경우 이를 비활성화하는 방법은 무엇입니까? (Red Hat Knowledgebase)
-
/usr/share/doc/kernel-doc- <version> /Documentation/admin-guide/pm/cpuidle.rst
-kernel-doc
패키지에서 제공