Android2011.12.29 10:35
크리에이티브 커먼즈 라이선스
Creative Commons License
얼마 전 맛클 노하우 게시판에 간단히 XDA 글 링크를 걸어서 글을 올린적이 있다.

그 내용들에 대해서 조금은 자세히 내용을 정리하고자 블로그에 글을 쓴다.

XDA 원문 글 링크
http://forum.xda-developers.com/showthread.php?p=19846297 

본 글의 내용은   droidphile  이라는 XDA 개발자의 글 내용을 간략히 압축하여 정리한 글에 불과하다.
해당 글을 접하게 된 이유는 사용하는 갤럭시 S2(SGS2)에 Lulz kernel 을 사용하다가
Siyah kernel 에 관심을 가지면서 자연스레 XDA 글 들을 읽다보니 접하게 된 것이다.
글을 쓰는 지금도 Siyah 2.6.2 Version 의 kernel 을 사용하고 있다.

애초부터 컴맹에 가까운 나 이기에...
해당 글을 바탕으로 무언가 좀 더 기술적인 서술을 하기엔 부족한것이 많다.

그리고 블로그 내의 다른 글들과 마찬가지로 단순히 관심있는 부분에 대한 내용들을
개인적으로 공부하고 정리하기 위한 도구로 해당 블로그에 포스팅을 함은 변함이없다. 


원문 글의 순서대로
CPU governor
I/O Scheduler
Dual Core CPU 의 순서로 정리하려 한다.

1. CPU governor
 
1) CPU (Central Processing Unit)_중앙처리장치
 = Android 장치에 입출력 명령에 대한 해독을 하며, 산술논리연산이나 데이터 처리를 실행하는 장치(컴퓨터와 같은 개념)
 

2) CPU governor
 = CPU 를 제어하는 방식이며, 일반적으로 kernel 에서 module 로 탑재되어  insmod 의 명령에 의해 설치되는
   경우가 많다. (in Android)

   주로 CPU 의 Step 에 대해 어느 정도의 Load 가 걸렸을 때 Step Up 혹은 Down 을 할것인가, 그리고 
   어느 간격으로 Step Up 혹은 Down 을 감지할지 등은 governor 을 어떤한 것을 선택하느냐에 따라
   결정되게 된다. 
 
3) CPU governor 의 종류
XDA 글 원문에는 모두 17가지의 governor 에 대해 정의하고 있다. 하지만 이 모든 governor 에 대해
사용하고 있는 kernel 은 없을것이다. 불필요하게 모든 module 을 탑재할 필요는 없기 때문이 아닐까...
그래서 이 글에는 주로 Android 에서 사용하는 governor 에 대해서만 간략히 적으려 한다.
 

lulzactiveV2, smartassV2, ondemandx, intellidemand, lionheart(tweaked conservative), interactivex
(일반적인 ondemand, conservative, userspace, powersave, performance 에 대해서는 이미
맛클 노하우 게시판에도 몇 몇 좋은 글이 있기 때문에 정리에서 제외한다.)
 
(1) lulzactiveV2
=국내에 너무나도 잘 알려진 Tegrak 라는 개발자 분이 만들어낸 governor 이다.
아래 링크의 글이 원문에 해당한다.
http://pspmaster.tistory.com/161 
interactive 기반에 smartass 의 아이디어를 접목시킨 governor 이며, XDA 의 대부분의 글에서
가장 효율적인 CPU governor 라고 평가하고 있는것을 확인할 수 있었다.
(Performance 와 Battery Life 를 모두 고려한다면 lulzactive 와 smartassV2 를 대부분 추천하였다.)
Version 2 는 별도의 application 을 통하여 inc_load 값과 pump up & down 그리고
sampling rate 에 대한 값을 모두 사용자가 커스텀화 하여 사용할 수 있다.
그리고 Screen off 시에는 500Mhz 로 고정되어 베터리를 아껴주도록 설정되어 있으며, 
이 부분 또한 application 을 이용하여 커스텀화 할 수 있다.
기반이 된 interactive 와 아이디어를 얻었다고 소개된 smartass 에 대해서는 아래에 개별로 소개할
글들을 보면 확인할 수 있다.
XDA 의 글을 보면 3가지로 lulzactiveV2 에 대한 tweak 설정 값을 확인할 수 있다.
battery 위주, performance 위주 그리고 performance + battery 이다.
개인적으로는 siyah kernel 에 sio + lulzactiveV2로 SGS2 를 사용하고 있다.

