음.. 요즘 퇴사를 앞두고 있기에 .. 회사를 아주 내맘대로 널럴하게 다니고 있는중인데,
( 뭐 물론 위에서는 싫어하지만... )
Cgroup 이나 Tuned 를 이용한 시스템 튜닝에 대한 글을 쓰기에는,
아직 내공이 정갈하게 정련되지 못해서 간단하게 CPU frequency 를 이용한
단위 전력당 퍼포먼스를 높이기 위한 방법과 Green Computing 에 대해서
찌질하게나마 써보려고 한다....
Kernel 2.6.4 던가? 내기억에는 사실 RHEL4 부터 들어갔던 걸로 기억하는건데,기
cpuspeed 라는 데몬이 있다는걸 기억하는 사람들이 꽤 될거라고 난 확신한다.
이 cpuspeed 라는 데몬을 처음 설치하는 OS 설치엔지니어들의 경우 주로 꺼놓는걸
추천해서 그냥 그러려니 하고 넘어갔을텐데..
이녀석이 하는 일들에 대해서 정확히 짚고 넘어가 줘야 한다고 난 주장한다.
단순히 이녀석이 하는 일이라곤 전력을 아끼기위해 CPU 클럭을 조절해 주는 것!
이라고 생각하는데, 물론 기본 기능은 맞다. 그러나 이 기능을 이용해서 무엇이
가능하고, 무엇을 가져다 줄 것인지는 잘 모르는 경우가 많다.
보통 서버 엔지니어들 ( H/W ) 이 서버를 설치해주고서 BIOS 나 기타 펌웨어들을
올리는걸 유심히 잘 살펴보면, BIOS 설정에서 Performance 관련 혹은 전력관련 항목에서
Max performance 를 (HP 기준) 선택하고 권장하는 것을 경험 해 보았을 것이다.
일단 CPU 상태 레벨에 대한 선 이해가 필요한데,
간단하게 CPU 상태를 나타내는 플래그는 C 와 P 로 나뉘어지고,
C 는 전력소비 절감을 위한 유휴상태를, P 는 작업을 수행하는 상태를 나타낸다.
C 의 경우 숫자를 통해 C1~ C6 등 Depth 를 이용하여 유휴전환상태의
레벨을 잘게 나눠 구분 할 수 있으며, C 의 숫자가 높아지면 높아질수록,
단순 클럭 시그널만 중지시키는 것뿐 아니라 클럭 주파수와 시그널 모두에 대해서
빠르게 낮은 주파수를 설정 할 수 있게 해주므로 전력효율이 커진다고 볼 수 있다.
< state P, C 에 대한 간단한 다이어그램 - 출처: IBM >
뭐 기본적인 아키텍쳐에 대한 것들은 따로 살펴보도록 하고,
CPU freq 를 사용하기 위한 조건으로는 단순히 RHEL5.2 이상정도면 될거 같다.
사실 커널에서 CONFIG_CPU_FREQ 옵션을 활성화 시키고 컴파일 해야 하는데,
RHEL 은 다 돼있다는 전제로 설명하겠다.
CPU frequency (줄여서 freq 라 하겠음) 에서는 Governor 를 이용해서
주파수를 조절 하는 구조로 되어 있고, Kernel 2.6.18 이상의 RHEL5 에서
제공하는 거버너는 총 다섯가지가 제공된다.
( conservative, userspace, powersave, ondemand, performance )
Performance : 모든 클럭을 최대속도로 내는 것을 기본 정책으로 하며,
전원관리의 정책은 전혀 적용 되지 않는다.
Powersave : 직관적으로 아주 최소의 주파수를 사용하도록 설정하는
정책이며, 어떤 경우가 있어도 정해진 max 주파수를 넘기지 않도록 한다.
Ondemand : 임계값을 기준으로 임계값을 초과하는 작업이 필요할 시 주파수를 높이고, 임계값을 밑도는 작업의 경우 주파수를 낮추는 동적 거버너이다.
Conservative : 보존적 거버너라고 불리며, Ondemand 보다 훨씬 세분화된 동적 거버너이다.
이녀석의 특징은 임계값을 기준으로 주파수를 조절하는것은 동일하나 사용된 주파수의 바로 전 레벨의 주파수로 설정을 한다.
(default 5% 단위로 올리고 내린다.)
Userspace : 사용자 지정 거버너라고 생각하면 되고 일일히 사용자가 설정을 해줄 수 있도록 하는 거버너이다.
보통 디폴트로는 conservative (보존적) 거버너로 되어 있는것 같다.
이제 이녀석을 어떻게 조절 하는지에 대해서 설명하겠는데, 여기서 필요한게
바로 cpuspeed 데몬과 cpufrequtils 패키지 이다.
cpuspeed 데몬은 /etc/sysconfig/cpuspeed 설정파일을 바탕으로
거버너와 up,down threshold 등을 지정한 값에 의해 freq 를 설정해준다.
cpufrequtils 에서 가능한 도구들은 freq 정보 및 freq 에 대한 수동설정의
기능을 제공해 준다.
사실 위 도구들은 /sys/devices/system/cpu 디렉토리 아래 각 cpu 넘버들을
scaling_available_frequencies 에서는 사용가능한 freq 를 나열해주고,
scaling_min_freq 와 max_freq 는 각각 cpu freq 에 대한 범위를,
cpuinfo_cur_freq 는 현재 freq 상태를 보여준다.
scaling_governor 는 현재 적용된 거버너를 나타낸다.
[root@Mirr-N cpu]# cpupower frequency-info
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0 1 2 3
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us.
hardware limits: 1.20 GHz - 2.40 GHz
available frequency steps: 2.40 GHz, 2.40 GHz, 2.27 GHz, 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz, 1.47 GHz, 1.33 GHz, 1.20 GHz
available cpufreq governors: conservative, userspace, powersave, ondemand, performance
current policy: frequency should be within 2.40 GHz and 2.40 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.20 GHz (asserted by call to hardware).
boost state support:
Supported: yes
Active: yes
2000 MHz max turbo 2 active cores
2200 MHz max turbo 1 active cores
[root@Mirr-N cpu]#
난 현재 페도라16 에서 작성을 하고 있기에 cpuspeed 가 아닌 cpupower
라는 툴로 정보를 사용하고 보고 있는데, 크게 다를건 없다.
cpufreq-info 라는 명령셋등으로 바꿔서 실행하면 된다. ( cpufrequtils )
사실 CPU freq 에대한 설정방법이나 개념은 이정도면 충분하다 생각하며,
( 절대 글쓰다가 귀찮아져서가아니다... 레알... )
IBM 에서 가져온 각 거버너에 대한 전력 효율 변화 그림을 좀 보자.
(spec2008 의 결과라고 한다.)
< 기본 거버너에서의 점수와 전력소비량 >
역시 Powersave 상태가 제일 전반적으로 떨어지고,
cpuspeed 를 이용한 userspace 거버너의 성능과 효율이 좋아 보인다.
< 기본거버너에서의 전력대비 성능 비교 : 비율이 높을수록 성능이 좋다. >
이번에도 역시 cpuspeed 를 이용한 userspace 거버너가 발군이다.
이번에는 나름대로 조절이 가능한 Ondemand 와 conservative 를 비교했다.
< ondemand 튜닝 후 성능 효율 : 임계값 98 >
< 튜닝한 conservative 성능 효율 비교 : 임계값 98% >
< 조정된 ondemand, conservative 와 다른 거버너들 성능효율 비교 >
자.. 이제 userspace 부분과 conservative 가 비슷해졌다!
이젠 실제 APM 으로 구성된 쇼핑몰에 대한 시뮬레이션 결과를 보여준다.
< Latency - 2000 개의 클라이언트 요청시 >
< 와트당 성능 비교 >
물론 항상 최대치를 뿌리도록 설정하는 Performance 거버너보다 Ondemand 나
Conservative 가 뛰어나다라는 설명이 아니다.
단순한 성능으로 보면 미묘한 차이들이 있고, 이 차이는 종국에 큰 차이를 보여 줄 수 있다.