|  | Processor boosting control | 
|  |  | 
|  | - information for users - | 
|  |  | 
|  | Quick guide for the impatient: | 
|  | -------------------- | 
|  | /sys/devices/system/cpu/cpufreq/boost | 
|  | controls the boost setting for the whole system. You can read and write | 
|  | that file with either "0" (boosting disabled) or "1" (boosting allowed). | 
|  | Reading or writing 1 does not mean that the system is boosting at this | 
|  | very moment, but only that the CPU _may_ raise the frequency at it's | 
|  | discretion. | 
|  | -------------------- | 
|  |  | 
|  | Introduction | 
|  | ------------- | 
|  | Some CPUs support a functionality to raise the operating frequency of | 
|  | some cores in a multi-core package if certain conditions apply, mostly | 
|  | if the whole chip is not fully utilized and below it's intended thermal | 
|  | budget. The decision about boost disable/enable is made either at hardware | 
|  | (e.g. x86) or software (e.g ARM). | 
|  | On Intel CPUs this is called "Turbo Boost", AMD calls it "Turbo-Core", | 
|  | in technical documentation "Core performance boost". In Linux we use | 
|  | the term "boost" for convenience. | 
|  |  | 
|  | Rationale for disable switch | 
|  | ---------------------------- | 
|  |  | 
|  | Though the idea is to just give better performance without any user | 
|  | intervention, sometimes the need arises to disable this functionality. | 
|  | Most systems offer a switch in the (BIOS) firmware to disable the | 
|  | functionality at all, but a more fine-grained and dynamic control would | 
|  | be desirable: | 
|  | 1. While running benchmarks, reproducible results are important. Since | 
|  | the boosting functionality depends on the load of the whole package, | 
|  | single thread performance can vary. By explicitly disabling the boost | 
|  | functionality at least for the benchmark's run-time the system will run | 
|  | at a fixed frequency and results are reproducible again. | 
|  | 2. To examine the impact of the boosting functionality it is helpful | 
|  | to do tests with and without boosting. | 
|  | 3. Boosting means overclocking the processor, though under controlled | 
|  | conditions. By raising the frequency and the voltage the processor | 
|  | will consume more power than without the boosting, which may be | 
|  | undesirable for instance for mobile users. Disabling boosting may | 
|  | save power here, though this depends on the workload. | 
|  |  | 
|  |  | 
|  | User controlled switch | 
|  | ---------------------- | 
|  |  | 
|  | To allow the user to toggle the boosting functionality, the cpufreq core | 
|  | driver exports a sysfs knob to enable or disable it. There is a file: | 
|  | /sys/devices/system/cpu/cpufreq/boost | 
|  | which can either read "0" (boosting disabled) or "1" (boosting enabled). | 
|  | The file is exported only when cpufreq driver supports boosting. | 
|  | Explicitly changing the permissions and writing to that file anyway will | 
|  | return EINVAL. | 
|  |  | 
|  | On supported CPUs one can write either a "0" or a "1" into this file. | 
|  | This will either disable the boost functionality on all cores in the | 
|  | whole system (0) or will allow the software or hardware to boost at will | 
|  | (1). | 
|  |  | 
|  | Writing a "1" does not explicitly boost the system, but just allows the | 
|  | CPU to boost at their discretion. Some implementations take external | 
|  | factors like the chip's temperature into account, so boosting once does | 
|  | not necessarily mean that it will occur every time even using the exact | 
|  | same software setup. | 
|  |  | 
|  |  | 
|  | AMD legacy cpb switch | 
|  | --------------------- | 
|  | The AMD powernow-k8 driver used to support a very similar switch to | 
|  | disable or enable the "Core Performance Boost" feature of some AMD CPUs. | 
|  | This switch was instantiated in each CPU's cpufreq directory | 
|  | (/sys/devices/system/cpu[0-9]*/cpufreq) and was called "cpb". | 
|  | Though the per CPU existence hints at a more fine grained control, the | 
|  | actual implementation only supported a system-global switch semantics, | 
|  | which was simply reflected into each CPU's file. Writing a 0 or 1 into it | 
|  | would pull the other CPUs to the same state. | 
|  | For compatibility reasons this file and its behavior is still supported | 
|  | on AMD CPUs, though it is now protected by a config switch | 
|  | (X86_ACPI_CPUFREQ_CPB). On Intel CPUs this file will never be created, | 
|  | even with the config option set. | 
|  | This functionality is considered legacy and will be removed in some future | 
|  | kernel version. | 
|  |  | 
|  | More fine grained boosting control | 
|  | ---------------------------------- | 
|  |  | 
|  | Technically it is possible to switch the boosting functionality at least | 
|  | on a per package basis, for some CPUs even per core. Currently the driver | 
|  | does not support it, but this may be implemented in the future. |