리눅스를 기반으로 하는 안드로이드에서는 리눅스에서와 같이 CPU 가버너와 IO 스케줄러를 변경함으로서 성능과 배터리 효율을 향상 시킬 수 있습니다. 그래서, 이 글에서는 CPU 가버너와 IO 스케줄러에 대해 설명하고자 합니다.


<CPU 가버너>


리눅스에서는 CPU 클럭(동작속도)를 상황에 따라 조절해주는 CPU 가버너가 있습니다. 여러가지가 존재하며, 각 CPU 가버너들이 보여주는 성능과 배터리 효율은 제각기 다릅니다.


CPU 가버너는 리눅스 커널 단에서 CPU의 동작속도(클럭)을 관리해주는 정책으로, 커널마다 모두 다른 CPU 가버너들을 가지고 있습니다. 또한, 같은 CPU 가버너라고 할지라도 커널마다 조금씩 다른 퍼포먼스를 보여주기도 합니다.


몇 가지 CPU 가버너들에 대해 소개해드리겠습니다. 제 블루커널에 포함되어 있는 CPU 가버너들을 중심으로 간단히 설명하겠습니다.


hotplug : 옵티머스 3D의 순정커널과 제 블루커널에서 기본 CPU 가버너로 사용됩니다. ondemand라는 가버너와 비슷하며, CPU 부하에 따라 빠르게 최대 클럭으로 동작했다가 시간이 지남에 따라 한단계 씩 클럭을 낮춰주는 방식입니다. 그리고, CPU가 대기상태에 있을 때는 다른 하나의 코어를 disable시켰다가 다시 바쁜 상태가 되면 동작시킵니다.


ondemand : 대부분의 커널에서 기본 CPU 가버너로 사용되며, hotplug와 비슷한 방식입니다. hotplug가 이 ondemand 방식에서 비롯된 TI OMAP의 가버너라고 보시면 되는데, CPU 부하가 생기면 클럭을 빠르게 올렸다가 부하가 줄어들면 시간이 지남에 따라 클럭을 낮춰주는 방식입니다.


conservative : 이 역시 ondemand와 비슷하지만, CPU 부하가 생기면 CPU 클럭을 빠르게 올리지 않고 좀 더 천천히 올려주는 방식으로서 배터리 효율이 ondemand보다는 낫습니다. 그러나, 그 만큼 반응속도는 좋지 않습니다. 그리고 CPU 부하가 줄게되면, 설정된 값만큼 CPU 클럭을 낮춤으로서, ondemand나 hotplug 보다는 세부적인 설정이 가능합니다.


performance : 거의 항상 CPU 클럭을 최대로 맞추는 방식입니다. 그러므로 가장 좋은 성능을 보여주지만, 배터리 효율 측면에서는 매우 좋지 않다고 볼 수 있습니다.


powersave : performance와는 정반대의 성격을 가진 방식이라고 보시면 됩니다. 거의 항상 CPU 클럭을 최저로 맞춤으로서 배터리 효율 측면에서는 좋겠지만, 성능으로 볼 때는 매우 좋지 않다고 볼 수 있습니다.


smartass : interactive라는 가버너에서 개량된 가버너로 나온지 얼마되지 않는 가버너 중 하나입니다. interactive 가버너보다 반응성이 좋으며, 낮은 클럭에 머물러 있는 시간이 많기 때문에 배터리 효율도 더 좋습니다.


smartassV2 : smartass 가버너에서 개량된 가버너로 배터리 효율 측면보다는 더 나은 성능을 내도록 개선된 가버너입니다.


<IO 스케줄러>


리눅스에서 파일의 입력과 출력을 관리하는 방식인 IO 스케줄러가 있습니다. IO 스케줄러 역시, CPU 가버너와 마찬가지로 여러가지가 존재하며, 각 IO 스케줄러들이 보여주는 성능과 배터리 효율은 모두 다릅니다.


IO 스케줄러는 리눅스 커널 단에서 파일의 입력과 출력을 관리하는 정책으로, 처리해야 하는 파일들을 어떤 양으로, 어떤 시간만큼으로 처리할 것인지 등을 결정합니다. 이 역시 커널마다 모두 다른 IO 스케줄러들을 가지고 있습니다.


몇 가지 IO 스케줄러들에 대해 소개해드리겠습니다. 제 블루커널에 포함되어 있는 IO 스케줄러들을 중심으로 간단히 소개하겠습니다.


CFQ(Completely Fair Queuing) : 대부분의 커널에서 기본 IO 스케줄러로 사용되며, 옵티머스 3D의 순정커널과 제 블루커널에서도 기본 IO 스케줄러로 사용되고 있습니다. 가장 무난한 IO 스케줄러로 평가받고 있으며, 하드디스크에 적합하다고 합니다.


Noop : 리눅스 커널에 기본적으로 채용되는 IO 스케줄러들 중에서 제일 간단한 것으로서, 따로 우선순위를 부여하지 않고 FIFO(First In, First Out) 원칙으로 처리합니다. SSD나 플래시 메모리와 같은 저장소에 적합한 IO 스케줄러로 평가받고 있습니다.


Deadline : FIFO 방식을 이용하지만, 읽기에 대해 더 우선적인 순위를 둡니다. 또, 들어오는 요청에 대해 처리완료 시간(deadline)을 정하여 이것이 만료되려는 것부터 서둘러 처리하는 방식입니다.


SIO(Simple IO Scheduler) : Noop을 기반으로 만들어진 IO 스케줄러로 들어오는 요청을 분배하는 방식은 Deadline의 것을 따릅니다. 적은 부하를 발생하며 Noop과 같이 플래시 메모리와 같은 저장소에 적합합니다. 전세계적으로 유명한 모바일 커뮤니티 사이트인 XDA 포럼에서는 SIO가 가장 좋은 성능을 낸다고도 합니다.


V(R) : 벤치마크 테스트를 위한 IO 스케줄러로 불릴만큼 눈에 띄는 좋은 성능을 보여줍니다. 그러나 가끔 평균 이하의 성능을 보여줄 때도 있는 가장 불안한 IO 스케줄러이기도 합니다.



각 CPU 가버너와 각 IO 스케줄러가 보여주는 퍼포머스는 모두 다릅니다. 하지만, 사용자의 사용 패턴에 따라서 모두 다른 성능과 배터리 효율을 보여주기 때문에, 어느 것이 가장 좋은 것이다라고 할 수 없습니다. 모두 각자 사용해보고 자신에게 맞는 것을 찾는 것이 좋습니다.

댓글을 달아 주세요

  1. 박정빈-듀코오슈 2012.04.14 21:13 신고

    아 좋은 정보알아갑니다 ^_^ 글쓰시느라 수고 하셨습니다! 감사합니다! hotplug사용중~ ㅎㅎ 핫플러그가 기본이더라구요~ ㅋㅋ

  2. 은자 2012.04.15 17:43 신고

    좋은 글 감사합니다.
    가버너와 IO에 대해 많이 알게되었네요!!

비밀 댓글 달기
댓글 달기 버튼