 |
|
난이도 : 중급 Jenifer Hopper, Software Engineer, IBM
원문 게재일 : 2009 년 9 월 15 일 번역 게재일 : 2009 년 10 월 27 일 세 편의 기사로 구성된 이 시리즈에서는 전력 효율 향상을 위해 시스템을 조정하는
방법에 대해 설명합니다. 먼저 Part 1에서는 전력 효율 향상을 위해 Linux 기반 System x 서버를 미세
조정하는 데 필요한 구성 요소와 개념을 간단히 살펴본 후 Linux CPUfreq 서브시스템을 활성화하는 방법,
C 및 P 상태에 대한 지침을 가져오는 방법 및 다섯 가지 커널 내 거버너(governor) 중에서 시스템의 전력 효율
향상을 위해 필요한 거버너를 결정하는 방법에 대해 설명합니다. 의견 나누기: 회사에서 절전이 얼마나 중요한지에 대한 의견을 추가해주기 바랍니다.
 | 이 시리즈의 정보
이 시리즈에서는 전력 효율을 높이기 위해 Linux 기반 IBM System x 서버를 조정하는
방법에 대해 살펴본다. 커널 내 거버너 및 관련 설정과 거버너의 사용 방법에 대해 알아본 후 조정된
거버너가 전력 성능 및 전자 상거래 워크로드에 미치는 효과를 살펴본다. 예제는 RHEL 5.2(Red Hat
Enterprise Linux 버전 5.2)가 실행 중인 System x 서버를 기반으로 하지만 모든 2.6.x 커널과 주파수
배율 조정을 지원하는 모든 유형의 프로세서에도 동일한 지침이 적용된다.
Part 1에서는 전력 효율 향상을 위해 시스템을 조정하는 데 필요한 Linux CPUfreq
서브시스템, C 및 P 상태, 다섯 가지 커널 내 거버너 등을 포함한 구성 요소와 개념에 대해 설명한다.
Part 2에서는 Linux CPUfreq 서브시스템의 일반 설정과 다섯 가지 커널 내 거버너 즉,
성능, 절전, 사용자 공간, 온디맨드 및 일반 거버너와 해당 설정에
대해 자세히 살펴본다.
Part 3에서는 조정된 상태와 조정되지 않은 상태에서 다섯 가지 커널 내 거버너의 성능을
비교하여 시스템에 대한 전력 조정을 통해 얻을 수 있는 결과를 확인한다.
|
|
전력 효율은 사업 비용이나 환경 문제와 관련된 모든 사람에게 중요한 고려
사항이다. 이 기사에서는 Linux CPUfreq 서브시스템과 커널 내 거버너를 사용하여 프로세서의
작동 주파수를 변경하여 성능에 큰 영향을 주지 않으면서 시스템의 전력 효율을 향상시키는 방법에
대해 설명한다. 하지만 전력 효율 조정은 실제 하드웨어에 의존하게 된다는 한계가 있다. (이 시리즈의
Part 2에서 이에 대해 자세히 설명한다.)
Linux CPUfreq 서브시스템
2.6.0 Linux 커널부터는 CPUfreq 서브시스템을 통해 프로세서 주파수 배율을 동적으로
제어할 수 있다. 낮은 클럭 속도로 작동하는 프로세서는 속도에 비례하여 전력 소비량과 발열량이
낮다. 이처럼 클럭 속도를 동적으로 제어하는 기능을 사용하면 시스템이 많이 사용되지 않을 때
전력을 적게 소비하도록 시스템을 조절할 수 있다.
CPUfreq 구조에서는 거버너와 데몬을 사용하여 시스템의 정적 또는 동적 전력
정책을 설정한다. 이 기사의 뒷부분에서 설명할 동적 거버너는 CPU 사용률에 따라 CPU 주파수를
전환하여 성능에 영향을 주지 않으면서 전력 소비를 줄일 수 있다. 이러한 거버너에서는 사용자
조정 기능도 제공되므로 주파수 배율을 쉽게 변경하고 사용자 정의할 수 있다. 또한 sched_mc_power_savings
및 sched_smt_power_savings 설정은 스레드 통합을 통해 전력을 절약할
수 있다.
C 상태 및 P 상태
CPUfreq에 대한 설명에 앞서 C 및 P 상태에 대해 먼저 알아보자.
C 상태: 거의 대부분 유휴 상태
프로세서가 실행 중인 C0 상태를 제외한 모든 C 상태는 전력을 절약하기 위해
프로세서가 구성 요소에 클럭을 할당하지 않고 구성 요소를 종료하는 유휴 상태이다. C 상태가 깊어질수록
프로세서 클럭을 중지하거나 들어오는 인터럽트를 중지하는 등의 절전 단계가 더 많이 수행된다. 이러한
상태에서는 시스템이 유휴 상태일 때 절전 효과를 얻을 수 있다.
유휴 상태에서 절전에 도움이 되는 C1E 모드(향상된 C1 또는
C1 향상 모드라고도 함)도 있다. C1E 모드는 클럭 시그널만 중지시키는 일반적인 C1
상태에 비해 전압과 주파수를 낮춰서 더 큰 절전 효과를 제공한다. 실제로 C1E에는 다른 CPUfreq
거버너보다 빠르게 전압과 주파수를 낮출 수 있는 기능이 있다.
모든 프로세서에 이러한 옵션이 모두 있는 것은 아니지만 C 상태와 C1E를 사용하려면
CPU C State 및 C1E(또는 유사 옵션) BIOS
옵션이 활성화되어 있어야만 유휴 상태에서 높은 절전 효과를 얻을 수 있다. 일부 시스템에서는 C3
및 C6 깊이의 유휴 상태까지도 지원한다.
C 상태가 깊을수록 절전 효과가 높다는 것을 기억하자.
P 상태: 작동 중
P 상태는 CPU 주파수 및 전압과 관련하여 작동이 가능한 상태이다. P 상태가 높을수록
프로세서 실행 시 주파수와 전압이 낮아진다. CPUfreq 거버너에서는 P 상태를 사용하여 주파수를 변경하고
전력 소비량을 낮춘다.
P 상태와 CPUfreq 거버너를 사용하려면 Processor Performance
States BIOS 옵션(또는 유사 옵션)이 시스템에서 활성화되어 있어야 한다. 그림 1은 C 및 P 상태를
보여 주는 간단한 다이어그램이다.
그림 1. C 및 P 상태
CPUfreq 서브시스템의 전제 조건
CPUfreq 서브시스템을 사용하려면 먼저 이 섹션에서 설명하는 전제 조건을 갖춰야
한다. CPUfreq는 RHEL 5.2에서 기본적으로 활성화되며 일반적으로 다른 배포판에서도 활성화된다. CPUfreq가
활성화되었는지 여부를 빠르게 확인하려면 /sys 파일 시스템을 보면 된다. /sys/devices/system/cpu/cpu*/cpufreq/에
cpufreq 디렉토리가 있으면 CPUfreq가 시스템에서 현재 활성화되어 있는 것이다. 이 디렉토리가 없으면
다음 지침에 따라 필요한 작업을 수행한다.
먼저 프로세서가 주파수 배율 조정을 지원할 수 있는지 확인한다. 이 기사의 뒷부분에
있는 참고자료에서 CPUfreq 서브시스템을 지원하는 하드웨어 목록을 확인할
수 있다.
그런 다음 커널 구성 파일을 살펴본다. RHEL 5.2 커널에는 일반적으로 모든 필수 구성 요소가
기본적으로 설정되어 있지만 시스템에 맞게 시작하려면 일부 설정값을 변경할 수도 있다. 구성 파일의 CPU Frequency scaling 섹션에 다음과 같은 옵션이 있다.
CONFIG_CPU_FREQ
커널의 CPU 주파수 배율 조정을 사용하려면 이 옵션을 y로 설정해야 한다.
CONFIG_CPU_FREQ_GOV_PERFORMANCE, CONFIG_CPU_FREQ_GOV_POWERSAVE,
CONFIG_CPU_FREQ_GOV_USERSPACE, CONFIG_CPU_FREQ_GOV_ONDEMAND,
CONFIG_CPU_FREQ_GOV_CONSERVATIVE
이러한 옵션은 사용 가능한 각 CPUfreq 거버너에 대한 것이다. 거버너를 사용하려면
해당 구성 옵션을 y 또는 m으로 설정한다.
이 옵션을 y로 설정하면 해당 거버너의 모듈이 커널에 빌드되며 m으로
설정한 경우에는 부팅할 때마다 다음 명령 중 하나 또는 전체를 실행하여 모듈을 직접 로드해야 한다.
modprobe cpufreq_performance
modprobe cpufreq_powersave
modprobe cpufreq_userspace
modprobe cpufreq_ondemand
modprobe cpufreq_conservative
m을 선택한 경우에는 거버너 모듈을 /etc/rc.local에
추가하여 부팅 시에 모듈을 로드할 수 있다. CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE
또는 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE를 y로
설정하여 사용자 공간 또는 성능 거버너를 기본 거버너로 설정할 수 있다.
또한 sched_mc_power_savings와 sched_smt_power_savings를
사용하려면(후속 기사 참조) 구성 파일의 Processor type and features 섹션에 있는 CONFIG_SCHED_MC
및 CONFIG_SCHED_SMT 옵션을 y로 설정해야 한다.
구성 파일의 변경 사항을 적용하려면 커널을 다시 빌드하고 부팅해야 한다. 다시 빌드하는
방법을 알고 있겠지만 자세한 방법을 정확히 알고 있지 않다면 Linux 커널을 다시 빌드하는 방법에 대한
지침을 제공하는 자료를 확인하기 바란다(참고자료 참조).
거버너 소개
CPUfreq 서브시스템과 함께 사용할 수 있는 커널 내 거버너는 다섯 가지이다. 이러한
거버너는 특정 기준에 따라 프로세서 주파수를 설정하며 일부 거버너는 시스템 또는 사용자에 의해
변경되는 입력에 따라 주파수를 동적으로 변경하기도 한다. 이 기사에서는 2.6.18 커널을 기반으로 하는
RHEL 5.2를 주로 다루고 있으므로 이러한 거버너를 모두 사용할 수 있다. 이제부터 이러한 거버너에
대해 알아보자. (이 시리즈의 Part 2와 Part 3에서는 거버너에 대해 자세히 설명한다.)
성능 거버너: 최고 주파수
성능 거버너는 프로세서를 사용 가능한 최고 주파수로 정적으로 설정한다. 이
거버너에서 사용할 수 있는 주파수 범위를 사용자가 조절할 수 있다. 이름으로 알 수 있듯이 이
거버너의 목표는 프로세서 클럭 속도를 최대 레벨로 설정하여 유지하면서 시스템의 성능을
최대로 끌어올리는 것이다. 거버너를 조정하여 선택된 주파수를 변경할 수 있기는 하지만
기본적으로 이 거버너는 절전 효과를 제공하지 않는다.
절전 거버너: 최저 주파수
이에 반해 절전 거버너는 프로세서를 사용 가능한 최저 주파수로 정적으로
설정한다. 이 거버너에서 사용할 수 있는 주파수 범위도 사용자가 조절할 수 있다. 이 거버너의
목표는 가능한 최저 속도로 항상 실행하는 것이다. 이 거버너를 사용하면 프로세서 사용량이
많아지더라도 지정된 주파수를 초과할 수 없기 때문에 시스템 성능이 분명히 저하될 수 있다.
실제로 최대 절전 효과는 일반적으로 C 상태의 유휴 상태에서 발생하기 때문에
이 거버너는 절전 효과를 제공하지 않는다. 절전 거버너를 사용하면 프로세스가 최저 주파수로 실행되기
때문에 실행 중인 프로세스의 실행 시간이 지연된다. 따라서 시스템이 유휴 상태로 진입하여 C 상태 절전
효과를 얻는 데 더 많은 시간이 소요된다.
사용자 공간 거버너: 수동 주파수
사용자 공간 거버너를 사용하면 주파수를 수동으로 선택하고 설정할 수 있다. 또한
이 거버너는 사용자 공간에서 실행 중인 프로세서 주파수 데몬과 함께 작동하면서 주파수를 제어한다.
(Part 2에서 데몬에 대한 추가 설명과 예제를 볼 수 있다.) 이 거버너는 미리 설정되어 있지 않거나
다른 거버너에서 사용할 수 없는 고유한 전력 정책을 설정하는 데 유용하며 정책을 실험할 때도 사용할
수 있다.
사용자 공간 거버너 자체는 주파수를 동적으로 변경하지 않는다. 대신 이 거버너를
사용하면 사용자 또는 사용자 공간 프로그램에서 프로세서 주파수를 동적으로 선택할 수 있다.
온디맨드 거버너: 프로세서 사용을 기반으로 주파수 변경
2.6.10 커널에서 새롭게 도입된 온디맨드 거버너는 프로세서 사용률에 따라
프로세서 주파수를 동적으로 변경하는 최초의 커널 내 거버너였다. 온디맨드 거버너는 프로세서
사용률을 검사하여 임계값을 초과하면 주파수를 사용 가능한 최고 레벨로 설정한다. 사용률이
임계값보다 낮으면 주파수를 사용 가능한 다음 레벨로 낮춘다. 시스템의 사용률이 계속해서 임계값
아래에서 유지될 경우에는 사용 가능한 최저 레벨이 설정될 때까지 거버너가 주파수를 단계별로
낮춘다.
사용 가능한 주파수의 범위, 거버너에서 시스템의 사용률을 검사하는 빈도 및
사용률 임계값을 사용자가 제어할 수 있다.
보존적 거버너: 세분화된 온디맨드
2.6.12 커널에서 새롭게 도입된 보존적 거버너는 온디맨드 거버너와 비교했을 때
프로세서 사용률을 기반으로 주파수를 동적으로 제어한다는 면에서 유사하지만 작동 방식에 약간의
차이가 있으며 성능을 좀 더 세부적으로 증가시킬 수 있다. 보존적 거버너는 프로세서 사용률을
검사하여 사용률이 임계값보다 높거나 낮을 때 최고 주파수로 바로 설정하는 온디맨드 거버너와는
달리 사용 가능한 다음 레벨로 주파수를 올리거나 낮춘다.
사용 가능한 주파수의 범위, 거버너에서 시스템의 사용률을 검사하는 빈도, 사용률
임계값 및 주파수 단계 비율을 사용자가 제어할 수 있다.
후속 기사 소개
Part 2에서는 서브시스템의 설정 및 사용에 대해 자세히 설명한다. Linux CPUfreq
서브시스템 및 다양한 인터페이스 옵션에 대한 일반적인 설정 및 사용 설정에 대해 알아본다. 가장
적합한 도구를 찾는 데 도움을 주기 위해 거버너 관련 설정과 관리 스케줄러에 대해서도 살펴본다.
Part 3에서는 두 가지 유명한 구성 워크로드를 사용하여 다양한 워크로드에 대한 각 거버너의 효과에 대해 설명한다.
참고자료 교육
제품 및 기술 얻기
-
developerWorks에서 직접 다운로드할 수 있는 IBM
시험판 소프트웨어를 사용하여 Linux와 관련된 후속 개발 프로젝트를 구현해 볼 수 있다.
토론
-
사용자의 개인 프로파일과 사용자 정의 홈 페이지가 제공되는 My
developerWorks community에서는 관심을 가지고 있는 developerWorks의 여러 주제를 추적할 수 있으며 다른 developerWorks 사용자들과 의견을 나눌 수도 있다.
필자소개  | 
|  | Jenifer Hopper는 텍사스주 오스틴에 소재하고 있는 IBM Linux performance group의 소프트웨어
엔지니어이며 현재는 주로 HPC(High Performance Computing) 및 에너지 워크로드와 시스템 프로파일러
및 데이터 분석 도구에 관한 업무를 맡고 있다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|