안드로이드 거버너 가이드 #01

1. OnDemand Governor

온디맨드 거버너는 일반적으로 제조사에서 가장 많이 채택하는 거버너 중 하나입니다. 이 거버너의 가장 큰 특징은 최고 클럭까지 올라간 이후, 점점 클럭을 낮추는 방식으로 작동한다는 것입니다. 즉, 일단 사용자가 어떠한 동작을 명령했을 때, 온디맨드 거버너는 클럭을 사전에 설정된 최고클럭값까지 끌어올립니다. 그리고 나서 다시 클럭을 낮추기 시작하는데, 이 때 사용자가 사전에 설정한(또는 그 커널이 사용 가능한) 최저클럭까지 낮아집니다. 물론, 만약에 그 도중에 사용자가 새로운 동작을 명령한다면, 클럭은 다시 최고클럭까지 올라갑니다.


온디맨드 거버너는 굉장히 부드럽습니다. 그 이유는, 말할 것도 없이 이런 '고(高)클럭 편향' 덕분입니다. 즉 어떤 동작에 대해서 거기에 적합한 클럭값을 찾기보다 최고 클럭으로 일단 높이고 보기 때문에, 대부분의 동작을 하드웨어가 가능한 범위 내에서 가장 부드럽게 해낼 수 있습니다. 그러나 이것은 동시에 배터리 사용 시간에 부정적인 영향을 미칩니다. 그럼에도 불구하고 이 거버너는 많은 스마트폰 제조사들에 의해 채택되는데, 그 이유는 온디맨드 거버너가 대체로 잘 테스트되어있고, 신뢰성이 높으며, 실제로 기기의 가능한한 가장 부드러운 작동을 보장할 수 있기 때문입니다.


이러한 사실은 온디맨드 거버너의 특징 중 하나를 명확하게 보여줍니다. 멀티태스킹 시 배터리타임에 치명적인 영향을 미칠 수 있다는 것이죠. 온디맨드 거버너는 일단 동작이 명령되면 클럭속도를 최고로 높인 다음 최저로 다시 떨어트리는데, 그 도중에 다른 일이 명령된다면 클럭은 다시 최고치까지 치솟습니다. 이러한 일은 특히 멀티태스킹 과정에서 자주 일어납니다. 이것 또한 배터리 시간에 부정적인 영향을 미칩니다.


2. OndemandX Governor

온디맨드 거버너의 변형으로, 기본적으로는 온디맨드 거버너에 Suspend/Wake 프로필을 더한 것입니다. 이 거버너는 배터리 친화적인 온디맨드라고 알려져있습니다. 화면이 꺼져있을 때, 최고 클럭값은 500MHz로 제한됩니다. 비록 온디맨드 거버너가 많은 커널의 기본 거버너이며 안전하고 안정적이라고 간주되지만, 온디맨드/온디맨드X 거버너에 대한 지원은 CPU의 빠른 클럭 변화 능력에 달려 있습니다. 이 때의 클럭 변화 능력이란, 클럭값 변화에 있어 짧은 지연시간을 의미합니다. 온디맨드/온디맨드X 거버너의 경우 그 성능이 I/O 스케쥴러가 달라짐에 따라 큰 변화를 보이는데, 이것은 다른 거버너에서는 보기 드문 일입니다.


3. Performance Governor

이 거버너는 굉장히 파격적인 거버너인데, 어떤 의미에서 Powersave 거버너와 정반대의 위치에 서있다고 할 수 있습니다. 하긴, 거버너 분류를 배터리지향(=Powersave)와 퍼포먼스지향(=Performance)로 나눌 수 있으니 어떤 의미에서는 적절한 네이밍이네요. 이 퍼포먼스 거버는 CPU의 클럭을 최고치로 고정합니다. 물론 이것은 굉장히 멍청한 생각이라고 생각될 수도 있습니다. 아니, 배터리를 얼마나 잡아먹으려고 최고 클럭으로 고정을 하는 걸까요? 그러나 항상 최고클럭 하에서 작동하는 것이 Race-to-idle을 조금 더 빠르게 해줄 수 있다는 증거거 속속 나오고 있습니다! 여기서 Race-to-idle이란, 주어진 업무, 예컨대 이메일 싱크 등을 해치운 이후에 CPU를 극도로 효율적인 저전력 상태로 되돌리는 것을 말합니다. 이것은 여전히 많은 테스트를 필요로 하고 있으며, 해당 CPU의 C스테이트(C-States, 저전력 상태를 의미)로 적절하게 작동하는 커널 또한 필요합니다.


4. Powersave Governor