balanced-performance code (by XDA developer droidphile )
echo "90" > /sys/devices/system/cpu/cpufreq/lulzactive/inc_cpu_load
echo "4" > /sys/devices/system/cpu/cpufreq/lulzactive/pump_up_step
echo "1" > /sys/devices/system/cpu/cpufreq/lulzactive/pump_down_step
echo "10000" > /sys/devices/system/cpu/cpufreq/lulzactive/up_sample_time
echo "40000" > /sys/devices/system/cpu/cpufreq/lulzactive/down_sample_time
echo "5" > /sys/devices/system/cpu/cpufreq/lulzactive/screen_off_min_step

  battery 와 performance 위주의 code 는 맨 위 XDA 원문 글에 가보면 확인할 수 있다.
간단히 code 내용을 해석하자면 아래와 같다.
cpu 의 부하율은 up clocking 은 10000 기준으로 sampling 하며, down clocking 은 40000 기준으로 sampling 한다. 그리고
해당 sampling 시에 cpu 의 부하율이 90% 이상일 때는 up clocking 하고 90% 미만일 때는 down clocking 을 한다.
그리고 pump_up & down 설정에 따라 up clocking 은 한번에 4 단계를 상향 시키며, down clocking 은 한번에 1 단계를 
하향 시킨다. 마지막으로 screen_off_min_step 설정에 따라 screen off 시에는 500Mhz 로 clock 이 고정되게 된다.

개인적으로는 lulzactive application 을 통해서
inc_cpu_load => 75%(default + 15%)
pump_up_step => 2(default + 1step)
pump_down_step => 1(default)
up_sample_time => 24000(default)
down_sample_time => 72000(up_sample_time x 3)
으로 사용하고 있다. pump_up 을 4 단계씩 하는것이나 한 클럭에서 cpu 를 90% load 까지 끌어올려 사용하는 것이
뭔가 lulzactive 의 장점을 잃고 다른 governor 들과 비슷하게 맞춰지는것 같아서 위에 있는 balanced-performance
설정값에서 default 값에 가까우면서 down clock time 은 조금 지연시킨다는 생각으로 설정해본 것이 맘에 들어 사용 중이다.

(2) smartassV2
= smartassV2 governor 는 ideal(이상적인) frequency 를 지정해 놓고서 step up 과 down 을 결정한다는게 
특징이다. screen on 과 off 를 구분하여 별도의 ideal frequency 를 설정해 놓고 ramp up or down 을 지정된
시간 time 에 따라 감시하면서 up & down step 으로 지정된 Mhz clock 만큼 up & down 을 하며 cpu clock 을
제어하게 된다. siyah 커널에서는 ideal frequency 를 500Mhz 로 지정하고 sample time 은 up = 24000, down = 49000
으로 설정하며, ramp up & down clock 은 200Mhz 로 설정하여 사용하도록 하고있다.
이러한 설정값들은 커널 자체에서 수정하지 않고 /system/etc/init.d 내부 스크립트를 사용하며 부팅 시에 각 parameter 를
변경하여 커스텀화 할 수 있다.

