Actions usually taken to prevent processors from overheating, such as decreasing the frequency or stopping the execution flow, also degrade performance. Multiprocessor systems, however, offer the possibility of moving the task which caused a CPU to overheat away to some other, cooler CPU, so throttling becomes only a last resort taken if all of a system's processors are hot. Additionally, the different energy characteristics that different tasks are showing can be exploited and hot tasks as well as cool tasks can be distributed evenly among all CPUs.
This work presents a mechanism for determining the energy characteristics of tasks by means of event monitoring counters, and an energy-aware scheduling policy, which strives to assign tasks to CPUs in a way that avoids overheating individual CPUs. We implemented energy-aware scheduling for the Linux kernel. Evaluations show that the overhead incurred by additional task migrations is negligible compared to the benefit of avoiding throttling.