말씀드린대로, 퍼포먼스 거버너와 정반대의 거버너입니다. 파워세이브 거버너는 CPU를 해당 커널이 제공하는/사용자가 제한한 최저 수준의 클럭으로 고정합니다.


5. Conservative Governor

이 거버너는 기기를 가능한한 낮은 클럭에 편향되게 작동하도록 하는 거버너입니다. 다른 말로, 이 거버너가 CPU클럭을 높이도록 하기 위해서는 다른 거버너에 비해 더 크고 지속적인 부하가 필요하다는 의미입니다. 개발자가 이 거버너를 얼마나 작동시키느냐(어떻게 설정? 하느냐의 이야기인 것 같은데 정확하지는 않네요;), 그리고 사용자가 설정한 최저 클럭값이 얼마이느냐에 따라, 컨서버티브 거버너는 들쑥날쑥한 성능을 낼 수도 있습니다. 이는 반대로 배터리타임에는 좋은 영향을 미칠 수도 있다는 의미입니다.


이 컨서버티브 거버너는 '느린 온디맨드(slow OnDemand)'라고 표현될 수도 있습니다. 


6. Userspace Governor

이 거버너는, 대부분의 모바일 기기에서는 보기 힘든 거버너입니다. 이 거버너는 모든 프로그램에게 CPU의 작동 클럭을 결정할 수 있도록 허용합니다. 이 거버너는 서버나 데스크톱 PC 등 어플리케이션이 CPU의 클럭 속도를 결정할 수 있는 권한이 필요한 기기에서 더 보편적입니다.


7. Min Max Governor

이 거버너는 CPU 부하에 따라 기기가 설정한 최고/최저 클럭으로만 작동하도록 합니다. 최고와 최저클럭 사이에 존재하는 중간값은 사용되지 않습니다.


8. Interactive Governor

온디맨드 거버너와 비슷하게, 인터랙티브 거버너는 부하량에 따라 사용자가 미리 설정한 CPU 최고클럭값까지 매우 빠른 속도로 클럭을 높입니다. 두 거버너의 유사성은 여기까지입니다. 인터랙티브 거버너는 온디맨드보다 훨씬 반응적인 거버너인데, 이것은 최고 클럭까지 상승하는 속도가 더 빠르기 때문입니다. 


이 거버너는 온디맨드 거버너와 비슷한 상황에서 서로 다르게 작동합니다. 인터랙티브 거버너는 클럭을 커널 개발자가 사전에 설정한 타이머 설정 과정에 맞춰서 변화시킵니다. 다른 말로 하자면, 어플리케이션이 CPU에 100% 작동을 요구하는 정도의 부하를 요구했을 때, 사용자는 거버너가 CPU 클럭을 낮추기 시작하기 전에 새로운 일을 처리하도록 할 수 있습니다. 이것은 온디맨드를 설명하면서 언급했던 '클럭 바운싱 문제'(클럭이 튕기듯이 최저클럭과 최고클럭을 오가는 문제)를 없앨 수 있습니다. 이 타이머 때문에, 인터랙티브는 최고 클럭에서 최저클럭으로 내려가는 과정에 있는 중간 클럭값을 더 잘 사용할 수 있습니다. 이것은 배터리 타임에서 이득을 볼 수 있게 해줄 수 있습니다.


그러나, 인터랙티브 거버너는 기기의 퍼포먼스적인 이유 때문에, 온디맨드 거버너에 비해 최고 클럭에서 더 오랜 시간 머무르게 됩니다. 이 때문에 배터리를 절약하는 효과는 쉽사리 무효화될 수 있습니다. 한마디로, 인터랙티브는 온디맨드 거버너에 비해 더 '나은' 퍼포먼스와(혹자는 다른 그 어떤 거버너보다 훌륭한 퍼포먼스를 낸다고 이야기합니다) 무시할 수 있을 정도의 '다른' 배터리 시간을 제공합니다.


인터랙티브 거버너는 또한 사용자가 기기의 화면을 켰을 때 곧이어 그 디바이스의 어플리케이션을 이용, 상호작용(Interactive)하기 시작할 것이라는 가정을 가지고 있습니다. 이 때문에, 화면을 켜는 것은 곧 클럭값을 최고치로 높이도록 만듭니다. 그리고 위에서 서술한 과정을 거칩니다.


9. InteractiveX Governor

커널 개발자인 "Imoseyon"에 의해 만들어진 거버너입니다. 이 거버너는 인터랙티브 거버너에 크게 기반하고 있음과 동시에, 배터리와 퍼포먼스 사이에서의 더 나은 균형을 유지하기 위해, 타이머 패러미터(Timer parameter)를 개선한 것입니다. 그러나 인터랙티브X 거버너의 인상깊은 특징은, 기기의 화면이 꺼져있을 때 사용자가 설정한 최저클럭값에 CPU 클럭을 고정한다는 데에 있습니다.