경로는 아래 글을 보면 알 수 있다.
그리고 아래의 커스텀화한 값은 XDA 개발자인 
pikachu01 라는 개발자의 thunderbolt script 내부에 있는 트윅 값이다. 
(smartassV2 tweaked code by xda developer  
pikachu01 )
echo "800000" > /sys/devices/system/cpu/cpufreq/smartass/awake_ideal_freq;
echo "200000" > /sys/devices/system/cpu/cpufreq/smartass/sleep_ideal_freq;
echo "800000" > /sys/devices/system/cpu/cpufreq/smartass/sleep_wakeup_freq;
echo "95" > /sys/devices/system/cpu/cpufreq/smartass/max_cpu_load;
echo "90" > /sys/devices/system/cpu/cpufreq/smartass/min_cpu_load;
echo "1000000" > /sys/devices/system/cpu/cpufreq/smartass/ramp_down_step;
echo "200000" > /sys/devices/system/cpu/cpufreq/smartass/ramp_up_step;
echo "40000" > /sys/devices/system/cpu/cpufreq/smartass/down_rate_us;
echo "10000" > /sys/devices/system/cpu/cpufreq/smartass/up_rate_us

screen on & off 시의 ideal frequency 는 800Mhz 와 200Mhz 로 설정되어 있으며, screen off -> on 시에는
바로 800Mhz 로 clock 이 상향되도록 설정되었음을 확인할 수 있다. 그리고 해당 clock 에서의 cpu load 는
up 95% down 90% 로 아주 hard 하게 사용을 하고 있음을 알 수 있다. 단 5%의 폭만을 가며, 
ramp up 200Mhz 씩 하지만, down 은 1000Mhz 라는 큰 값으로 down 됨을 알 수 있다. 그리고 cpu load 에 
따라 clock 을 높힐지 낮출지의 time 을 결정하는 부분인 맨 하위 두 부분은 일반적인 default 값보다는 time 을
줄여 놓은것을 확인 할 수 있다.
위 스크립트 내용은 약간은 성능 위주의 커스텀이라고 볼 수 있을듯 하다.
스크립터의 echo " " 부분의 설정 parameter 조절을 통해서 개인적인 커스텀이 가능하다.  

(3) ondemandx
=ondemandx governor 는 일반적인 kernel 에서 가장 많이 default governor 로 사용하고 있는 ondemand governor 에서
battery 효율을 좀 더 좋게 계량하여 만든 것이다. 다른 것이 많은 것은 아니며, ondemand 에서는 없는 설정들이 존재한다.
가장 큰 차이점은 screen off 시에 ondemand 는 별다른 제한 설정이 존재하지 않는다. 앞서 정리한 lulzactiveV2 와 
smartassV2 의 경우에는 모두 각각 제한 clock 고정 혹은 screen off 시에 별도로 idle frequency 를 지정하여 불필요한
clock 의 상향을 막아서 battery life 를 높혔다. ondemandx 도 위 두 governor 와 마찬가지의 기능을 가진다. 
screen off 시에 500Mhz 이상으로 clock 이 올라가지 못하도록 고정을 한다.
screen off 시에 clock 고정값은 아래의 경로로 가면 확인이 가능하다. (당연히 cpu governor 를 ondemandx 로 지정해야 
확인이 가능하다.)
/sys/devices/system/cpu/cpufreq/ondemandx/suspend_freq

위의 screen off 시 clock 상향 제한 설정값 이외에 CPU governor 와 관련한 기본 개념에 속하는 개념들을 간단히 
아래에 정리한다. (아래 정리 내용은 ondemandx 에 포함된 변경가능 parameter 값들이다.)
up_threshold = CPU 의 load 상한선 (CPU 에 부하가 지정된 %만큼이 되면 CPU 를 상향 Clocking 한다.)
sampling_rate = CPU 의 Threshold(부하 율)를 지정된 시간 주기로 관측하여 Up 혹은 Down Clocking 한다.
                       (sampling_rate 의 주기로 CPU 의 부하율을 감지하다가 up_threshold 값보다 높거나 같은 부하율이
                        검지되면 상향 clocking 을하며, up_threshold 값에서 down_differential 의 설정값을 뺀 % 의 
                        부하율이 검지되면 하향 clocking 을 한다.)
