+Electroactive Kernel
FEATURES
- Overclocking/underclocking options
- Electroactive default CPU governor with dual-phase frequency, boost_sampling factor, and boostpulse
- Many other popular CPU governors including UberDemand(Cl3Kener), Badass(Dennis Rassman), Impulse(neobuddy89), and much more.
- MSM MP-Decision Hotplug
- Full KCAL support
- Bleeding-edge CAF updates
- Full Gamma reverse engineering support
- Synapse + script & runparts built-in
- Optional improved Cpu optimization level 'l2' and bus overclocking
- Power Aware CPU Scheduling
- Partial-Resume
- Full voltage control
- Wake gestures
- Kernel Samepage Merging
- CPU Deferred Timers
- Msm-Thermal-X thermal driver
- Optional sweep2wake and doubletap2wake
- Optional USB fastcharge
- Optional backlight dimmer
- Kernel compressed with LZ4-r127, GZIP for faster boot times
- Several I/O controls with ROW as default
- Optional cooler color
- Advanced color and gamma control
- Power-efficient workqueues ported from 3.18 mainstream - improves power efficiency
- 3.4.x updates and fixes from upstream
- Build with optimized Toolchains
- Use Android device as USB keyboard/mouse
- Full -O3 & graphite and -pthread support
- Optional max screen off frequency at 1190 MHz
- Charge light support
- Optional disable fsync
- Enhanced TCP with wifi and network enhancements
- Optimized AES, SHA1, and RWSEM
- OTG flash drive support FAT32
- NTFS r/w, CIFS, and exFAT support
- Fastest ZRam backported from Linux 3.18 kernel
- Enhanced LMK
- Tuned virtual memory
- MultiROM support
- init.d support
- /dev/frandom support
- DriveDroid compatible
- electroactive.conf support
- F2FS support
- Linaro enhancements
- Thermal throttling control: elexcool, extracool, and stockcool options
- Compatible with TricksterMOD, Device Control, Kernel Tweaker, Franco Display Control and FauxSound Control, and Synapse Kernel manager
- Vibration strength tunable
- FSTRIM built-in kernel
NOTES & INFORMATION
Electroactive governor
The Electroactive CPU governor has been created to get some of the best balances between battery life and performance that you will see on a device. It is a hybrid class governor, using a unique way to merge the best of both interactive and ondemand. It includes some extra additions and enhancements to be more battery saving than interactive governor and some boost tunes and additions that allow better power management and performance in games as well as better power saving when in normal use. CPU boost, graphics boost, fast_start deep_sleep and detection features are built in as well as 300 MHz clock speed in suspend. This governor performs extremely well in games, normal use, battery performance, and just about everything. Some tunables available in the governor:
boostpulse: Immediately boost speed of all CPUs to hispeed_freq for min_sample_time, after which speeds are allowed to drop below hispeed_freq according to load as usual.
boosted_sampling_down_factor: This custom made parameter's set default setting will give several 0.4 second bursts of full throttle CPU to programs. It's about the time that user interface has to produce some meaningful response to your input so to feel smooth, especially while gaming. Besides better responsiveness, this setting will also give better overall speed to many programs which often interchange high CPU demand with IO waits and then suffer because the CPU governor too eagerly throttled down the frequency during those waits.
default_freq_boost_time: this is the default time that the CPU will spend in 'boost mode' before scaling down to normal frequencies, such as when in normal use.
ui_sampling_rate: when you touch the screen, the sampling rate changes temporarily to whatever you set it to.
down_differential: After spending sampling_down_factor*sampling_rate micro seconds at maximum frequency on high load, governor samples the load again to calculate an approximate targeted frequency to scale-down-to which should not trigger up_threshold in the next sample. (Triggering up threshold may cause jumping to max frequency again). Max_load_freq is checked against (up_threshold - down_differential) * current frequency. If found to be smaller, CPU is scaled down to a target frequency as described above. Down_differential also act as the factor to prevent aggressive scale down. Higher value of down_differential corresponds to delayed scaling down.
two_phase_frequency: Two-phase is a battery saving technique where even during max cpu frequencies, there are still gaps of inactivity so instead of running @ max frequency all the time, the two phase will alternate between busy/idle phase. Accepts four frequency values separated by comma, for cores 0, 1, 2, and 3.
input_event_min_freq: takes four values separated by comma. These are the input boost frequencies for cores 0, 1, 2, and 3.
input_event_timeout: this is the length of time in milliseconds that the input boost will be active (default 500). Setting this to 0 disables input boosting.
powersave_bias: this parameter takes a value between 0 to 1000. It defines the percentage (times 10) value of the target frequency that will be shaved off of the target. For example, when set to 100 -- 10%, when ondemand governor would have targeted 1000 MHz, it will target 1000 MHz - (10% of 1000 MHz) = 900 MHz instead. This is set to 0 (disabled) by default. When AMD frequency sensitivity powersave bias driver -- drivers/cpufreq/amd_freq_sensitivity.c is loaded, this parameter defines the workload frequency sensitivity threshold in which a lower frequency is chosen instead of ondemand governor's original target. The frequency sensitivity is a hardware reported in a value between 0 to 100% that tells software how the performance of the workload running on a CPU will change when frequency changes.
ignore_nice_load: this parameter takes a value of '0' or '1'. When set to '0' (default), all processes are counted towards the 'cpu utilisation' value. When it's set to '1', the processes that are run with a 'nice' value will not count aka ignored in the overall usage calculation. This is useful if you are running a CPU intensive calculation that you do not care how long it takes to complete as you can 'nice' it and prevent it from taking part in the deciding process of whether to increase your CPU frequency.
freq_for_responsiveness: up threshold considered for sampling load is up_threshold_at_min_freq. Also during the part where CPU is at maximum load frequency, governor need to find the optimal frequency as the next frequency - which should not trigger up_threshold in the next sampling. When such a frequency_next is found to be a) less than freq_for_responsiveness b) will not trigger down_threshold in the next sample, then the optimal frequency is set to freq_for_responsiveness.
Electroactive Configuration File
Kernel defaults are used to build a configuration file, based off of elementalx's original config file. The config file is found at /etc/electroactive.conf. You can edit this file to change kernel settings. Whatever is set in this file will take effect when the device is booted (unless other scripts or apps interfere).
If settings are not sticking:
Make sure you have busybox installed correctly and updated to the latest version
Make sure the file permissions for /sbin/electroactive.sh are set to execute.
Check to see if any scripts or apps are interfering with your settings.
To execute the script file:
- Install Terminal Emulator from the Play Store if you haven't already and open it.
- In the emulator type: "su" and press enter
- Type: "cd sbin" and press enter
- Type: "sh electroactive.sh" and press enter
- The values should now be applied, with no need to reboot
As always, you can also edit the values using the Synapse app or reboot to apply.
fsync
fsync can be disabled if you're looking for the last ounce of performance. If you disable it however there is a slight risk of data loss if your phone shuts off unexpectedly before the filesystems are synced.
Max screen off frequency
The default max screen off frequency is 1190MHz, which is a good balance between limiting the voltage/frequency and the time required to complete tasks while the screen is off. This can be changed manually at /sys/devices/system/cpu/cpu0/cpufreq/screen_off_max_freq
NTFS and exFAT support
This is for anyone who wants to use OTG cable to connect a USB stick or portable hard-drive formatted with Microsoft's NTFS or exFAT filesystems. (Useful for installing and transporting files from your device) You will need Stickmount or a similar app
F2FS support
F2FS support is built into the kernel. No need to flash any other support patches before installing Electroactive.
Color preset
Some users complain that the Nexus 5 screen has too 'warm' colors, so there are two color presets: stock and slightly cooler. You can edit /etc/electroactive.conf to change the setting on boot.
/sys/module/mdss_dsi/parameters/color_preset
0 = stock color
1 = slightly cooler color
Sweep2wake (flar2)
Sweep2wake allows you to turn on your phone by swiping your finger across the screen. There are four sweep actions that will work
Gesture........Value
Sweep right......1
Sweep left........2
Sweep up.........4
Sweep down....8
Add up the values for each gesture you want to enable and put the total in /sys/android_touch/sweep2wake. For example, to enable all gestures, the value is 15 (1+2+4+8). To enable sweep right, sweep left and sweep up, the value is 7 (1+2+4)
/sys/android_touch/sweep2wake
Doubletap2wake
DoubleTap2Wake (DT2W) allows you to wake the device by double tapping anywhere on the screen. This causes significant battery drain, so you choose at your own choice if you want it enabled or not. You can edit /etc/electroactive.conf to change the setting on boot.
/sys/android_touch/doubletap2wake
0 = disabled
1 = enabled (bottom of screen only)
2 = enabled (full screen)
Sweep2Sleep
Sweep2Sleep allows you to put the device to sleep by sweeping your finger across the navigation bar area. You can choose different directions to swipe. Unlike Sweep2wake, this does not cause any battery drain. You can edit /etc/electroactive.conf to change the setting on boot.
/sys/android_touch/sweep2sleep
0 = disabled
1 = sweep right
2 = sweep left
3 = sweep left or right
Backlight dimmer
Backlight dimmer allows you to adjust the LCD screen brightness lower than is possible with stock. You can edit /etc/electroactive.conf to change the setting on boot.
/sys/module/lm3630_bl/parameters/backlight_dimmer
0 = disabled
1 = enabled
USB fast-charge
This will allow you to charge at a faster rate when connected to a USB port. The default limit for USB ports is 500ma, this increases it to 900ma. This only works on laptops/desktops/any computer but not the phone's charger. You can edit /etc/electroactive.conf to change the setting on boot.
MSM Thermal-X Driver Options
MSM Thermal-X will throttle your cpu speed to keep it cool and unleash it if the cpu has cooled down enough. The input-event boost will temporarily boost the cpu frequency to prevent any lag while not hogging up battery.
Check /sys/kernel/msm_thermal/conf/ for the thermal configuration
allowed_max_high = highest threshold (phase 3)
allowed_max_low = remove the throttling if we cooled down to this (clr_thrshold)
allowed_max_freq = max frequency if throttled (limit)
[...]mid[...] = same as above, just for phase 2
[...]low[...] = Lowest threshold (phase 1)
check_interval_ms = how often shall we check? (sampling rate)
shutdown_temp = if we reach this shut down the device!
MSM MP-Decision Hotplug Options
MP-Decision Enabled
Enables/Disables the hotplug. On disabled the backup cpu-control will be stock Qualcomm mp_decision
# 1 for enabled
# 0 for disabled
echo "1" > /sys/kernel/msm_mpdecision/conf/enabled
Touch Boost
Touch-boost will temporarily raise cpu_min to a frequency determined by an mp_decision algorithm.
# 1 for enabled
# 0 for disabled
echo "1" > /sys/kernel/msm_mpdecision/conf/boost_enabled
Idle Frequency
If the first core is below this frequency, then don't plug the other cores.
echo "300000" > /sys/kernel/msm_mpdecision/conf/idle_freq
EcoMode
Ecomode tries to limit cores to just 2 unless there is a very heavy workload in which cores 3 and 4 are temporarily brought online and won't kick on until both CPUs are maxed out then it will allow for all 4 cores to come temporarily online.
echo "99" > /sys/kernel/msm_mpdecision/conf/nwns_threshold_4
StrictMode
Strict mode functions so only 1 CPU tries to be online at first before bringing up cpu1 and cpu2 online.
echo "85" > /sys/kernel/msm_mpdecision/conf/nwns_threshold_2
echo "99" > /sys/kernel/msm_mpdecision/conf/nwns_threshold_4
Max CPUs online
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).
echo "4" > /sys/kernel/msm_mpdecision/conf/max_cpus
Min CPUs online
Min cpus to be online, cannot be < 1.
echo "1" > /sys/kernel/msm_mpdecision/conf/min_cpus
Screen-off 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.
echo "1" > /sys/kernel/msm_mpdecision/conf/scroff_single_core
Pause
If something else plugs in the cpu, i.e. CPU-Governor or Thermal, fall asleep for <#>ms.
echo "10000" > /sys/kernel/msm_mpdecision/conf/pause
StartDelay
Time until mpdecision starts to work.
echo "20000" > /sys/kernel/msm_mpdecision/conf/startdelay
Delay
Time between checks.
echo "130" > /sys/kernel/msm_mpdecision/conf/delay
Hot plug thresholds
This 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
echo "#" > /sys/kernel/msm_mpdecision/conf/nwns_threshold_X
echo "#" > /sys/kernel/msm_mpdecision/conf/twts_threshold_X
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).
INSTALLATION
- If you come from another kernel, dirty-flash your ROM first without wiping any data
- If you are an F2FS user, flash the F2FS support patch found below
- Flash Electroactive kernel in recovery
- Reboot
*F2FS users:
THIS KERNEL USES YOUR RAMDISK, it will just modify it on the fly while flashing. These changes are so to not create any incompatibilities with ROMs or other kernels. Some things to consider when using F2FS:
Use F2FS in only r/w partitions (/data and /cache).
F2FS in /system does not make any difference and requires selinux to be set to permissive, and Electroactive kernel is enforcing by default, although you can change this in the .config file found in /etc/electroactive.conf, but is still not recommended.
DOWNLOADS
Android M Preview/2
Electroactive-N5-3.10-M
Android 5.1/5.1.1
Electroactive-N5-2.50
Please consider a donation to support the Electroactive Kernel Project, and support for more devices.
Donors Hall of Fame
Send me a PM or email me if I didn't add you after you donated and I'll add you to the list
- danmaman
- Chirag7
- Zidane23
XDA:DevDB Information
Electroactive Kernel, Kernel for the Google Nexus 5
Contributors
Electrex
Source Code: https://github.com/Electrex/Electroactive-N5
Kernel Special Features:
Version Information
Status: Stable
Current Stable Version: 2.50/3.10
Stable Release Date: 2015-08-09
Current Beta Version: 2.52
Beta Release Date: 2015-09-27
Created 2015-04-10
Last Updated 2015-09-27
Last edited: