Q2.12: Emulation of Asymmetrically Performing CPUs
Linaro Connect Q2.2012
Asymmetric CPU Performance?
● ARM's new big.LITTLE architecture is an
asymmetric multiprocessor system in which
two types of cores (which use the same
○ Higher Performance cores (Cortex A15)
○ More Power Efficient cores (Cortex A7)
■ Best power efficiency, lower performance
● Similar asymmetric systems are also
possible by varying the manufacturing
processes of identical cores.
Emulation of Asymmetric CPU
● Linux scheduler is work is underway to allow
intelligent scheduling for these type of
asymmetrical CPU systems and so testing of
these changes is needed.
● Actual hardware with this cpu configuration
isn't (readily) available.
● The performance differences that exists on
these asymmetric cpu systems can be
emulated which can hopefully provide a test
platform for some the scheduler work.
Host System Types for Running
1. Multicore systems whose cpu frequencies
2. Multicore systems whose cpu frequencies
are independent from each other
a. modern X86, etc.
b. If in doubt, check
1. Cycle Stealer - Steal the user programmed
percentage of cpu processing cycles in order
to degrade performance.
2. Frequency limiting- For systems whose cpu
frequencies are not couples, limit the
frequency of chosen cpus to degrade
Cycle Stealer Pros and Cons
● Can be run on any multicore system
● Subject to the overhead and accuracy of the
● Current Implementation Cons:
○ Slices of time will be eaten. The smaller the slices
the more overhead. Only large slices of 10s of
milliseconds don't overly impact the overhead
○ Currently implemented userspace system doesn't
account for interrupt execution time
Frequency Limiter Pros and Cons
● Simple, low overhead system.
● Requires a system that supports
independent clock frequency changes.
● Most platforms only offer a few discrete
operating points. To achieve a very precise
level of performance degradation, you may
need to add additional CPUFreq operating
○ needed by cycle stealer to setting task priority
● Cycle Stealer
a. In one terminal, run cycle_stealer_mgr.sh as root
b. In another terminal, run 'mpstat 2 -P ALL' to monitor
amount of cpu idle time.
● Frequency Limiter
a. In one terminal, run 'asymm_freq_limit.sh'
b. In another terminal run
■ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
■ taskset 2 ./busy.sh
■ cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq
● veryify frequency is limited.