Software for big.LITTLE Implementations
In software for big.LITTLE implementations, the fundamental idea is that executing code should be dynamically moved to the right-size processor for the performance needs of the task. There are different levels of granularity for addressing this partitioning of work to the big and LITTLE core clusters. The first two modes are migration modes: they use modifications to existing dynamic voltage and frequency scaling mechanisms to decide when to switch an entire CPU cluster or an individual CPU worth of work to the big or LITTLE side of the compute subsystem. The third mode, Global Task Scheduling, modifies the kernel schedule to be aware of the performance requirements of individual threads, and allocates threads to an appropriately sized core. Global Task Scheduling provides the most flexibility for tuning the performance and power balance in an SoC, but it is also the most complex method to implement. That complexity, however, is addressed in kernel patchsets and a stable Linux Kernel Tree version that incorporates the patches. Therefore an SoC developer's or OEM's work in system bringup is no more complex than for a standard DVFS-based system. It does potentially require more tuning of parameters related to the software for big.LITTLE implementations.
All three modes run in kernel space and require no modifications to user space code or middleware. Existing power management mechanisms for shutting down unused cores are active in all three cases. Additionally, all three modes can run on the same hardware, although only Global Task Scheduling can support different numbers of big and LITTLE cores.