down_differential = CPU 의 load 하향선 지정을 위한 parameter (up_threshold - down_differential = down_threshold)
powersave_bias = default 값은 0 에 해당하며, 값을 올릴수록 CPU 가 낮은 Clock 에서 머무르는 시간이 늘어나게 된다.
                          (정확히 어떤 range 에서 설정이 가능하며, 어떠한 원리로 낮은 clock 에서 머무를 수 있는지는 좀더 
                           관련 글을 찾아봐야할듯 하다. xda 원문에는 이 내용에 대한 글이 존재하지 않는다.)
sampling_down_factor = default 값은 1 에 해당하며, 높은 값을 선정 할 수록 CPU 에 load 가 많이 걸릴 때 최 상위 설정
                                   clock 에 머무르는 주기가 많아진다. 그리고 clock 을 하향 시키는 빈도가 낮아지게 된다.
                                   (powersave_bias 에 대한 글과 마찬가지로 어떠한 range 에서 설정이 가능하며, 어떠한 원리로
                                    빈도를 조절하는지는 해당 xda 글 원문에 나타나지 않는다. 별도로 다른 글을 찾아봐야겠다.)
그리고 위 값들 이외에
ignore_nice_load, io_is_busy, sampling_rate_min 라는 3가지의 parameter 가 더 존재한다.
(위 3가지 parameter 는 ondemand 와 ondemandx 모두에 존재한다.)
(그리고 한가지... 지금 현재 사용하고 있는 siyah kernel 을 기준으로 작서하기 때문에 siyah kernel 이외의 kernel 에서
사용하고 있는 module 에 존재하는 ondemand 혹은 ondemandx 에는 위의 3가지 parameter 가 없을지도 모르겠다.
그 이유는 현재 기본으로 보고 있는 xda 글 원문에는 ondemand 를 설명하며 위의 3가지 parameter 에 대한 언급이 
없기 때문이다. 이 부분 역시 추후 ondemandx 의 내용을 보완하며 추가할 생각이다.)
위 3가지 parameter 에 대해서는 앞선 powersave_bias 와 sampling_down_factor 와 마찬가지로 정확한 글이 존재하지 
않는다. 기본으로 하고 있는 xda 원문 이외에 다른 글을 찾아서 내용을 보충할 생각이다.

그리고 ondemand 와 ondemandx 는 i/o scheduler 를 어떠한 것을 선정하느냐에 따라 성능이 바뀐다고 한다.
정확히 어떠한 scheduler 가 좋은지, 나쁜지는 표현되어 있지 않지만... 다른 governor 는 일반적으로 i/o scheduler 에 
따라서 성능이 바뀌지는 않지만 ondemand 와 ondemandx 만은 다양한 성능의 변화를 보인다고 한다.
이 부분에 대해서도 ondemandx 의 내용을 추후 보충하면서 기재할 생각이다.

xda 글에서는 performance 위주의 설정에서는 아래와 같이 parameter 를 조절하는 것이 좋다고 하였다.

performance code at ondemand governor(by XDA developer droidphile ) 
echo "70" > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
echo "80000" > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate
echo "5" > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor
echo "30" > /sys/devices/system/cpu/cpufreq/ondemand/down_differential 
ondemand 의 추천 설정 값이지만, ondemandx 역시 suspend_freq 이외에는 모든 설정이 동일하기 때문에 
동일한 설정값이 유효하다. 
간단히 해석하다면, CPU 는 80000 기준으로 CPU 의 부하율을 감시하며 70%의 부하율에서 상향 clocking 하고 40% 부햐율
에서 하향 clocking 한다. 그리고 sampling_down_factor 에 5 라는 parameter 를 통하여 cpu 에 부하율이 높을 때 최 상위
clock 에서 머무르는 비중을 높혔다. (위 code 를 바탕으로 유추하면 sampling_down_factor 의 설정가능 range 가
1 ~ 5 가 아닌지 싶다.)
위의 설정값이외에 battery 위주의 code 는 xda 원문에서 확인할 수 있다.
간단히 /system/etc/init.d 에 script 로 추가하여 설정이 가능하며, 당연히 기본 governor 가 ondemandx 로 설정 되어 
있도록 해야하고, kernel 에서 부팅 시에 init.d 내부의 script 를 순서에 맞게 진행하도록 설정이 존재해야 한다.

