| CPU frequency and voltage scaling code in the Linux(TM) kernel | |
| L i n u x C P U F r e q | |
| U S E R G U I D E | |
| Dominik Brodowski <linux@brodo.de> | |
| 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. Supported Architectures and Processors | |
| 1.1 ARM | |
| 1.2 x86 | |
| 1.3 sparc64 | |
| 1.4 ppc | |
| 1.5 SuperH | |
| 2. "Policy" / "Governor"? | |
| 2.1 Policy | |
| 2.2 Governor | |
| 3. How to change the CPU cpufreq policy and/or speed | |
| 3.1 Preferred interface: sysfs | |
| 3.2 Deprecated interfaces | |
| 1. Supported Architectures and Processors | |
| ========================================= | |
| 1.1 ARM | |
| ------- | |
| The following ARM processors are supported by cpufreq: | |
| ARM Integrator | |
| ARM-SA1100 | |
| ARM-SA1110 | |
| 1.2 x86 | |
| ------- | |
| The following processors for the x86 architecture are supported by cpufreq: | |
| AMD Elan - SC400, SC410 | |
| AMD mobile K6-2+ | |
| AMD mobile K6-3+ | |
| AMD mobile Duron | |
| AMD mobile Athlon | |
| AMD Opteron | |
| AMD Athlon 64 | |
| Cyrix Media GXm | |
| Intel mobile PIII and Intel mobile PIII-M on certain chipsets | |
| Intel Pentium 4, Intel Xeon | |
| Intel Pentium M (Centrino) | |
| National Semiconductors Geode GX | |
| Transmeta Crusoe | |
| Transmeta Efficeon | |
| VIA Cyrix 3 / C3 | |
| various processors on some ACPI 2.0-compatible systems [*] | |
| [*] Only if "ACPI Processor Performance States" are available | |
| to the ACPI<->BIOS interface. | |
| 1.3 sparc64 | |
| ----------- | |
| The following processors for the sparc64 architecture are supported by | |
| cpufreq: | |
| UltraSPARC-III | |
| 1.4 ppc | |
| ------- | |
| Several "PowerBook" and "iBook2" notebooks are supported. | |
| 1.5 SuperH | |
| ---------- | |
| The following SuperH processors are supported by cpufreq: | |
| SH-3 | |
| SH-4 | |
| 2. "Policy" / "Governor" ? | |
| ========================== | |
| Some CPU frequency scaling-capable processor switch between various | |
| frequencies and operating voltages "on the fly" without any kernel or | |
| user involvement. This guarantees very fast switching to a frequency | |
| which is high enough to serve the user's needs, but low enough to save | |
| power. | |
| 2.1 Policy | |
| ---------- | |
| On these systems, all you can do is select the lower and upper | |
| frequency limit as well as whether you want more aggressive | |
| power-saving or more instantly available processing power. | |
| 2.2 Governor | |
| ------------ | |
| On all other cpufreq implementations, these boundaries still need to | |
| be set. Then, a "governor" must be selected. Such a "governor" decides | |
| what speed the processor shall run within the boundaries. One such | |
| "governor" is the "userspace" governor. This one allows the user - or | |
| a yet-to-implement userspace program - to decide what specific speed | |
| the processor shall run at. | |
| 3. How to change the CPU cpufreq policy and/or speed | |
| ==================================================== | |
| 3.1 Preferred Interface: sysfs | |
| ------------------------------ | |
| The preferred interface is located in the sysfs filesystem. If you | |
| mounted it at /sys, the cpufreq interface is located in a subdirectory | |
| "cpufreq" within the cpu-device directory | |
| (e.g. /sys/devices/system/cpu/cpu0/cpufreq/ for the first CPU). | |
| cpuinfo_min_freq : this file shows the minimum operating | |
| frequency the processor can run at(in kHz) | |
| cpuinfo_max_freq : this file shows the maximum operating | |
| frequency the processor can run at(in kHz) | |
| scaling_driver : this file shows what cpufreq driver is | |
| used to set the frequency on this CPU | |
| scaling_available_governors : this file shows the CPUfreq governors | |
| available in this kernel. You can see the | |
| currently activated governor in | |
| scaling_governor, and by "echoing" the name of another | |
| governor you can change it. Please note | |
| that some governors won't load - they only | |
| work on some specific architectures or | |
| processors. | |
| scaling_min_freq and | |
| scaling_max_freq show the current "policy limits" (in | |
| kHz). By echoing new values into these | |
| files, you can change these limits. | |
| NOTE: when setting a policy you need to | |
| first set scaling_max_freq, then | |
| scaling_min_freq. | |
| If you have selected the "userspace" governor which allows you to | |
| set the CPU operating frequency to a specific value, you can read out | |
| the current frequency in | |
| scaling_setspeed. By "echoing" a new frequency into this | |
| you can change the speed of the CPU, | |
| but only within the limits of | |
| scaling_min_freq and scaling_max_freq. | |
| 3.2 Deprecated Interfaces | |
| ------------------------- | |
| Depending on your kernel configuration, you might find the following | |
| cpufreq-related files: | |
| /proc/cpufreq | |
| /proc/sys/cpu/*/speed | |
| /proc/sys/cpu/*/speed-min | |
| /proc/sys/cpu/*/speed-max | |
| These are files for deprecated interfaces to cpufreq, which offer far | |
| less functionality. Because of this, these interfaces aren't described | |
| here. | |