반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

꿈꾸는 사람.

Linux kernel의 CPU governor란 무엇인가? android에서 사용되는 기본 governor는? 본문

IT/Android

Linux kernel의 CPU governor란 무엇인가? android에서 사용되는 기본 governor는?

현무랑 니니 2013. 5. 2. 18:15
반응형

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 사용량을 측정하기 위해 얼마나 자주 깨어나야 하는지를 설정하는 것이다.
기본 값은 transition_latency * 1000 이다.

 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

반응형
Comments