(4) intellidemand
=intellidemand governor 는 intelligent ondemand governor 이다. 똑똑한 ondemand governor 정도라고 생각하면
될것이다. 그 똑똑한 이라는 부분이 ondemand 와의 차이점에 해당한다. 그럼 그 똑똑한 부분에 대해 적도록 하겠다.
일반적으로 ondemand 와 동일한 parameter 를 가진다. 위 (3) ondemandx 에서 나타냈던 parameter 중에서 
ondemandx 에만 해당하는 suspend_freq 를 제외한 나머지 parameter 들이 
/sys/devices/system/cpu/cpufreq/intellidemand 내부에 존재한다.

intelligent 에 해당하는 똑똑한 부분은 CPU 의 부하가 아닌 GPU 의 부하에 따라 CPU 를 추가적으로 제어한다는 것이다.
여기에서 GPU 란 CPU 와 비슷한 개념으로 Graphic 을 담당하는 CPU 라고 생각하면 된다.
고 성능의 개임 및 고 해상의 그래픽 Display 에 의하여 GPU 에 부하가 많이 걸리면 ondemand 의 설정이 모두 발동되어
ondemand governor 로 CPU 를 제어하게 된다. 하지만 GPU 가 무부하 상태(idling) 가 되면, ondemand 의 설정에서 
max frequency 를 제한하여 batter life 에 집중하도록 설정된다. 그리고 이렇게 GPU 가 무부하 상태에 접어 들었을 때
CPU 의 Clock 을 제한하는 것을 Browsing Mode 라고 부른다. 

현재 사용하고 있는 Siyah 커널에서 intellidemand 를 적용해본 바로는 특별한 장점은 느끼지를 못하겠다. 그리고
별도로 GPU 가 어느 기준으로 무부하 상태인지를 판단하는지와 CPU 의 Clock 을 어떠한 설정으로 제한을 하여 
Browing mode 로 접어드는 지의 설정부분은 확인이 안된다. 이 부분은 직접 Kernel 에 포함된 module(.ko) 을 
분석해 봐야 할듯하지만... 아직 그 정도까지 역량이 안된다. 
단지 ondemandx 와 마찬가지로 ondemand governor 에서 일정 조건으로 battery life 를 고려하도록 고안된 
governor 이지만, ondemandx 는 suspend_freq 라는 한가지의 parameter 를 추가하여 battery life 의 증대를
노렸다면 intellidemand 는 GPU 의 부하량에 따라 무부하 상태일 때 battery life 를 좋게 하기 위하여 최대 
Clock 을 제한하는 방법을 사용하였다는게 결론일 듯 하다. 

그리고 추가적으로 XDA 글 원문에 보면 intellidemand governor 는 Clock 의 Step up 에 대해서는 해당 clock 의
CPU 사용 시간 중 20% 미만의 무부하 시간을 감지하면 CPU 에 부하가 걸리는 것으로 판단하여 CPU 의 상향
clocking 한다고 표현되어 있으며, 하향 clocking 은 사용 CPU Clock 의 5% 씩 Step-down 한다고 표현되어 있다.
이 부분 역시 직접적으로 구동원리 등의 확인이 불가하여 단순히 원문의 내용을 요약하여 적어 놓는다.
그리고 /system/etc/init.d 내부 스크립트를 사용하여 변경가능한 parameter 는 ondemand 와 동일하기 때문에
따로 적지 않는다. (3) ondemandx 의 code 내용과 xda 원문의 code 중 ondemand 의 내용을 확인하면
알 수 있다. 

