"German engineering, so good that it's not even funny." [/pathetic advertising slogan]
Hello and welcome to fancy kernel. This kernel has been built with the following three main goals: good battery life, reliability and a smooth and snappy user experience.
Feature list:
Standard version features
Based upon:
latest CM10.1 kernel source
continuously updated Linux version (3.0.78)
selected patches from the device's chipset vendor Texas Instruments
CPU:
CPU frequencies: 192, 384, 537, 806, 1036, 1228, 1420 MHz (default on boot: 192 - 1228)
control to set a minimum CPU frequency for screen-on (default: 384 MHz)
Will help with smoothness and responsiveness when you use the phone. When screen is off, however, 192 MHz frequency is used as well.
CPU governors: ondemandplus (default; more info), hyper, dyninteractive, interactive, ondemand, powersave, performance
ondemandplus is an ondemand- and interactive-based governor that has additional power-saving capabilities while maintaining very snappy performance.
ARM CPU topology: multi-core scheduling (enabled by default; saves battery by scheduling load among the CPU cores; more info)
GPU & Display:
GPU frequency control: 307, 384 (default), 512 MHz
simple GPU governor
color, contrast and gamma contols
content adaptive brightness off by default, sane and natural looking color settings
updated HSMMC driver (high speed multimedia card; the phone's 'hard drive bus controller' if you will)
optimized ext4 mountings
'discard' mount option ('trimming') for /system, /data and /cache (more info)
Network:
TCP congestion control algorithms: westwood (default), cubic, reno
updated WLAN driver
Misc:
vibration strength control
battery life extender (BLX)
fast charge
PGM support
various performance and battery life tweaks
init.d support (no matter if the ROM supports it or not)
elevated systemui priority
kernel updater script in terminal ('FUSS' by gwindlord)
more things... go check the source if you're interested.
compiled with GCC 4.7 (Google Android NDK r8e toolchain)
Extended version additional features
sound control (high performance sound, volume boost; not enabled by default)
custom voltage control
fsync toggle
zRAM
Download links:
Note: The first boot can take several minutes! This is because your whole file system is trimmed and depends on how 'jammed' it actually is. I know it takes long, but it is worth the wait. Your phone has not crashed!
Simply flash the provided zip file with TWRP or CWM. You can also extract the boot.img and then flash that file with fastboot. cache and dalvik-cache wipes are recommended.
Alternatively, you can update the kernel or change from standard to extended version (or vice versa) via the 'fuss' command from a terminal. Simply open a terminal, type 'su' and hit enter, then type 'fuss' and hit enter (do not type the quotes). Thanks to this method, there is no need to manually download the kernel and boot into recovery anymore.
Problems:
Do not report any potential bugs without doing cache and dalvik-cache wipes first.
If you have permission problems with the /sdcard/fuss folder (e.g. cannot delete the folder or write files to it), you need to flash this fix from CWM / TWRP.
Most settings can be controlled with kernel settings apps. Trickster MOD fully supports fancy kernel. With it you can control:
r25 >> r26
- removed async read starvation feature from sioplus (debugging showed it is not necessary)
- reverted several changes that caused worse performance than r24 (e.g., systemui priority is back to -20, sched_mc_power_saving is back to 2, readahead is back to 256)
- increased CPU transition latency to 30000 (was 20000, this aims to fix CPU stangenesses as SODs and jerky 1.4 GHz)
- nomerges back to 0 (thanks osm0sis)
r24 >> r25
- introducing SIOplus i/o scheduler (modifications: functionality for specifying the starvation of async reads against sync reads; starved write requests counter only counts when there actually are write requests in the queue; fixed a bug)
- swapped the 729 MHz CPU OPP with an 806 MHz OPP (someone told me ~810 MHz was a 'sweet spot' for responsiveness)
- updated to Linux 3.0.78
- set sched_mc_power_savings = 1 to get rid of microlags
- scheduler system fine tuning
- use dirty_bytes instead of dirty_ratio
- increased read_ahead_kb to 384 (good intermediate setting between the sometimes more snappy 512 and the sometimes more responsive 256?)
- nr_requests down to 160 (anything above causes slight stutter)
- renice systemui process to -17 instead of -20 (-20 should only be given to very critical processes)
- added lowmemorykiller launcher whitelist (makes the launcher 'unkillable'; thanks to osm0sis)
r23 >> r24
- elevated systemui process priority (smoother UI)
- trim filesystem on first boot after wiping cache and dalvik-cache (first boot takes a little longer due to this, but it pays off)
- re-enabled ro.adb.secure (all it needs is the updated adb version from the Android SDK)
r22 >> r23
- replaced busybox in ramdisk with a binary file that works as a standalone version (fixed all the fukkups ppl experienced in r22)
- fixed std version reporting itself as ext version
- hardcoded color settings again (ppl reported weird colors)
- disabled ro.adb.secure (adb wasn't working; this was recently added to the CM ramdisk)
- everything should be fixed on any ROM. Sorry for the trouble :(
r21 >> r22
- updated to Linux 3.0.77
- backported staging driver (including lowmemorykiller) from 3.4 kernel (introducing superior memory handling in my opinion)
- added Hyper CPU governor
- several scheduler tweaks
- read_ahead_kb down to 256 (this may appear very low, but it is still twice as high as the stock setting and improves responsiveness imo)
- several block and file system tweaks (thanks to Franco dev team)
- fixed dirty_ratio behavior that was increasingly filling up the RAM with 'garbage' (thus slowing down the phone)
- revert attempt to fix Wifi disconnects (was apparently responsible for some idle battery drain)
- fix deadline and SIO read / write expiring (caused lags and jerky UI sometimes)
- increased voltage for 1.4 GHz CPU OPP by 0.02V (someone reported a laggy phone with 1.4 GHz, probably caused by too little voltage)
- SDRAM power management fix from TI repo
- bcmdhd: workaround broken AC video queue in IBSS mode (from CM10.1 upstream)
- pulled-in latest updates from CM10.1 ramdisk
- added automatic APK zip-alignment on boot
- moved many previously hardcoded settings to ramdisk init script
- init.d support is now independent of the ROM having busybox included or not (thanks to osm0sis)
r20 >> r21
- updated to Linux 3.0.76
- relaxed overtweaked SIO (smoother again, but still snappy)
- removed graphics memory related commit that most likely caused slowdowns
- fixed fsync not showing up in the ext version
- added random MAC id bugfix by imoseyon (someone had problems and requested it)
- added init.d execution to RAMDISK (still need busybox included in the ROM)
- added two block tweaks
- moved fuss from zip package to ramdisk
- moved powerHAL fix from zip package to ramdisk (thanks to osm0sis)
r19 >> r20
- updated HSMMC driver from TI repo (noticable loading times improvement if you ask me)
- tweaked SIO to squeeze the most out of the new HSMMC driver
- fixed custom voltage not playing along with smartreflex enabled
- fixed a common bug with custom voltage, where some voltage corridors were not applicable
- wireless: lowered DTIM skipping in when device is asleep (hoping to get rid of Wifi disconnects)
- bye bye pegasusq governor
- three other fixes from TI repo
r18 >> r19
- reverted from SLQB memory allocator to SLUB (fixes PGM issues)
- Add assembler versions of AES and SHA1 for ARM platforms (better encryption performance with webpages)
- 3 minor fixes from ARM and TI
r17 >> r18
- updated Linux to version 3.0.75
- added and enabled SLQB memory allocator
- reverted the 10 percent brightness decrease (was just too dark outside)
- reverted the still present slight CPU undervolt (was too low, could cause some micro lags)
- improved automatic /cache trimming
- added power.tuna.so to flashable zip package (fixes the issue with resetting CPU frequency)
- fixed slightly inaccurate pixel clock setting
- pulled-in another 2 OMAPDSS patches from omapzoom repo
- some memory handling tweaks
- updated Broadcom WLAN driver (not the backport one other devs use)
- decrease the amount of time the device waits after entering low power mode to freeze processes (by franco)
- removed nodiratime mount option
- probably solved the low-brightness on wake-up problem (not entirely sure; please report)
r16 >> r17
- fixed screen-flicker problem
- a few other minor things
r15 >> r16
- updated Linux to version 3.0.74
- increased voltages for lower frequencies again since some users reported freezes
- min_free_kbytes to 8192 since the UI could get choppy after one or two days
- pulled in two more things from the TI omapzoom repo (DSS optimization; retention voltage spec update)
r14 >> r15
- updated Linux to version 3.0.73
- pulled in a few patches from TI's omapzoom repo (save a little battery; make the UI smoother)
- Tweaked smartreflex for less voltage for lower CPU frequencies (will save a little battery)
- various memory and scheduler optimizations
- bcmdhd: Enable Ad-Hoc (IBSS) mode (from CM 10.1 upstream)
r13 >> r14
- updated Linux to version 3.0.72
- a number of small tweaks
- lowered screen brightness by 10% to save battery
r12 >> r13
- updated Linux to version 3.0.71
- updated build toolchain to latest GCC 4.7 from Android NDK r8e
r11 >> r12
- added and enabled simple GPU governor (by faux123; will save some battery by not only using GPU min & max freqs, but also the 307 MHz intermediate step; controls available from within Trickster MOD)
- tweaked deadline i/o scheduler for flash memory devices and set it as default (deadline gives a better and more consistent performance imo)
- reverted kernel sync options (didn't seem to make it all that much smoother at all)
- completely removed OMAP 4460 CORE/IVA voltage dependencies (graphics and IVA units' voltage is completely independent from CPU now)
- decreased CPU transition latency to 15ms
- decreased readahead kbytes again, down to 768 now
- some more tweaks under the hood (check sources if you're interested)
- Extended version only: added Google's 'snappy (de)compression' algorithm for fast zRAM handling
- Extended version only: added zRAM support (can be enabled via Trickster MOD)
r10 >> r11
- updated Linux version to 3.0.70
- tweaked ondemandplus for more smoothness and modified downscaling logic a bit
- added custom lowmemorykiller values for better multitasking
- reduced readahead kbytes to 896 (snappier feeling but same i/o performance)
- enabled sync options in kernel config
- moved fuss / reflash to /data/fuss so they won't mess up the /sdcard/fuss folder's permissions. Also created symlinks for fuss and reflash (all you need to type in terminal is 'fuss' or 'reflash')
r9 >> r10
- updated Linux version to 3.0.69
- removed automatic /cache trimming and activated 'discard' mount option instead (this will do it on all partitions in realtime)
- reverted previous commit: 'tightened vfs cache pressure a bit' (caused more battery drain?)
- optimized build with architecture specific CPU/FPU build flags
- tweaked sched_fair values (wanted to do this for a long time)
- if both fancy kernel and fuss updater script are not available anymore (e.g. after flashing a new ROM), you can now re-flash the kernel via terminal. type: '/sdcard/fuss/reflash' (no quotes, need to do a 'su' before; thanks to gwindlord)
r8 >> r9
- updated Linux version to 3.0.68
- changed toolchain to GCC 4.7 (provided by Google in the Android NDK)
- automatically trim /cache partition when the screen is switched off
- tightened vfs cache pressure a bit
r7 >> r8
- updated Linux version to 3.0.67
- reverted a commit (CPU-based alignment) to fix lag issues reported by some users
- increased system tickrate to 256 Hz for a more responsive UI
- removed color multiplier safety lock (values > 200 are now possible on boot)
- relaxed ondemandplus tunables a bit to eliminate signs of choppiness
- tweaked SIO write starvation (again) to eliminate signs of choppiness
- added FUSS kernel updater script (by gwindlord) to the flashable
r6 >> r7
- updated Linux version to 3.0.66
- made the same kernel file working for both 4.2.1 and 4.2.2 ROMs (credits go to imoseyon)
- added recent cm10.1 upstream changes
- ondemandplus: added some safety-locks for tunable values that don't make sense
Rel. #5 >> r6
- updated gpu: pvr to DDK 1.8@2198402 to support Android 4.2.2
- updated ARM CPU topology to latest version
- updated kernel to Linux version 3.0.63
- updated BFQ I/O scheduler to version 6
- updated interactive governor to latest version
- simplified ondemandplus code and made tunables easier to understand
- enabled NTFS support for USB-OTG (upstream change from CM10.1)
- a few more things and updates... check the sources if you're interested.
Rel. #4 >> Rel. #5
- fixed 1080p video issues
- completely rebased ondemandplus governor. The ondemandplus scaling routine is now embedded in the much better interactive governor framework, which effectively reduces lag and any remaining governor-related instabilities.
- updated RAMDISK with a recent CM10.1 upstream change
Rel. #3 >> Rel. #4
- introducing 'ondemandplus' governor and set is as default. ondemandplus is based on ondemand. I enhanced it with an advanced powersave_bias functionality, additional suspend-code and extra suspend-scaling handling. This governor is snappy as ondemand, but will potentially save more battery.
- added SIO (simple i/o) scheduler and set it default. It just feels snappier than noop.
- updated kernel to version 3.0.62
- increased voltages for 729 and 1036 MHz very slightly. In case hotplugging was not the only cause for random freezes, this may further help stability.
- enabled CPU-frequency-independent and IVA-frequency-independent GPU voltage scaling to save battery. Previously, CORE voltage was automatically increased along with CPU and IVA frequencies due to voltage-dependence-tables, even though CORE clock stayed the same.
- fixed OMAP4460 initializing with max IVA frequency. I consider this a common bug which caused unneccessary battery drain from the time period from boot to first use of IVA.
- tweaked dirty_writeback/expire intervals to counter reported lag
- disabled interactivex governor, since its hotplugging-mechanism causes freezes. Even though pegasusq hotplugs as well, that governor remains as an experimental option.
- removed some more debug stuff
- some minor cleanup
Rel. #2 >> Rel. #3
- introducing two different versions: 'Standard' and 'Extended'. Extended is almost exactly like Standard, with the following three additional features: custom voltage control, fsync control, and sound control (high performance sound and volume boost)
- added custom voltage to Extendend version
- removed sound control from Standard version
- removed fsync control form Standard version
- defaulted BLX to 100 again (users should decide whether they want use it or not)
- announcement: The kernel is now where I wanted it. From now on, only kernel upstream patches and breakthrough developments will be considered for future releases. This will not be a kernel where no bit is left un-modded.
Rel. #1 >> Rel. #2
- added Ezekeel sound control (high performance sound, volume boost; controllable through Trickster MOD)
- added ARM CPU topology and enabled it by default (saves battery by scheduling load among the CPU cores in multi-core devices)
- applied some patches to pegasusq governor
- updated kernel to version 3.0.61
- a few minor tweaks 'under the hood' (check the source if interested)
Chit-chat:
Why did I name it 'fancy kernel' and why is the logo so ugly?
Because I do not want to use some random fancy name, but somehow have to give the kernel a name that is easily remembered. So after some self-irony involvement, I picked this name and made a ****ty logo :>
What is so special about this kernel?
It offers superb battery life with a smooth and stable user experience. I am aware that all kernels claim that. Just try, see for yourself and report back. I for myself get mostly 4 1/2 to 6 minutes screen-on time per percent when reading web articles. What is really unique about this kernel is the screen-on min frequency setting, the ondemandplus governor and the SIOplus scheduler, since I implemented them myself. Also, I wanted many other improvements that exist across the several great kernels around XDA. After all, this kernel is based on other people's work for like 95 percent (like most kernels are).
Why did I build this Kernel initially?
Well that's rather easily answered. I used to use Franco kernel (which I really liked), but I wanted a kernel for myself which fits exactly to my needs. In particular, I especially wanted working hotplug, GPU OC controls, the option to set a minimum screen-on frequency and several hardcoded settings.
Oh, and yes: I built the kernel because I had fun doing so. But be not mistaken that I am a 'playaround kid': I dislike pulling in every little mod someone made. What I want is stability.
After some time I realized hotplugging would not be stable. After that I wrote the ondemandplus governor to save battery.
Why did I release it if I built it for myself?
I did not plan to release it at first. But I decided to release it since there was this one new feature (as named before: the screen-on min frequency control). I thought 'maybe it can contribute to others as well.' Also, maybe people like my compilation. Sharing is caring :>
Announcement:
The thread now has more than 100.000 hits! This is awesome, thank you for your interest!
Running it now at 192/1420 with 537 as max screen off. Pegasusq and bfq. GPU = 384 and SR remains on.
Can't tell how battery life is, as I just installed it. Charging phone back to 100 right now.
It is very smooth and responsive from what I've done so far though. Going to keep with this kernel for a couple days, see how it compares to my fall back, LeanKernel + Tweaks. So far, so good though.
Having a good recovery makes the process of modifying, tweaking, maintaining, … more
XDA Developers was founded by developers, for developers. It is now a valuable resource for people who want to make the most of their mobile devices, from customizing the look and feel to adding new functionality. Are you a developer?