2011.06.05 15:12

CPU Frequency Governor




   Clock scaling allows you to change the clock speed of the CPUs on the
    fly. This is a nice method to save battery power, because the lower
            the clock speed, the less power the CPU consumes.


Contents:
---------
1.   What is a CPUFreq Governor?

2.   Governors In the Linux Kernel
2.1  Performance
2.2  Powersave
2.3  Userspace
2.4  Ondemand
2.5  Conservative
2.6  Interactive
2.7 InteractiveX

3.   The Governor Interface in the CPUfreq Core

 

1. What Is A CPUFreq Governor?
==============================

Most cpufreq drivers (in fact, all except one, longrun) or even most
cpu frequency scaling algorithms only offer the CPU to be set to one
frequency. In order to offer dynamic frequency scaling, the cpufreq
core must be able to tell these drivers of a "target frequency". So
these specific drivers will be transformed to offer a "->target"
call instead of the existing "->setpolicy" call. For "longrun", all
stays the same, though.

How to decide what frequency within the CPUfreq policy should be used?
That's done using "cpufreq governors". Two are already in this patch
-- they're the already existing "powersave" and "performance" which
set the frequency statically to the lowest or highest frequency,
respectively. At least two more such governors will be ready for
addition in the near future, but likely many more as there are various
different theories and models about dynamic frequency scaling
around. Using such a generic interface as cpufreq offers to scaling
governors, these can be tested extensively, and the best one can be
selected for each specific use.

Basically, it's the following flow graph:

CPU can be set to switch independently  |    CPU can only be set
      within specific "limits"   |       to specific frequencies

                                 "CPUfreq policy"
  consists of frequency limits (policy->{min,max})
         and CPUfreq governor to be used
    /        \
   /         \
         /         the cpufreq governor decides
        /          (dynamically or statically)
       /          what target_freq to set within
      /          the limits of policy->{min,max}
     /               \
    /         \
 Using the ->setpolicy call,   Using the ->target call,
     the limits and the     the frequency closest
      "policy" is set.     to target_freq is set.
        It is assured that it
        is within policy->{min,max}


2. Governors In the Linux Kernel
================================

2.1 Performance
---------------

The CPUfreq governor "performance" sets the CPU statically to the
highest frequency within the borders of scaling_min_freq and
scaling_max_freq.


2.2 Powersave
-------------

The CPUfreq governor "powersave" sets the CPU statically to the
lowest frequency within the borders of scaling_min_freq and
scaling_max_freq.


2.3 Userspace
-------------

The CPUfreq governor "userspace" allows the user, or any userspace
program running with UID "root", to set the CPU to a specific frequency
by making a sysfs file "scaling_setspeed" available in the CPU-device
directory.


2.4 Ondemand
------------

The CPUfreq governor "ondemand" sets the CPU depending on the
current usage. To do this the CPU must have the capability to
switch the frequency very quickly
.  There are a number of sysfs file
accessible parameters:

