Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | CPU frequency and voltage scaling code in the Linux(TM) kernel |
| 2 | |
| 3 | |
| 4 | L i n u x C P U F r e q |
| 5 | |
| 6 | U S E R G U I D E |
| 7 | |
| 8 | |
| 9 | Dominik Brodowski <linux@brodo.de> |
| 10 | |
| 11 | |
| 12 | |
| 13 | Clock scaling allows you to change the clock speed of the CPUs on the |
| 14 | fly. This is a nice method to save battery power, because the lower |
| 15 | the clock speed, the less power the CPU consumes. |
| 16 | |
| 17 | |
| 18 | Contents: |
| 19 | --------- |
| 20 | 1. Supported Architectures and Processors |
| 21 | 1.1 ARM |
| 22 | 1.2 x86 |
| 23 | 1.3 sparc64 |
| 24 | 1.4 ppc |
| 25 | 1.5 SuperH |
| 26 | |
| 27 | 2. "Policy" / "Governor"? |
| 28 | 2.1 Policy |
| 29 | 2.2 Governor |
| 30 | |
| 31 | 3. How to change the CPU cpufreq policy and/or speed |
| 32 | 3.1 Preferred interface: sysfs |
| 33 | 3.2 Deprecated interfaces |
| 34 | |
| 35 | |
| 36 | |
| 37 | 1. Supported Architectures and Processors |
| 38 | ========================================= |
| 39 | |
| 40 | 1.1 ARM |
| 41 | ------- |
| 42 | |
| 43 | The following ARM processors are supported by cpufreq: |
| 44 | |
| 45 | ARM Integrator |
| 46 | ARM-SA1100 |
| 47 | ARM-SA1110 |
| 48 | |
| 49 | |
| 50 | 1.2 x86 |
| 51 | ------- |
| 52 | |
| 53 | The following processors for the x86 architecture are supported by cpufreq: |
| 54 | |
| 55 | AMD Elan - SC400, SC410 |
| 56 | AMD mobile K6-2+ |
| 57 | AMD mobile K6-3+ |
| 58 | AMD mobile Duron |
| 59 | AMD mobile Athlon |
| 60 | AMD Opteron |
| 61 | AMD Athlon 64 |
| 62 | Cyrix Media GXm |
| 63 | Intel mobile PIII and Intel mobile PIII-M on certain chipsets |
| 64 | Intel Pentium 4, Intel Xeon |
| 65 | Intel Pentium M (Centrino) |
| 66 | National Semiconductors Geode GX |
| 67 | Transmeta Crusoe |
| 68 | Transmeta Efficeon |
| 69 | VIA Cyrix 3 / C3 |
| 70 | various processors on some ACPI 2.0-compatible systems [*] |
| 71 | |
| 72 | [*] Only if "ACPI Processor Performance States" are available |
| 73 | to the ACPI<->BIOS interface. |
| 74 | |
| 75 | |
| 76 | 1.3 sparc64 |
| 77 | ----------- |
| 78 | |
| 79 | The following processors for the sparc64 architecture are supported by |
| 80 | cpufreq: |
| 81 | |
| 82 | UltraSPARC-III |
| 83 | |
| 84 | |
| 85 | 1.4 ppc |
| 86 | ------- |
| 87 | |
| 88 | Several "PowerBook" and "iBook2" notebooks are supported. |
| 89 | |
| 90 | |
| 91 | 1.5 SuperH |
| 92 | ---------- |
| 93 | |
| 94 | The following SuperH processors are supported by cpufreq: |
| 95 | |
| 96 | SH-3 |
| 97 | SH-4 |
| 98 | |
| 99 | |
| 100 | 2. "Policy" / "Governor" ? |
| 101 | ========================== |
| 102 | |
| 103 | Some CPU frequency scaling-capable processor switch between various |
| 104 | frequencies and operating voltages "on the fly" without any kernel or |
| 105 | user involvement. This guarantees very fast switching to a frequency |
| 106 | which is high enough to serve the user's needs, but low enough to save |
| 107 | power. |
| 108 | |
| 109 | |
| 110 | 2.1 Policy |
| 111 | ---------- |
| 112 | |
| 113 | On these systems, all you can do is select the lower and upper |
| 114 | frequency limit as well as whether you want more aggressive |
| 115 | power-saving or more instantly available processing power. |
| 116 | |
| 117 | |
| 118 | 2.2 Governor |
| 119 | ------------ |
| 120 | |
| 121 | On all other cpufreq implementations, these boundaries still need to |
| 122 | be set. Then, a "governor" must be selected. Such a "governor" decides |
| 123 | what speed the processor shall run within the boundaries. One such |
| 124 | "governor" is the "userspace" governor. This one allows the user - or |
| 125 | a yet-to-implement userspace program - to decide what specific speed |
| 126 | the processor shall run at. |
| 127 | |
| 128 | |
| 129 | 3. How to change the CPU cpufreq policy and/or speed |
| 130 | ==================================================== |
| 131 | |
| 132 | 3.1 Preferred Interface: sysfs |
| 133 | ------------------------------ |
| 134 | |
| 135 | The preferred interface is located in the sysfs filesystem. If you |
| 136 | mounted it at /sys, the cpufreq interface is located in a subdirectory |
| 137 | "cpufreq" within the cpu-device directory |
| 138 | (e.g. /sys/devices/system/cpu/cpu0/cpufreq/ for the first CPU). |
| 139 | |
| 140 | cpuinfo_min_freq : this file shows the minimum operating |
| 141 | frequency the processor can run at(in kHz) |
| 142 | cpuinfo_max_freq : this file shows the maximum operating |
| 143 | frequency the processor can run at(in kHz) |
| 144 | scaling_driver : this file shows what cpufreq driver is |
| 145 | used to set the frequency on this CPU |
| 146 | |
| 147 | scaling_available_governors : this file shows the CPUfreq governors |
| 148 | available in this kernel. You can see the |
| 149 | currently activated governor in |
| 150 | |
| 151 | scaling_governor, and by "echoing" the name of another |
| 152 | governor you can change it. Please note |
| 153 | that some governors won't load - they only |
| 154 | work on some specific architectures or |
| 155 | processors. |
| 156 | scaling_min_freq and |
| 157 | scaling_max_freq show the current "policy limits" (in |
| 158 | kHz). By echoing new values into these |
| 159 | files, you can change these limits. |
| 160 | |
| 161 | |
| 162 | If you have selected the "userspace" governor which allows you to |
| 163 | set the CPU operating frequency to a specific value, you can read out |
| 164 | the current frequency in |
| 165 | |
| 166 | scaling_setspeed. By "echoing" a new frequency into this |
| 167 | you can change the speed of the CPU, |
| 168 | but only within the limits of |
| 169 | scaling_min_freq and scaling_max_freq. |
| 170 | |
| 171 | |
| 172 | 3.2 Deprecated Interfaces |
| 173 | ------------------------- |
| 174 | |
| 175 | Depending on your kernel configuration, you might find the following |
| 176 | cpufreq-related files: |
| 177 | /proc/cpufreq |
| 178 | /proc/sys/cpu/*/speed |
| 179 | /proc/sys/cpu/*/speed-min |
| 180 | /proc/sys/cpu/*/speed-max |
| 181 | |
| 182 | These are files for deprecated interfaces to cpufreq, which offer far |
| 183 | less functionality. Because of this, these interfaces aren't described |
| 184 | here. |
| 185 | |