10. Smartass

이 거버너는 인터랙티브 거너의 컨셉에 기반한 것입니다. 이 커널을 제작할 때 최초의 목표는 성능에 있어서 큰 변화를 주지 않으면서 배터리 타임을 개선하기 위해서였다고 합니다. 퍼포먼스는 "오래된" MinMax와 동등한 수준이며, Smartass가 더 상호작용적입니다. 배터리 타임은 비록 측정하기 어렵지만, 상대적으로 더 오랜 시간을 저클럭 상태에서 보냅니다. Smartass는 또한 슬립 상태에서 최고 클럭을 352MHz(또는 사용자가 설정한 최저클럭값이 352보다 높을경우(도대체 왜죠?!) 그 최저클럭값에) 고정시킵니다. 더이상 슬립 상태에서의 프로필이 별도로 필요하지 않습니다!


11. Smartass V2

Erasmux가 제작한 Smartass 거버너의 2번째 버전입니다. 동시에, 많은 사람들로부터 사랑받는 또 하나의 커널이기도 합니다. 이 거버너는 "이상적 클럭수(ideal frequency)"를 목표로 합니다. 이 거버너는 이 클럭을 향해 매우 공격적으로 상승하고, 그 이후에는 덜 공격적이 됩니다. 이 커널에서는 화면이 켜진 상태(Screen on)와 꺼진 상태(Screen off)에서 서로 다른 이상클럭(ideal freq)을 사용하는데, 설정상에서 awake_ideal_freq와 sleep_ideal_freq라고 표시된 값입니다. 이 거버너는 화면이 꺼져 있을 때 CPU 클럭을 매우 빠르게 낮추고(sleep_ideal_freq에 빠른 속도로 도달할 때까지), 반대로 화면이 켜져있을 때 awake_ideal_freq 수준에 도달할 때까지 매우 빠르게 증가시킵니다(갤럭시S2의 경우 500MHz가 기본으로 설정된 값입니다). V1과 다르게 V2는 화면이 꺼져있을 때 클럭값의 상한이 없습니다. 따라서 전체적인 클럭 범위는 거버너가 화면 켜짐과 화면 꺼짐 상태에서 사용가능하도록 해줍니다. 이 거버너의 모토는 '퍼포먼스와 배터리의 균형'입니다.




[원출처: XDA-developers .... [GUIDE] Android Governors Explained [Update 1/13/2013]]

원출처의 글을 읽으면서 해석이 잘 안되는 부분 중 큰 필요가 없다고 생각하는 부분을 버리고, 조금 더 부드럽게 설명하기 위해서 사이 사이 의역을 조금 박아넣고, 개인적인 이야기도 조금 덧붙였습니다. 따라서 정확한 내용은 위의 XDA 사이트의 원본게시물을 참고하시기 바랍니다. 위의 내용은 역자의 짧은 영어 실력으로 번역한 탓에 번역 과정에서 원작자의 의도가 왜곡되었을 수 있으니 이 글을 기준으로 XDA의 원래 글의 진위 등을 평가하셔서는 안됩니다!!




사실 원출처 들어가보시면 21개가 있고 저기에는 없는 PegasusQ 거버너에 대해서도 써보려고 했는데 글이 너무 길어져서 중간에 끊었습니다. 사실 자주 보이는 거버너는 대충 다 설명된 것 같네요. 최근 유난히 자주 보이기 시작하는 Hotplug 등에 대한 설명은 다음 글에 포함되어있습니다. 나름 간략하게 써보려고 했는데 원본 글이 생각 이상으로 디테일하게 설명이 되어 있어 결국 세세한 설정치까지 등장;;


사실 이 글을 번역하기 시작한건, 제가 안드로이드 레퍼런스 기기인 갤럭시 넥서스를 1년 넘게 쓰면서 이 거버너 저 거버너 옮겨다니면서 썼는데, 카페에도 자세한 설명은 찾기가 어려워서 도대체 이 거버너가 어떤 성향의 거버너인지 제대로 이해하지 못한 상태로 자주 썼었기 때문입니다. 아무리 관심이 없어도 조금이라도 알고 시작하면 좋을 것 같아서요. 우선 여기까지를 보니 대충 각 거버너가 어떻게 작동하는지에 대한 감은 오네요. 

소민(素旼)

공부하고 있습니다. 문의: kimv23@gmail.com

    이미지 맵

    디지털 다른 글

    이전 글

    다음 글