일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Tizen
- 야구
- 손민한
- ubuntu 12.04
- mysql
- NC다이노스
- NC 다이노스
- 뉴스타파
- 애플
- ubuntu
- Linux
- 문파문파
- 해외직구
- 프로야구
- 김경문
- 안드로이드
- 태그를 입력해 주세요.
- Git
- 국정원
- 블로그
- arm
- 단통법
- 우분투
- 데이터베이스
- 인공지능
- 타이젠
- 리뷰
- 문파문파 공략
- 조세피난처
- python
- Today
- Total
꿈꾸는 사람.
Linux kernel의 CPU governor란 무엇인가? android에서 사용되는 기본 governor는? 본문
1. 서론
지금 IT 업계에는 치열한 경쟁이 벌어지고 있다.
휴대폰의 제왕 노키아의 침몰, 영원할 것 같던 PC의 맹주 윈텔의 쇠락.
이 둘의 연결 고리를 자세히 들여다 보면 두 개의 기업이 있다.
ARM과 apple이다.
ARM은 어느새 모바일 디바이스를 넘어 embedded 인텔의 서버 시장까지 영역을 넓히고 있다.
apple은 iphone으로 모바일 혁명을 창조하여 기존 휴대폰 시장을 철저히 붕괴시켰다.
하며터면 삼성전자와 엘지전자까지 휴대폰 업계에서 퇴출시킬 정도의 강력한 충격이었다.
이들의 성공을 기술적인 면에서 살짝 들여다 보는 것도 유익할 것이다.
ARM이 진출한 시장은 피처폰 시대부터의 휴대폰이다.
휴대폰은 PC와 달리 이동 환경이므로 배터리 수명이 관건이라 저전력이 핵심이다.
단순한 성능이 아니라 소모전력 당 성능으로 그 기준이 달라진 것이다.
이 부분이 인텔이 가장 취약한 부분이다.
슈퍼컴퓨터에서 고성능 서버, 개인용 데스크탑과 노트북까지 인텔 CPU는 말 그대로 슈퍼 갑인 것이다.
하지만 다윗이 골리앗을 쓰러트린데는 저전력이란 강력한 무기인 것이다.
iPhone에 쓰이는 iOS는 다위(Darwin) 파운데이션을 기반으로 하고 다윈은 오픈 소스 유닉스 운영체제이다.
그럼 iPhone의 대응하는 android 또한 리눅스 기반의 운영체제이다.
결론적으로 저전력 CPU와 유닉스/리눅스 운영체계의 결합이 지금의 모바일 혁명의 기술적 핵심인 것이다.
그럼 다시 일반적으로 좋은 성능에서 배터리를 오래 사용하기 위해서 android에서는 무엇을 어떻게 하는지 알아보자.
2. CPU frequency governor란 무엇인가?
CPU는 여러 주파수에서 동작이 가능하도록 설계되어 있으나, 리눅스 커널에서 대부분의 cpufreq 드라이버들은 CPU를 하나의 주파수로 설정하도록 되어 있다.
CPU의 사용량이 많지 않으면 저속으로 많아지면 고속으로 동작할 필요가 있다.
이런 동적 주파수 확장을 제공하기 위해서 타겟 주파수를 드라이버에 알려줄 것이 필요한다.
즉, CPU frequency governor는 CPUfreq policy 내에서 무슨 주파수를 사용할 것인지 결정한다.
CPUfreq policy는 주파수 제한과 사용될 governor로 구성된다.
3. Android CPU governor들
리눅스 커널에서 기본 제공하는 몇 개에 비해 android에는 상당히 많은 governor가 제공되고 있다.
- OnDemand, OnDemandX
- Performance vs Powersave
- Conservative
- Userspace
- Min Max
- Interactive, InteractiveX
- Smartass
- Scary
- Lagfree
- Smoothass
- Brazilianwax
- SavagedZen
- Laxy
- Lion heart, Lion heartX
- Intellidemand
- Hotplug
이들 중 기본적인 것들(Performance, Powersave, Userspace)과 중요한 것들(OnDemand, Interactive)을 간략히 정리하면 아래와 같다.
governor 종류 |
설명 |
OnDemand |
현재 사용량에 따라 CPU frequnecy를 설정. CPU는 주파수를 빠르게 변경할 능력이 필요함. |
OnDemandX |
배터리 친화적인 OnDemand이며 I/O 스케줄러에 따라 성능이 크게 좌우된다. |
Conservative |
느린 OnDemand. 가능한 최저 속도에서 동작하도록 구현됨. 예) OnDemand는 min에서 max로 바로 변경된다. Conservative는 min -> lower -> mid -> hig -> max로 변경된다. |
Interactive | OnDemand처럼 CPU에 위치한 부하에 따라 주파수를 변경하나 훨씬 빠르게 반응한다. |
Performance |
CPU를 최고 주파수로 설정한다. |
Powersave |
CPU를 최저 주파수로 설정한다. (Performance의 반대이다.) |
Userspace |
테스트를 위해 사용된다. CPU를 사용자가 지정한 주파수로 동작하게 한다. |
4. OnDemand governor의 튜닝 패러미터들
최소한의 소모전류로 보다 나은 성능을 얻기 위해 주요 패러미터들의 값을 튜닝해야 하며 이는 여러 사용성 시나리오에 기반하여 수많은 측정에 따른 결과 분석으로 구할 수 있다.
일반적으로 스마트 폰이 쓰이는 전화, 카톡, 브라우징, 게임과 카메라 등이다.
각 패러미터들의 설정 후 시나리오별 성능과 소모전류를 측정하여 목표에 부합하는 패러미터들의 값을 선택해야 하면 그 내용은 아래와 같다.
튜닝할 패러미터 |
의미 |
sampling_rate |
uS 단위로 측정되며 CPU 사용량을 측정하기 위해 얼마나 자주 깨어나야 하는지를 설정하는 것이다. |
up_threshold |
커널이 주파수를 증가할지에 대하여 결정을 내릴 sampling_rate 간의 평균 CPU 사용량의 기준점. |
sampling_down_factor |
CPU가 최대 속도로 동작하는 기간 중 주파수를 줄일 때를 커널이 판단할 비율(rate) |
5. Interactive governor의 튜닝 패러미터들
OnDemand governor와 같은 목적으로 튜닝할 자체 패러머터들을 아래와 같다.
튜닝할 패러미터 |
의미 |
min_sample_time |
주파수를 낮추기 전에 현재 주파수에서 머물러야 할 최소 시간의 양. 기본은 80000 uS이다. |
hispeed_freq |
CPU 부하가 분출할 때 저속에서 올릴 높은 주파수. |
go_hispeed_load | hispeed_freq로 증가 시킬 CPU 부하. 기본 값은 85% |
timer_rate | CPU가 idle이 아닐 때 부하를 다시 계산할 샘플링 비율. 기본 값은 20000 uS |
above_hispeed_delay | 속도가 hispeed_freq일 때, 속도를 올리기 전에 대기할 시간. |
6. Governor interface
새로운 governor는 cpufreq_register_governor 함수를 통해 CPUfreq 코어에 자신을 등록해야 한다.
이 때 아래 값들이 전달되어야 한다.
governor->name |
governor의 유일한이름. |
governor->governor | governor 콜백 함수. |
governor->owner |
governor에 대한 모듈 |
governor 콜백 함수가 받을 이벤트
CPUFREQ_GOV_START
CPUFREQ_GOV_STOP
CPUFREQ_GOV_LIMITS
'IT > Android' 카테고리의 다른 글
aosp 소스 전체를 특정 tag 버전으로 변경하는 shell program. (0) | 2013.06.04 |
---|---|
Summary to tune the governor! (turning governor) (가버너 튜닝) (0) | 2013.05.25 |
타이젠(TIZEN)의 등장. 애플과 구글의 구도를 깰 수 없을 듯. (0) | 2013.05.23 |
android kernel source 받는 방법. (0) | 2013.05.16 |
JB 소스 받기. (repo 설치 부터 repo sync/start/forall까지) (0) | 2013.05.01 |