(5) lionheart(tweaked conservative for blazing performance)
= lionheart 는 사실 새로운 governor 가 아니다. conservative governor 의 parameter 들을 오직 성능 위주로
tweak 하여 사용하는 것을 lionheart governor 라고 한다. conservative 는 slow ondemand 라고 표현한다.
ondeamnd 가 만약 x 라는 속도로 screen on 시에 max frequency 에 도달한다면, conservative 는 x/2 의 
속도로 screen on 시에 max frequency 에 도달한다고 한다. 그래서 사실은 conservative 의 모토는 battery 
친화적인 ondemand 라고도 표현한다. 하지만 이러한 conservative 의 설정을 최대한 performance 에 맞춰
parameter 를 조절하면 그 어떠한 governor 보다도 반응성이나 부드러움 에서 앞선다고 한다. 하지만 battery life
는 포기해야 한다. 그 이유는 이 설정값이라고 하는것이 지속적으로 clock 을 상향하고 현재의 CPU 부하를 감시하도록
setting 이 되기 때문이다. 
lionheart 를 만들기 위한 conservative 의 tweak parameter 는 아래와 같다.

echo "60" > /sys/devices/system/cpu/cpufreq/conservative/up_threshold
echo "10000" > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate
echo "5" > /sys/devices/system/cpu/cpufreq/conservative/sampling_down_factor
echo "30" > /sys/devices/system/cpu/cpufreq/conservative/down_threshold
echo "5" > /sys/devices/system/cpu/cpufreq/conservative/freq_step

  CPU 의 부하 60% 에서 상향 clocking 하며, 30% 의 부하에서 하향 clocking 한다. sampling_rate 는 설정가능한 최저치로 
설정을 해야한다. 최대한 자주 sampling 하여 clocking 변경하도록 설정하기 위함이다. 그리고 최대 clock 에서 오래 머물 수
있도록 sampling_down_factor 를 5로 설정하였으며, conservative 설정에만 존재하는 freq_step 을 5%로 설정하였다.
freq_step 은 CPU 를 Clocking 할 때 몇 % 씩 Clocking 을 할것이냐를 결정한다. 하지만 이 부분에 있어서 대부분의
CPU Clock 은 커널 자체에서 Step 이 조정되어 있는데... 그 Step 과 % 값이 어떻게 유기적으로 연동되는지는 확인할 수가
없다. 이 부분에 있어서 conservative governor 에 대해 추후에 좀 더 관련 글을 찾아봐야 할 것 같다.
위의 parameter 대로 설정하면 lionheart governor 로 설정하여 CPU 를 제어할 수 있다. 하지만 battery life 는 포기해야 하며,
오직 성능 위주가 된다. XDA 글 여러곳에서 lionheart governor 를 Blazing performance 라고 표현하고 있는데, 그것만
보더라도 부드러움과 반응성에서는 가장 뛰어난 성능을 보여줄 것 같다. 물론... Battery 는... 포기해야 겠지만...
그리고 script 로 설정할 때에는 sampling_rate 부분은 별도로 스크립을 간단히 넣어주는게 좋다.
커널에서 지원하는 가장 낮은 sampling_rate 를 맞춰야 하기 때문이다.  
아래와 같이 설정하면 최저 sampling_rate 에 맞춰질것으로 생각한다.
이 부분은 Siyah 커널 XDA 원문에서 링크를 따라가면 나오는 lionheart governor 세팅용 script 에서 차용하였다.
echo "100000" > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate
echo "80000" > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate
echo "60000" > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate
echo "50000" > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate
echo "20000" > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate
echo "10000" > /sys/devices/system/cpu/cpufreq/conservative/sampling_rate 
 

위에 적었던 parameter 설정값 중 sampling_rate 는 마지막에 바로 위 내용처럼 가장 낮은 sampling_rate 값이
적용되도록 하는것이다. if 문 하나 없는 조건이지만... 특별히 문제될 것은 없다.

