[Nexus 5 Original Android Development] kufikugel:
Well it is mpdecision which does not work this way and not like the alternative hotplug variants etc. General explanation

--mpdecision--

All Qualcomm based phones have Qualcomm prorprietary userspace binary called "mpdecision" aka m(ake)p(oor)decision. Instead of letting the kernel itself to decide what frequencies and how many cores to run, this "mpdecsion" binary polls the kernel run queue statistics and decides for the whole system the "optimal" frequency and the "optimal" number of cores to use. The concept is fine, except the decision making is done in userspace and it's 100% closed source so there's no way to tweak it and there's a latency (because all userspace binaries needs to "poll" the kernel for the latest information which is slightly delayed). - faux123

That being said.....we do not use the proprietary mpdecision from Google exactly due of the above stated reasons. We use one which works on kernel level (not on user space) + is fully customizable (eg go into trickster and press the mpdecision button you have a bunch of things you can tweak)...thanks to [MENTION=4195844]show-p1984[/MENTION] who did over the last two years an incredible job to program an open source kernel level integrated mpdecision variant even before Google at all officially released something like that :D

---------- Post added at 03:02 PM ---------- Previous post was at 02:54 PM ----------

In addition (credit to show-p just copy pasted due I am to lazy to write it down lmao)

What is msm_mpdecision?

100% kernel based multi core decision! (should cpu1/2/3 be online or not?)

This replaces your /system/bin/mpdecision binary which is renamed by the installer to mpdecision_bck.

Check /sys/kernel/msm_mpdecision/conf/ for the configuration.

startdelay = time until mpdecision starts doing it's magic (20000)

delay = time between checks (130)

pause = if something else plugs in the cpu, fall asleep for 10000ms (10 secs)

scroff_single_core = if the screen is off, don't plug in cpu1/2/3. Additionally: Unplug all cpus except cpu0 when screen is turned off (1)

enabled = enable(1) or disable(0) mpdecision. This does not affect scroff_single_core!

min_cpus = min cpus to be online, cannot be < 1. Default: 1

max_cpus = max cpus to be online, cannot be > 4. (if you set it to 2 and min_cpus to 1 you will basically have a dualcore) Default: 4

idle_freq = a value against that will be checked if a core +/- is requested. (499200)

If cpu0 is below that value and a core up of another cpu is requested, nothing will happen.

If any other cpu is above that value and a core down of that cpu is requested, nothing will happen. (otherwise it would now put down that cpu even though it is still working, which isn't what we want)

Hot plug thresholds (aka now it gets 'complicated')

This small formula calculates which value will be used: (number_of_cpus_online - 1) * 2

The result of this formula will be the nwns_threshold where a new cpu is hotplugged.

The result of this formula + 1 will be the nwns_threshold where a cpu is unplugged.

nwns_threshold_x = runqueue threshold, if this is reached cpuX will be hot/unplugged

twts_threshold_x = time threshold, this amount of time must have passed for the related action to be taken (hot/unplug)

Example:

One cpu is online.

(1 - 1) * 2 = 0 ergo:

nwns_threshold_0 = cpu1 will be hotplugged at this value

((1 - 1) * 2) + 1 = 1

nwns_threshold_1 = cpu0 will be unplugged at this value

Since we can't unplug cpu0 this is '0'.

Two cpus are online.

(2 - 1) * 2 = 2 ergo:

nwns_threshold_2 = cpu2 will be hotplugged at this value

((2 - 1) * 2) + 1 = 3

nwns_threshold_3 = cpu1 will be unplugged at this value

etc...

Some values are:

NwNs_Threshold: 12, 0, 25, 20, 32, 28, 0, 35

TwTs_Threshold: 140, 0, 140, 190, 140, 190, 0, 190

Where the position and function of the number equals the result of the above explained formula.

(all times are in ms)

If you want to see the mpdecision magic happening:

adb shell
cat /proc/kmsg | grep 'MPDEC'

mpdecision's input event boost, aka project butter :p

This will boost your min cpu speed if you touch the screen or press a button and gives you full control.

In those events the min cpu freq will be risen to a predefined value (look below) on every online cpu. This boosts overall reaction times and smoothness a lot. (works similar to the qcom mpdecision binary)

Configuration files:

root@android:/sys/kernel/msm_mpdecision/conf # ls | grep boost

boost_enabled

boost_freqs

boost_time

All of them work like the usual sysfs files, except one special case:

boost_freqs will list all frequencies from cpu 0 to cpu x. Cpu 3 and any following cpu will share one frequency.

To change those frequencies echo the cpu number + the frequency in khz.

Example: To change the boost freq of cpu3 (and 4,5,6,7,8, etc) the echo would look as follows:

echo "3 960000" > /sys/kernel/msm_mpdecision/conf/boost_freqs

for cpu0:

echo "0 960000" > /sys/kernel/msm_mpdecision/conf/boost_freqs

Defaults:

cat /sys/kernel/msm_mpdecision/conf/boost_freqs
960000
960000
729600
576000