sampling_rate: measured in uS (10^-6 seconds), this is how often you
want the kernel to look at the CPU usage and to make decisions on
what to do about the frequency.  Typically this is set to values of
around '10000' or more. It's default value is (cmp. with users-guide.txt):
transition_latency * 1000
Be aware that transition latency is in ns and sampling_rate is in us, so you
get the same sysfs value by default.
Sampling rate should always get adjusted considering the transition latency
To set the sampling rate 750 times as high as the transition latency
in the bash (as said, 1000 is default), do:
echo `$(($(cat cpuinfo_transition_latency) * 750 / 1000)) \
    >ondemand/sampling_rate

show_sampling_rate_min:
The sampling rate is limited by the HW transition latency:
transition_latency * 100
Or by kernel restrictions:
If CONFIG_NO_HZ is set, the limit is 10ms fixed.
If CONFIG_NO_HZ is not set or no_hz=off boot parameter is used, the
limits depend on the CONFIG_HZ option:
HZ=1000: min=20000us  (20ms)
HZ=250:  min=80000us  (80ms)
HZ=100:  min=200000us (200ms)
The highest value of kernel and HW latency restrictions is shown and
used as the minimum sampling rate.

show_sampling_rate_max: THIS INTERFACE IS DEPRECATED, DON'T USE IT.

up_threshold: defines what the average CPU usage between the samplings
of 'sampling_rate' needs to be for the kernel to make a decision on
whether it should increase the frequency.  For example when it is set
to its default value of '95' it means that between the checking
intervals the CPU needs to be on average more than 95% in use to then
decide that the CPU frequency needs to be increased. 

ignore_nice_load: this parameter takes a value of '0' or '1'. When
set to '0' (its default), all processes are counted towards the
'cpu utilisation' value.  When set to '1', the processes that are
run with a 'nice' value will not count (and thus be ignored) in the
overall usage calculation.  This is useful if you are running a CPU
intensive calculation on your laptop that you do not care how long it
takes to complete as you can 'nice' it and prevent it from taking part
in the deciding process of whether to increase your CPU frequency.


2.5 Conservative
----------------

The CPUfreq governor "conservative", much like the "ondemand"
governor, sets the CPU depending on the current usage.  It differs in
behaviour in that it gracefully increases and decreases the CPU speed
rather than jumping to max speed the moment
there is any load on the
CPU.  This behaviour more suitable in a battery powered environment.
The governor is tweaked in the same manner as the "ondemand" governor
through sysfs with the addition of:

freq_step: this describes what percentage steps the cpu freq should be
increased and decreased smoothly by.  By default the cpu frequency will
increase in 5% chunks of your maximum cpu frequency.  You can change this
value to anywhere between 0 and 100 where '0' will effectively lock your
CPU at a speed regardless of its load whilst '100' will, in theory, make
it behave identically to the "ondemand" governor.

down_threshold: same as the 'up_threshold' found for the "ondemand"
governor but for the opposite direction.  For example when set to its
default value of '20' it means that if the CPU usage needs to be below
20% between samples to have the frequency decreased.


2.6 Interactive
---------------

The CPUfreq governor "interactive" is designed for low latency,
interactive workloads
. This governor sets the CPU speed depending on
usage, similar to "ondemand" and "conservative" governors. However
there is no polling, or 'sample_rate' required to scale the CPU up.

Sampling CPU load every X ms can lead to under powering the CPU
for X ms, leading to dropped framerate, stuttering UI etc..

Scaling the CPU up is done when coming out of idle, and like "ondemand"
scaling up will always go to MAX, then step down based off of cpu load.

There is only one tuneable value for this governor:

min_sample_time: The ammount of time the CPU must spend (in uS)
at the current frequency before scaling DOWN. This is done to
more accurately determine the cpu workload and the best speed for that
workload. The default is 50ms.


2.7 InteractiveX
---------------

Modified version of interactive with sleep+wake code.

This allows
    you to get a full dynamic cpu frequency capable system by simply
    loading your cpufreq low-level hardware driver
, using the
   'interactiveX' governor for latency-sensitive workloads



3. The Governor Interface in the CPUfreq Core
=============================================

A new governor must register itself with the CPUfreq core using
"cpufreq_register_governor". The struct cpufreq_governor, which has to
be passed to that function, must contain the following values:

governor->name -     A unique name for this governor
governor->governor -     The governor callback function
governor->owner -     .THIS_MODULE for the governor module (if
       appropriate)

The governor->governor callback is called with the current (or to-be-set)
cpufreq_policy struct for that CPU, and an unsigned int event. The
following events are currently defined:

CPUFREQ_GOV_START:   This governor shall start its duty for the CPU
       policy->cpu
CPUFREQ_GOV_STOP:    This governor shall end its duty for the CPU
       policy->cpu
CPUFREQ_GOV_LIMITS:  The limits for CPU policy->cpu have changed to
       policy->min and policy->max.

If you need other "events" externally of your driver, _only_ use the
cpufreq_governor_l(unsigned int cpu, unsigned int event) call to the
CPUfreq core to ensure proper locking.


The CPUfreq governor may call the CPU processor driver using one of
these two functions:

int cpufreq_driver_target(struct cpufreq_policy *policy,
                                 unsigned int target_freq,
                                 unsigned int relation);

int __cpufreq_driver_target(struct cpufreq_policy *policy,
                                   unsigned int target_freq,
                                   unsigned int relation);

target_freq must be within policy->min and policy->max, of course.
What's the difference between these two functions? When your governor
still is in a direct code path of a call to governor->governor, the
per-CPU cpufreq lock is still held in the cpufreq core, and there's
no need to lock it again (in fact, this would cause a deadlock). So
use __cpufreq_driver_target only in these cases. In all other cases
(for example, when there's a "daemonized" function that wakes up
every second), use cpufreq_driver_target to lock the cpufreq per-CPU
lock before the command is passed to the cpufreq processor driver.



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

'리눅스 정보' 카테고리의 다른 글

lazy governor  (8) 2011.10.30
VR IO Scheduler  (9) 2011.07.12
Upgraded CFQ IO Scheduler  (2) 2011.06.10
CPU Frequency Governor  (18) 2011.06.05
Sched_Autogroup ( Automatic process group scheduling )  (6) 2011.04.03
ext2, ext3, ext4 성능 한눈으로 비교  (3) 2011.01.16
Trackback 0 Comment 18
  1. dkrals 2011.06.05 23:27 신고 address edit & del reply

    아하 그렇구나...... 아임코리안 ㄷㄷㄷ...

  2. 괴물군 2011.06.06 07:00 신고 address edit & del reply

    이런글엔 그저 조용해 지지요ㅋ

    • iCaRuS™ 2011.06.06 07:06 신고 address edit & del

      ㅎㅎ 주요부분만 알아보기쉽게 굵은글씨로 표시해놨어요.

      이젠 전 잡니다.
      3-4일 괴롭혔던 부분을 좀전에 해결하고 컴파인까지완료하여 노트북에 완성되어 저장되었습니다.
      ㅎㅎ 자고 일어나서 글쓰고 올릴께요.
      기대하셔도 좋습니다

    • 괴물군 2011.06.06 07:49 신고 address edit & del

      몸상하지않게 쉬엄쉬엄 하세요 전 출근땜에 일찍일어났는데 댓글까지 달아주셔서 영광입니다ㅡ 버스타고 출근중인데 날씨가 너무좋네요ㅡ 좋은하루 되시길 바라겠습니다^^

    • 꽃소금 2011.06.06 10:08 신고 address edit & del

      이카루스님 찬양합니다요~~!!!
      기다릴게요~~♥ 언제나 감사드립니다 :)

    • 쑨덱 2011.06.06 10:53 신고 address edit & del

      크흣~ 쉬엄쉬엄 하세요~ 그러다가 몸 상하시겠네요..;;
      푹 주무시고 일어나시길 바래요~

  3. 대략난감 2011.06.06 09:43 신고 address edit & del reply

    인털렉트도 그럼 배터리 사용량이 적다는 건가요?? 콘설브랑 원디멘드랑 비슷하고 샘플링 비율이 존재한다는거면 앞에꺼는 단계단계올라가는데 이건 비율로 올라간다는 말인가요??

  4. dkrals 2011.06.06 11:52 신고 address edit & del reply

    몸생각좀 하세요....

  5. 찔죽이 2011.06.15 10:55 신고 address edit & del reply

    우주라이크썸띵...ㅋ
    조용히 있을께요~

  6. 조똘 2011.06.18 12:36 신고 address edit & del reply

    대충 요약하자면

    Performance: 성능만을 추구합 니다.
    최대클럭으로 유지합니다.. 배터리 조루현상이 일어나겠죠.
    비추입니다..

    Powersave: 배터리만 지속만을 최우선으로합니다 최소클럭으로 고정시켜 정말 비추입니다...


    Onenand :


    onenand 는 매우빠르게 클럭을 변경합니다 0.4에서 1.3으로 갈때 0.4 0.8 1.3 이런식으로요


    Conservative :

    원낸드와 비슷하지만 원낸드보다 천천히 클럭을 변경합니다 0.4 0.6 0.8 1.0 1.3 이런식으로
    원낸드에 비해 배터리 효율이 좋습니다.


    Interactive :


    CPU 클럭이 올라가 필요가있을때 맞춰서 속도를 따라갑니다.
    Onenand와 Conservative 의 의 배합이 어우러진 형식입니다.


    InteractiveX :


    Interactive보다 더 interactive 한?ㅋㅋ
    비교하면 sleep+wake 라는 말처럼 낮을 클럭을 유지하고있다가 클럭이 올라가는 형식입니다..

    Interactive 보다 배터리 효율이 더좋습니다

    • RR 2011.06.20 22:12 신고 address edit & del

      원낸드가 아니고 온디맨드(ondemand)로 알고 있습니다..^^;

    • Nevermore 2011.06.23 13:40 신고 address edit & del

      몇가지 설명이 잘못되었습니다.

      Ondemand는 필요에 따라 빠르게 팍팍 올리는 것이 맞습니다.
      보통 95% 이상의 CPU사용량이면 클락을 적절히 맞춰서 단계를 건너뛰어 팍 올려버립니다.

      다만 Conservative가 천천히 클럭 변경하는 것은 다른 원리입니다.
      커널에서 정해져있는 클럭인 100, 200, 400, 800, 1000 (1200 / 1300) 이외에는 클럭이 나올수 없습니다.
      그저 조금 더 천천히 CPU 사용량을 샘플링해서 갑작스런 사용량에는 반응하지 않고, 지속적으로 CPU를 많이 쓸 경우에만 천천히 한단계씩 올렸다가 사용량이 줄어들면 천천히 한단계씩 낮추는 겁니다.
      Ondemand가 필요에 따라 단계를 건너뛸 수 있는 것과 차이가 있죠.

      Interactive는 또 전혀 다릅니다.
      얘는 CPU를 쓰기 시작하면 무조건 최대 클럭으로 올려놓고나서 필요에 따라 천천히 깎아내립니다. 폰을 딱 건드렸을 때 반응속도는 최고겠지만, 그만큼 전력이 많이 소모되겠죠.

      InteractiveX는 거의 비슷한데 화면 끄면 무조건 최소클럭 고정되는군요. XDA의 어떤 분이 만드셨다고 하네요. 배터리 효율이 늘어납니다.

  7. Nevermore 2011.06.24 14:17 신고 address edit & del reply

    그런데 이카루스님 혹시 Smartass governor는 넣어보실 생각 없으신가요? 반응성은 Interactive만큼 좋으면서 배터리 소모가 덜 된다고 들어서 궁금합니다...

  8. Christian Louboution Outlet 2011.12.16 11:23 신고 address edit & del reply

    다운 재킷은 남성과 여성 http://www.thenfljerseysonsale.com/ 모두에 의해 쟈켓의 따뜻한 가장 추구 다음 품종 중 하나입니다. 비교할 수없는 따뜻함, 섬세한 쉽고 편안하고 http://www.thelouisvuitton.org/ 멋진 http://www.monclerjackets4sales.org/ 스타일을 결합하면 전형적인 양털이나 울 스웨터를 그냥 할 수 없다는 한 가지입니다. http://www.uggsonsalenow.org/ 당신은 최고 http://www.uggsbuffalo.com/ 노치 쉽고 편안하고 따뜻한를 검색하는 경우, 다운 재킷은 목록에 수량 1되어야합니다. 당신은 오늘의 시장에서 얻을 수있는 다운 코트 종류의 다양한 종류를 찾을 것이며, 모두가 모두를 상상할 http://www.cheap-christian-louboutin-outlet.org/ 수 있을지만큼 복잡하지 않습니다. 당신은 수많은 개인 매우 매력적입니다 전형적인 호흡기 코트보다 얇은 http://www.jordanretro13s.org/ 아르 다운 인형 겨울 코트의 스타일 번호를 찾을 수 있습니다. 모든 다운 겉옷는 같은 상투적인 스타일과 색상 안으로 http://www.canadagooseoutlet2012.com/ 올 것이다.시장은 패턴 자료, 황갈색과 검은색도의 핑크, 녹색 및 파랑 또한 많은 표준 색조와 같은 흥미있는 http://www.thecanadagooseoutlet.org/ 색상으로 다운 재킷으로 가득합니다.

  9. Christian Louboution Outlet 2011.12.16 11:23 신고 address edit & del reply

    다운 재킷은 남성과 여성 http://www.thenfljerseysonsale.com/ 모두에 의해 쟈켓의 따뜻한 가장 추구 다음 품종 중 하나입니다. 비교할 수없는 따뜻함, 섬세한 쉽고 편안하고 http://www.thelouisvuitton.org/ 멋진 http://www.monclerjackets4sales.org/ 스타일을 결합하면 전형적인 양털이나 울 스웨터를 그냥 할 수 없다는 한 가지입니다. http://www.uggsonsalenow.org/ 당신은 최고 http://www.uggsbuffalo.com/ 노치 쉽고 편안하고 따뜻한를 검색하는 경우, 다운 재킷은 목록에 수량 1되어야합니다. 당신은 오늘의 시장에서 얻을 수있는 다운 코트 종류의 다양한 종류를 찾을 것이며, 모두가 모두를 상상할 http://www.cheap-christian-louboutin-outlet.org/ 수 있을지만큼 복잡하지 않습니다. 당신은 수많은 개인 매우 매력적입니다 전형적인 호흡기 코트보다 얇은 http://www.jordanretro13s.org/ 아르 다운 인형 겨울 코트의 스타일 번호를 찾을 수 있습니다. 모든 다운 겉옷는 같은 상투적인 스타일과 색상 안으로 http://www.canadagooseoutlet2012.com/ 올 것이다.시장은 패턴 자료, 황갈색과 검은색도의 핑크, 녹색 및 파랑 또한 많은 표준 색조와 같은 흥미있는 http://www.thecanadagooseoutlet.org/ 색상으로 다운 재킷으로 가득합니다.

  10. New England Patriots Jerseys 2011.12.16 11:24 신고 address edit & del reply

    하이힐 신발 시장에서 매우 인기가있다. 당신은 다양한 크기의 하이힐을 생산 다양한 신발 브랜드를 찾을 수 있습니다. 하이힐을 제조 인기있는 디자이너 신발 브랜드 중 일부는 찰스 데이빗, 프라이, 머시 13 많은이 포함됩니다. 모든 여성은 그녀의 옷장에서 하이힐을 적어도 한 쌍의 주식 싶어. 이 신발은 기본적으로 슬림하고 세련된 있으며 감각적 모양을 제공합니다. 그들은 더 슬림, 이상과 몸매 다리의 미적 환상을주는 발가락 이상 입고있는 사람의 발 뒤꿈치를 올립니다. 이 신발은 펌프, stilettos, 웨지, 테이퍼, 블록 및 블레이드를 포함 다양한 모양의 힐과 스타일, 다양한에서 사용할 수 있습니다. 낡은 하이힐 구두는 여자에게 매력과 세련된 모양을 제공합니다. 패션과 스타일 변화의 전체 정의 여성이 거리 주변이나 파티에서이 신발과 산책을 착용했을 때. 그들은 매력의 중심이된다. 뒤꿈치의 높이는 일반적으로 4인치에서 8 인치 다릅니다. 그러나 일부 격렬도이 제한을 초과합니다.

  11. New England Patriots Jerseys 2011.12.16 11:30 신고 address edit & del reply

    하이힐 신발 시장에서 매우 인기가있다. 당신은 다양한 크기의 하이힐을 생산 다양한 신발 브랜드를 찾을 수 있습니다. 하이힐을 제조 인기있는 디자이너 신발 브랜드 중 일부는 찰스 데이빗, 프라이, 머시 13 많은이 포함됩니다. 모든 여성은 그녀의 옷장에서 하이힐을 적어도 한 쌍의 주식 싶어. 이 신발은 기본적으로 슬림하고 세련된 있으며 감각적 모양을 제공합니다. 그들은 더 슬림, 이상과 몸매 다리의 미적 환상을주는 발가락 이상 입고있는 사람의 발 뒤꿈치를 올립니다. 이 신발은 펌프, stilettos, 웨지, 테이퍼, 블록 및 블레이드를 포함 다양한 모양의 힐과 스타일, 다양한에서 사용할 수 있습니다. 낡은 하이힐 구두는 여자에게 매력과 세련된 모양을 제공합니다. 패션과 스타일 변화의 전체 정의 여성이 거리 주변이나 파티에서이 신발과 산책을 착용했을 때. 그들은 매력의 중심이된다. 뒤꿈치의 높이는 일반적으로 4인치에서 8 인치 다릅니다. 그러나 일부 격렬도이 제한을 초과합니다.

  12. New England Patriots Jerseys 2011.12.16 11:30 신고 address edit & del reply

    하이힐 신발 시장에서 매우 인기가있다. 당신은 다양한 크기의 하이힐을 생산 다양한 신발 브랜드를 찾을 수 있습니다. 하이힐을 제조 인기있는 디자이너 신발 브랜드 중 일부는 찰스 데이빗, 프라이, 머시 13 많은이 포함됩니다. 모든 여성은 그녀의 옷장에서 하이힐을 적어도 한 쌍의 주식 싶어. 이 신발은 기본적으로 슬림하고 세련된 있으며 감각적 모양을 제공합니다. 그들은 더 슬림, 이상과 몸매 다리의 미적 환상을주는 발가락 이상 입고있는 사람의 발 뒤꿈치를 올립니다. 이 신발은 펌프, stilettos, 웨지, 테이퍼, 블록 및 블레이드를 포함 다양한 모양의 힐과 스타일, 다양한에서 사용할 수 있습니다. 낡은 하이힐 구두는 여자에게 매력과 세련된 모양을 제공합니다. 패션과 스타일 변화의 전체 정의 여성이 거리 주변이나 파티에서이 신발과 산책을 착용했을 때. 그들은 매력의 중심이된다. 뒤꿈치의 높이는 일반적으로 4인치에서 8 인치 다릅니다. 그러나 일부 격렬도이 제한을 초과합니다.



티스토리 툴바