(6) interactivex
= 해당 Governor 에 대해 머릿속에 정리는 되었는데... 이것이 좋은 것인지 오히려 복잡한 제어로 효율이 떨어지는
것인지... 판단이 되지 않는다... 일단 이 Governor 에 대해서는 추후 확실한 정리가 될 정도의 문헌을 좀더 찾아본 후
정리를 하도록 하겠다.
일단 개인적인 생각으로는... 의미는 좋으나... 이 정도의 CPU 제어가 필요한가... 싶은 생각이 우선된다...
본인의 폰에 최적화된 Parameter 를 찾는다면 모르겠지만... 그렇지 않다면 일단은...
다른 Governor 를 사용하는게 효율적일것 같다. 트윅된 ondemand 나 conservative 혹은 lulzactive 나 samrtassV2 가
합당할 듯 하다.

2. I/O Scheduler
 
1) I/O(Input/Output)
 =  Data 의 읽고 쓰는 것을 의미함. Data 의 Input (Flash Memory 로의 쓰기),
Data 의 Output (Flash Memory 로 부터의 읽기)
 
2) I/O Scheduler(Input/Output Scheduler)
 =  Data 의 Input 과 Output (읽고 쓰기) 을 제어하는 매개체라고 생각하면 된다. Data 를 읽고 쓰는데 있어서
우선순위를 어떻게 선정할 지 등을 결정한다. 입/출력에 대해 무조건 적으로 순서대로 시행할 지 혹은 Data 의 양에 
따라 우선순위를 부여할지... 그리고 지연되는 입/출력 명령에 대해 시간 Time 등의 조건을 두고 우선 순위에 대해
재 배치의 기능을 수행할지의 결정은 어떠한 I/O Scheduler 를 사용하느냐에 따라 결정된다.
 
3) I/O Scheduler 의 종류
= Noop, Deadline, CFQ, BFQ, SIO, V(R), Anticipatory 등
기본적으로 xda 에 있는 I/O Scheduler 에 대한 설명 글 중 두 개의 글을 확인하였다. 그런데
두 개의 글 모두 동일한 순서로 Best I/O Scheduler 를 정의 하였다.
물론, Flash Memory 를 사용한다는 특정 환경에서의 조건은 유효하다.
그 순서는 아래와 같다.
SIO > Noop > Deadline > V(R) > BFQ > CFQ
하지만...
이 부분은 개인의 사용 환경에 따라 차이가 있는것으로 생각되어 진다. 
최초에 국내 갤럭시 S 에 CFQ -> Deadline 패치가 적용되었을 때, 대부분의 유저들은 성능의 향상을 
느꼈지만, 일부 유저들은 오히려 CFQ 가 더 나은 성능을 보인다고 한 글이 있었기 때문이다.
 
xda 글 중 I/O Scheduler 에 대해 Best 순서를 명기한 두개의 글에 대한 링크
http://forum.xda-developers.com/showthread.php?p=19846297  by  droidphile  (xda developer)
http://forum.xda-developers.com/showthread.php?p=18549017  by  pikachu01  (xda developer)
(둘 중 누군가 먼저 정의를 하였고, 그것을 공유하여 한 쪽에서 글에 내용을 적었는지는 모르겠다... -_-;;)
 

(1) noop 



 2012/01/31 현재 작성 진행 중 임.
ㅠ.ㅠ 잦은 출장과... 밀린 업무로...
지속적인 글 업뎃은 힘들듯하다... ㅠ.ㅠ 2012/02/15 오후 9:40... 아직도 사무실에서... ㅠ.ㅠ 

쿼드란트 벤치마크 점수
커널 = Siyah 2.6.2
IO Scheduler = VR
CPU Governor = performance [1.4Mhz - 1.4Mhz]
Dual Core Mode [using 2nd Core application by tegrak]
plus --------- ㅎㅎ [tmpfs-Temporary File System]

 
저작자 표시 비영리 변경 금지
신고
Posted by Bulldozer121

티스토리 툴바