Development [Kernel][06.09.2022][Android 13.0.0]Kirisakura 4.1.6 for Pixel 6/Pro aka "RAVIOLE"

Search This thread

Freak07

Recognized Developer / Recognized Contributor
Jan 2, 2011
5,737
19,121
Kirisakura-Kernel for the Pixel 6/Pro

Hello everyone,

To keep it short: Here is Kirisakura - Kernel for the Google Pixel 6 Pro aka Raven and the Pixel 6 aka Oriole, together Raviole.
I would appreciate if everybody that flashes the kernel, reads at least once through this opening post and the following ones.

The kernel aims to keep most of the subsystems updated, way ahead of the stock kernel, thereby improving security, stability and performance!
This includes Linux-Stable, F2FS-Stable and kernel/common!
If that got you curious, have a read about linux-stable and why it is important here. The stable-process is not the same for every subsystem, but the general idea, rule of thumb and benefits are applicable for other subsystems as well.

The kernel includes a lot of improvements and contributions from other developers as well. Without this kernel would not exist.
A big part of improvements originate from @arter97´s, @kdrag0n´s and @Sultanxda´s work. Many others contributed in some way or another to this kernel.
A big thanks to all of them at this place!

Now lets continue with a list of features in the next paragraph!

Features:
Main Features:
- Based on latest A13 kernel sources from Google, Kernel is made for Android 13
- Linux-Stable-Upstream included to 5.10.141
- Compiled with prebuilt Google clang 14.0.7
- FHD Support for Pixel 6 Pro (display is able to run at 1080p), more info here and here
- merged kernel/common (improvements to android-common-kernel straight from google)
- MM subsystem reworked (more info and some patchsets linked in this post)
- Multi-gen LRU backported (more info here, here as well and here) to improve mm and reduce cpu cycles
- Utilize an additional kswapd thread to increase throughput for memory reclaim
- pelt multiplier tied into powerhal to speed up scheduler during interaction (more info here)
- prevent frequency spikes caused by small transient tasks when the device is idle(more info here)
- tie mechanism to prevent frequency spikes caused by small tasks also into powerhal
- scheduler improvements for RT (realtime) tasks
- introduce and setup PMU limiter (prevents CPU from spiking to max when it isn´t needed, based on PMU reads, more information here)
- improve camera performance by tuning the powerhal during recording
- bias tasks of rt, sf and ta groups to prefer high capacity cpus during app launches, interactions
- improve app launches via powerhal
- improve trusty driver performance which connects to fingerprintscanner-hal by using high perf wq during fp unlock
- restrict maximum CPU-Freqs during screen off/ idle to 1.1GHZ for all clusters to save power
- introduce unfair f2fs rwsems to prevent writer starvation and improve IO perf under heavy load
- fuse: give wakeup hints to scheduler to speed up compress/decompress in internal storage (details)
- enable RCU_BOOST (details here), also fix RCU_BOOST behaviour
- F2FS-Stable updated
- TCP backports from mainline
- SSG IO scheduler for reduced overhead and less CPU cycles (more lightweight and android optimized)
- Scheduler updates from linux-main
- use improved energy model for exynos cpu cooling/thermal control
- allow GPU to scale down to 150mhz, but boost to higher value in case of interaction via powerhal
- affine IRQS to CPU 7 during camera usage for improved performance as it tends to overload the little cores
- use bbr as default TCP congestion algorithm (fasted algo according to this excellent research from @kdrag0n found here )
- Enable support for TTL spoofing
- Include LRNG, see here and here for more info, bump to v45 with 3.0.0
- important patches from kernel/common for 5.10 (here are more details)
- CleanSlate Features from @tbalden, big applause here! (s2s, notification booster, battery saver, flashlight notifications. Please note: cleanslate features that work otherwise with rooted devices like kadaway (adblocking) are not implemented on this kernel since I´m running rooted)
- dirty pipe exploit fixed
- supports direct usb access for hi-res playback over USB-C DACs
- flashing the kernel will preserve root

Various Optimizations:
- update several drivers to use power efficient workingqueues (for example wlan driver)
- kernfs: use buffer from the stack space
- printk: use buffer from the stack space
- kthread: use buffer from the stack space
- bpf: avoid dynamic memory allocation for small value buffers
- binder: Reserve caches for small, high-frequency memory allocations
- kernfs: use kmem_cache pool for struct kernfs_open_node/file
- cgroup: use kmem_cache pool for struct cgrp_cset_link
- f2fs: reduce timeout for uncongestion
- f2fs: Demote GC thread to idle scheduler class
- f2fs: set ioprio of GC kthread to idle
- mm: vmstat: use power efficient workingqueues
Wakelock Blocker:
- advanced wakelock blocker with the ability to block any wakelocks (dangerous, use with caution)
- please read [URL="https://arstechnica.com/gadgets/2018/08/p-is-for-power-how-google-tests-tracks-and-improves-android-battery-life/"]this for further info

AK3 Helper Module:
- restrict little cluster to 1,19ghz mid cluster to 1,19ghz and big cluster to 1,1ghz during screen off, to reduce battery usage for example during music playback
- only use little cores during screen off/device suspend
- tie pelt multiplier into the powerhal (more info here)
- prevent frequency spikes caused by small transient tasks during idle operation (more info here)
- boost scheduler using the pelt multiplier during fingerprint unlock operation
- setup and control PMU limiter via powerhal (more info here)

DOWNLOAD:
Download is always located in this folder:

Changelog:
Android 12.0.0

1.0.0 Initial Release
1.0.2 https://forum.xda-developers.com/t/...r-pixel-6-pro-aka-raven.4358435/post-85910621
1.0.5 https://forum.xda-developers.com/t/...r-pixel-6-pro-aka-raven.4358435/post-85924419
1.3.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-85976139
1.4.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86109665
1.5.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86259863
1.7.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86390563
1.8.4 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86541727

Android 12.1.0 Stable (March feature drop and more recent)
2.0.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86617873
2.0.1 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86637233
2.1.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86695911
2.3.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86821331
2.4.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86834981

Android 12.1.0 Stable (June feature drop and more recent)
3.0.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86992705
3.0.1 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86996237
3.0.17 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-87127695

Android 13.0.0 Stable
4.1.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-87290247
4.1.6 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-87399635



Android 12L QPR Beta - Deprecated

Requirements

- unlocked Bootloader
- USB-Debugging in developer options enabled
- latest adb and fastboot binaries
- working adb and fastboot environment so you can flash back to stock in case something goes wrong
- working magisk environment (a device rooted with latest magisk stable in case you want to be absolutely safe)


How to flash the Kernel:
1a. Make sure you tick all the requirements above
1. Download the correct kernel.zip depending on your device (Pixel 6 = oriole || Pixel 6 Pro = raven)
2. Flash the correct kernel.zip via EXKM, FKM or kernel flasher. Root will be preserved. The AK3 magisk helper module will be automatically installed during flashing the kernel.zip and be present on next reboot.
Do not remove or disable the AK3 Magisk Helper Module otherwise the device will bootloop.
3. Reboot and profit.


Manual installation is no longer supported starting with release 3.0.0, as there´s a free open-source option to flash kernel.zips now.
Instead use the free kernel flasher, which can be found here.

Manual installation without relying on paid apps like fkm/exkm:
Please have a look at the linked post.



Donations:
Donations are not mandatory but very welcome if you want to support development or just buy me a coffee/tea/beer :)
If you like my work: http://paypal.me/freak07

Credits:
@osm0sis for all his work on AK3.
@tbalden for being the best HTC, Pixel, OnePlus and Asus wingman!
@capntrips for all his work on the pixel 6!
@LeeDroid and @mwilky for their awesome roms and work I used on multiple devices!
@Captain_Throwback for all the mentoring and guidance!
@Eliminater74 for bringing me into the game and the Inspiration
@nathanchance for his upstream guidance and assistance
@RenderBroken for helping me out
@flar2 for all his work
@joshuous for all the help he provided to me in the past!
@arter97 for giving me advice
@kdrag0n for his help and advices!
@topjohnwu for magisk and his entire work!


Source Code: https://github.com/freak07/Kirisakura_Raviole
 
Last edited:

Freak07

Recognized Developer / Recognized Contributor
Jan 2, 2011
5,737
19,121
F.A.Q:

Question:
How do I return back to stock?
Answer: Extract boot.img, dtbo.img, vendor_boot.img, vbmeta.img and vendor_dlkm.img from the matching factory image provided on googles download page.
If you disabled verity/verification previously there´s no need to flash the vbmeta.img when restoring.
If you want to stay rooted make sure to flash a boot.img that has been patched with magisk.
Flash those images via fastboot/fastbootd and you will be back on stock kernel. If you don't know the fastboot commands to flash the images, check the instructions how to flash those images in post #4.

Alternatively dirty flash the whole firmware without wiping (the web tool is an option too). If you disabled the vbmeta flags, don't forget to disable them again after flashing a full firmware package and re-root.
I guess the second option might be easier and faster for most users.


Question: How to report bugs properly?
Answer: Have a look at post #3 in the linked thread. The linked guide is a pretty good starting point.
Before reporting any bug make sure you´re running on a stock configuration. That´s means you´re not using any mods, tweaks in kernel managers or other root tweaks , magisk modules, scripts or other modifications that alter various functions like sound mods, data traffic, sleeping behaviour, scheduler, magical battery tweaks etc.
Try to describe the issue as detailed as possible! Give your exact setup, like rom, magisk version, kernel version.
Is the issue reproducible? Does it happen frequently?
Please make sure to meet the points described above, provide logs as detailed in the link above, otherwise debugging is a lot more time consuming and harder. If these requirements aren´t met and I don´t find time to either reproduce the issue myself or I´m not able to reproduce the issue myself reports might just be ignored. If you can already reproduce the issue and provide logs it greatly limits the amount of time I have to spent until I figure out how to reproduce it.


Question: What about unlocking, rooting, passing safetynet, apps detecting root/modifications and other topics that are vaguely related, but not really subject of this thread?
Answer: If you want to modify your phone via root/magisk in any way you need to unlock the bootloader. Unlocking will result in safetynet not passing. This has nothing to do with the kernel. At the moment of writing this, safetynet not passing can be worked around with a magisk module called "Universal SafetyNet Fix".
Not passing safetynet is unrelated to the kernel since hardware attestation is enforced on nearly all newly released devices now.
If you´re not passing safetynet banking apps might for example be detecting root. There are various tricks to hide root/modifications to the phone from banking apps or others but that´s not really subject of this thread.
I recommend taking a look at this excellent collection of helpful threads from @roirraW "edor" ehT!
It can be found following this link!


Question: I get a device corrupted message after flashing the kernel. How to get rid of it?
Answer: A workaround has been shared in the following post linked here. It seems this issue happens randomly on devices without the vbmeta flags for verity/verification disabled.
Essentially flashing/booting (booting should be enough) a boot.img from an older firmware, letting it attempt to boot but fail, and then restore boot.img from the matching firmware clears the message.
If you´re doing this while having the kernel installed don´t forget to flash back to stock completely, which is also described in the FAQ.
 
Last edited:

Freak07

Recognized Developer / Recognized Contributor
Jan 2, 2011
5,737
19,121
AOSP Build Environment and Standalone Kernel builds (monolithic builds)

I´m sure some of you followed the movement towards the Generic Kernel Image (GKI) and Qcoms adaption to it called QGKI.
You can find more information about GKI following this link.
What does that mean for custom kernels and this custom kernel?
The last few years the kernel on android devices was more or less compiled as a monolith. That means the kernel is in the zImage with all (most) drivers compiled inline.
However with GKI this changed. There´s the base kernel image while vendor/device specific drivers are compiled as dynamically loadable kernel modules.
On last years devices like the Pixel 5 (using a 4.19 kernel) and this years devices with SD888 on a 5.4 kernel base, there was the possibility to change the QGKI kernel back into a monolithic kernel image. (building the drivers that are on stock kernel external modules back into the zImage to end with a monolithic kernel)
On the Pixel 6 I wasn´t able to achieve this yet. But during my tries I also wondered if maybe finally the time has come to follow suit, instead of trying to enforce old ways, when there´s a new way going forward.
What does that mean. This means that at this point the kernel is shipped as images that are to be flashed via fastboot. At a later stage I´m sure we can modify anykernel3 to allow flashing zips again, but at this early stage fastboot flashable images will be provided.
Those images can be flashed the same way the device is rooted, therefore I think everybody should be able to flash it easily since the device can´t be rooted any other way.

The kernel was compiled using the aosp kernel build environment. Information about it can be found on the documentation page from google.
 
Last edited:

Freak07

Recognized Developer / Recognized Contributor
Jan 2, 2011
5,737
19,121
Fastboot commands:


Flash the images in this order:

Boot to bootloader:
Either select Reboot to bootloader option via magisk manager, use the button combinations or run the following command while in the OS:
or type:
Code:
adb reboot bootloader

Now in fastboot flash boot.img, dtbo.img, vbmeta.img (vbmeta can be left out if you disabled verity/verification) and vendor_boot.img
Commands:
Code:
fastboot flash boot boot.img
fastboot flash dtbo dtbo.img
fastboot flash vendor_boot vendor_boot.img

caution with the vbmeta.img, if you disabled verity/verification flashing this images without the flags will re-enable both verity and verification! If you disabled verity/verification on your device there´s no need to restore it.

fastboot flash vbmeta vbmeta.img

Now boot to fastbootd
Code:
fastboot reboot fastboot

Once in fastbootd:
Code:
fastboot flash vendor_dlkm vendor_dlkm.img
4. Reboot either via buttons
or by typing
Code:
fastboot reboot
5. Profit![/SPOILER]
 
Last edited:

Freak07

Recognized Developer / Recognized Contributor
Jan 2, 2011
5,737
19,121
Manual Installation:

Note:
Manual Installation will not be supported and updated since 3.0.0 and going forward.
There´s a free and open source alternative to FKM or EXKM that supports flashing kernel.zips.
You can find it following this link.


This is for advanced users or users that don´t want to rely on paid apps to flash the flashable kernel.zip introduced with 1.4.0.
These instructions are not to be mixed with those in the first post and do apply for kernel releases 1.4.0 and more recent!

1. Download the boot images provided in the downloads section under the version you want to flash and then manual install to your PC. Make sure to use the correct ones for your device. Patch the boot.img with magisk.
Download the zip matching your device from the download folder and the version you want to flash.
From the zip extract dtbo.img, vendor_boot and vendor_dlkm.img


1.a : Download the powerhint magisk module found in downloads section and flash it via Magisk Manager like any other magisk module. Don´t forget to flash it, it´s tied to changes in the kernel. It´s crucial for the kernel to work. Without the module flashed before flashing the images the device will not boot!
2. Flash the provided images using fastboot/bootloader and fastbootd (these are seperate modes, see instructions below)
2a. Don´t forget to patch the provided boot.img in magisk manager prior to flashing it via fastboot. Of course you need to adjust your command to flash like you did when rooting the device.
3. vendor_dlkm.img needs to be flashed in fastbootd, while the other images need to be flashed via fastboot/bootloader

Flash the images in this order:

Boot to bootloader:
Either select Reboot to bootloader option via magisk manager, use the button combinations or run the following command
or type:
Code:
adb reboot bootloader

Now in fastboot flash boot.img, dtbo.img and vendor_boot.img
Commands:
Code:
fastboot flash boot boot.img
fastboot flash dtbo dtbo.img
fastboot flash vendor_boot vendor_boot.img

Now boot to fastbootd
Code:
fastboot reboot fastboot

Once in fastbootd:
Code:
fastboot flash vendor_dlkm vendor_dlkm.img
4. Reboot either via buttons
or by typing
Code:
fastboot reboot
5. Profit!


Instructions for flashing Release 1.3.0 or below.
These kernel releases are only for November firmware. They will bootloop on anything that´s more recent.


0. Do not use this if you´re on any firmware more recent that November 2021!
1. Download the images provided in the downloads section to your PC.
1.a Optional: Download the powerhint magisk module found in downloads section and flash it via Magisk Manager like any other magisk module.
2. Flash the provided images using fastboot/bootloader and fastbootd (these are seperate modes)
2a. If you want to stay rooted patch the provided boot.img in magisk manager prior to flashing it via fastboot. Of course you need to adjust your command to flash like you did when rooting the device.
3. vendor_dlkm.img needs to be flashed in fastbootd, while the other images need to be flashed via fastboot/bootloader
How to boot to fastbootd
From running phone:
Code:
adb reboot fastboot
From fastboot/bootloader:
Code:
fastboot reboot fastboot

Once in fastbootd:
Code:
fastboot flash vendor_dlkm vendor_dlkm.img

Boot from fastbootd to fastboot/bootloader to flash dtbo.img and boot.img:
Either select Reboot to bootloader option via buttons
or type:
Code:
fastboot reboot bootloader

Now in fastboot flash boot.img and dtbo.img
Commands:
Code:
fastboot flash dtbo dtbo.img
fastboot flash boot boot.img

4. Reboot either via buttons
or by typing
Code:
fastboot reboot
5. Profit!
 
Last edited:

Jindivikk2

Member
Jun 10, 2014
37
23
I have the error FAILED (remote: No such file or directory) for flashing vendor_dlkm in fastbootd mode, does anyone has any clue why?

edit: Never mind, used a different fastboot/adb and it works.
 
Last edited:
  • Like
Reactions: roirraW "edor" ehT

Burt Squirtz

Senior Member
Feb 11, 2018
602
283
Google Pixel 6
@Freak07 My goodness great work sir! The first custom kernel for the OnePlus 6 Pro.

So far running very well!

Just some few early unusual observations, and this might be my only unit doing this:

1) Device is slightly snappier now. But this seems to come at the cost of fluidity. Doesn't feel quite as smooth as stock kernel.

2) When the device is charging, the charging device vibration haptics randomly buzzes from time to time - when a cable is plugged in. It would never do this on stock kernel. Again. Might be just some sort of weird fluke as I just literally flashed this.

Is it possible you could implement KCAL color commits to alter saturation white point controls? If there's ever a device that needs it, I'd say it's this one. That yellowish piss hue on the screen is simply gross. The six Pro has the clearest screen I've ever seen, but the color reproduction looks nothing short of horrendous. I don't understand why Google doesn't implement white point or wide color gamut support on Pixel devices. It's a night and day difference to your eyes. I love that dopamine kick from seeing beautiful, vibrant colors.

EDIT: Also, I can't stress enough. This first build is nothing short of amazing. I know it's super tough because this is all new stuff.

Could you possibly consider adding some CAF boost controls sometime in the future? It's so awesome to build and make the device a little bit snappier on command^

EDIT 2: this might be far too early to tell, but there seems to be a bug with charging. Along with the random vibrations going off, the charging speed is unusually slow. Again, this might be only my device doing this (Fluke) so maybe other people can concur.

EDIT 3: just noticed another bug. Again. This might be only my device. LTP0 doesn't seem to work. Everything is locked at 120 Hertz. Not sure would have caused that. I've rebooted a few times and it's still there. I can provide any logs of necessary.
 
Last edited:

vassosman

Senior Member

Zilla0617

Senior Member
Wireguard was implemented by Google in the Android 12 kernel.

I prefer to activate it without the slower VPN key method. If you have a custom kernel, you can activate it in the background (without the VPN key). Right now if try to activate Wireguard on the stock kernel the tunnel is created via the key.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 34
    Update to 4.1.6

    Hey guys and girls,

    I hope everyone started into a good week. Here´s the next release. Kind of a surprise update from Google, I suspected it would drop next Monday.
    But here we go, the next update including the September security patch. The updates to the main kernel we already had in advance by having upstream merged. The other change is in the bms submodule, which controls charging.

    Amongst linux-stable upstream there are a few other updates in this kernel, which I´ll mention shortly in the changelog.

    Kernel is compiled for stable A13, not A13 QPR Beta!


    I wish everyone a nice day.

    If you´re one of the unfortunate ones that suffer from the device is corrupt bug on pixel 6 series please take a look at the FAQ at the beginning of this thread it contains a solution. The issue is probably caused by a bug that affects pixel 6 devices and has nothing to do with magisk or a kernel, it just happens to get triggered when using any of those.



    Changelog:

    - Linux-Stable bumped to 5.10.141
    - scheduler improvements from linux-mainline
    • sched: Allow newidle balancing to bail out of load_balance
      [*]sched/fair: Introduce SIS_UTIL to search idle CPU based on sum of util_avg
      [*]nohz/full, sched/rt: Fix missed tick-reenabling bug in dequeue_task_rt()
      [*]sched/core: Do not requeue task on CPU excluded from cpus_mask
    - updates from kernel/common


    Download:


    If you´re coming from another kernel restore stock boot.img, dtbo.img, vendor_boot.img and vendor_dlkm.img before flashing. Thank you.

    I wish everybody a great day/evening!
    Have fun, enjoy the kernel and your phone.



    If you like my work please consider a donation.
    Donations are not mandatory but very welcome.
    If you like my work and want to buy me a coffee/green tea: http://paypal.me/freak07
    25
    Moderator Announcement
    Thread aggressively cleaned! A friendly reminder to all. While it is always ok to ask legitimate questions of any Developer, starting an OT slugfest is definitely not ok!
    Please be aware that posting argumentative statements, and responding to these statements with your own rebuttals is disrepectful at best to the thread owner who contributes
    countless hours to his kernels in order to share them for free on XDA. So please just report member misconduct, and let the Mods take it from there.

    Going forward. Should this occur again, I will have no hesitation in banning members from participating in this thread out of respect for the Developer
    and in accordance with XDA Rules for member conduct:

    2.3 Flaming / Lack of respect: XDA is about sharing and this does not involve virtual yelling (flaming) or rudeness. Flaming or posting with a lack of respect is unacceptable. Treat new members in the manner in which you would like to have been treated when you were a new member. When dealing with any member, provide them with guidance, advice and instructions when you can, showing them respect and courtesy. Never post in a demanding, argumentative, disrespectful or self-righteous manner.​

    So please, keep this thread on topic and respectful to the Developer as well as towards each other. As a member of XDA for 11 years, I have seen more than one Developer
    leave XDA due to this kind of behavior, which we definitely do not want to see. After all, without the Dev's, what would we have to talk about??

    Thank you all for your cooperation, and a pleasant day to all.

    -Best regards: Badger50
    15
    I can confirm the frequency problems with AK3 and or kernel to stock. Just updated to see what would happen during start. Mine stayed at max frequencies on all cores then slowly came back down. With AK3 it didn't allow it to max out cores during boot. Using AK3 for me has always given problems. Mine also would hold during sleep at about middle frequency on all and not drop. My middle frequency on all cores would have most time and minimal on sleep and max. Just after updating to September patch and stock kernel, after just 10 minutes I see time on all different frequencies on all cores.. I noticed once custom kernels started using AK3, this has been an issue for me. Also, if the frequencies are dependent on system processes, why would a module be needed to hold those down? Wouldn't that conflict like changing them ourselves? System processes control it but the module limits it, right there sounds like a conflict if system processes need higher frequency with the screen off.
    Thanks for the report. I´ll try to clear it up a bit for you.
    I don´t know what other kernels do exactly, as I´m usually not following them very closely, but I can answer for my project.

    The cores not maxed out constantly for two minutes directly after restart are by design. What you´re seeing is the PMU limiter restricting the frequencies, because the threshold for requesting more performance is not crossed. This prevents a lot of additional heat. Especially the higher frequencies are "inefficient" in more than one way. There´s a higher than linear increase in heat/powerdraw vs performance increase.
    The PMU limiter feature is described in detail following this link. I suggest to give a good read, because this is vital background information for everything I´m trying to explain below. :)
    Please note: The PMU limiter does not operate in this manner on the stock kernel.

    If you use a CPU-Frequency overlay you will see higher frequencies are being used during app launches, like in the screenrecord below. Notice that this is not a real-time representation of what´s actually happening on the phone. So you can´t draw any definitive conclusions about it. Frequencies change much much faster than those overlays, or the live freq view in EXKM can show to a user. (Many many times in a 10th of a second) But to explain this topic in a simplified manner is possible with it.



    For the explanation below keep the limits of the PMU limiter based on different conditions in mind. And also keep in mind that PMU limiter doesn't hard limit, it just limits higher freqs until a certain threshold of requested performance is crossed
    You'll see at first I start devcheck app. The app is still in memory, that's why the cores don't max out on the overlay. (that doesn´t mean that max freq is not used for the fraction of a second, just the overlay won´t catch it) There's not much to load on the page that's being opened either on the app. Going back to the start page of devcheck, there are more elements in the UI, hence bigger freq bump.

    Launching CPU benchmark app and running it, you'll see big cores are maxing out when max performance is requested by running the workload of this benchmark. During this benchmark the workload gets scheduled mostly to the big cores (you can't see this with apps or overlays just by tracing the scheduler). That's why you see max cores max out crossing the PMU limiter threshold easily.

    EXKM app is cold launched. I force closed the app before the screen recording so it needs to be loaded completely from scratch. You'll see max freqs are reached, PMU limit for app launches (2,4ghz for big cores) is crossed during the launch to load the app as fast as possible.

    Now here's the cpufreq distribution taken from exkm on my end since flashing yesterday evening.


    All frequencies are being utilized on all cores. But you can also see the PMU limiter is doing its job. Let's take the efficient cluster with the little cores as example.
    You'll see the maxfreq of 1.8ghz for little cores is utilized most of all higher freq steps (1.19GHZ and above). But you can also see the PMU limiter is kicking in, as 1.19GHZ and 1.4GHZ are just after that.

    All of this is expected. This works completely different from stock and it's expected that you will be able to tell differences.

    Now how does that tie in with other system processes?
    The AK3 module you´re seeing in magisk manager after flashing this kernel allows to replace certain parts of those system processes, so that those work with the changes done on the kernel side. The kernel isn't a unit that stands just for it alone.

    Example: The PMU limiting itself is done via kernel. But the different conditions on which PMU limiting is triggered (launching apps, 120fps, scrolling, display idle, screen content moving, etc, etc) are detected and handled not by the kernel side, because the system just has more information what's currently happening.
    Same for the thresholds of the PMU limiting. The system detects what is happening on your phone like scrolling, screen content static, screen content moving, app launching etc, and different thresholds for the PMU limiting are set.
    This information is fed to the kernel via the powerhal, so it can do its job.


    You'll notice a difference in freq distribution on this kernel to stock, as it's a deliberate change.
    Read the linked posts and I think you'll understand. I'm here for questions.
    But keep in mind. All those end-user focused UI tools like CPU freq overlays, live freqs in exkm don't reflect what's actually happening, just give a rough idea. There's a lot of room for misinterpretation.
    9
    4.1.0 flashed and running fine for me on September patch.
  • 108
    Kirisakura-Kernel for the Pixel 6/Pro

    Hello everyone,

    To keep it short: Here is Kirisakura - Kernel for the Google Pixel 6 Pro aka Raven and the Pixel 6 aka Oriole, together Raviole.
    I would appreciate if everybody that flashes the kernel, reads at least once through this opening post and the following ones.

    The kernel aims to keep most of the subsystems updated, way ahead of the stock kernel, thereby improving security, stability and performance!
    This includes Linux-Stable, F2FS-Stable and kernel/common!
    If that got you curious, have a read about linux-stable and why it is important here. The stable-process is not the same for every subsystem, but the general idea, rule of thumb and benefits are applicable for other subsystems as well.

    The kernel includes a lot of improvements and contributions from other developers as well. Without this kernel would not exist.
    A big part of improvements originate from @arter97´s, @kdrag0n´s and @Sultanxda´s work. Many others contributed in some way or another to this kernel.
    A big thanks to all of them at this place!

    Now lets continue with a list of features in the next paragraph!

    Features:
    Main Features:
    - Based on latest A13 kernel sources from Google, Kernel is made for Android 13
    - Linux-Stable-Upstream included to 5.10.141
    - Compiled with prebuilt Google clang 14.0.7
    - FHD Support for Pixel 6 Pro (display is able to run at 1080p), more info here and here
    - merged kernel/common (improvements to android-common-kernel straight from google)
    - MM subsystem reworked (more info and some patchsets linked in this post)
    - Multi-gen LRU backported (more info here, here as well and here) to improve mm and reduce cpu cycles
    - Utilize an additional kswapd thread to increase throughput for memory reclaim
    - pelt multiplier tied into powerhal to speed up scheduler during interaction (more info here)
    - prevent frequency spikes caused by small transient tasks when the device is idle(more info here)
    - tie mechanism to prevent frequency spikes caused by small tasks also into powerhal
    - scheduler improvements for RT (realtime) tasks
    - introduce and setup PMU limiter (prevents CPU from spiking to max when it isn´t needed, based on PMU reads, more information here)
    - improve camera performance by tuning the powerhal during recording
    - bias tasks of rt, sf and ta groups to prefer high capacity cpus during app launches, interactions
    - improve app launches via powerhal
    - improve trusty driver performance which connects to fingerprintscanner-hal by using high perf wq during fp unlock
    - restrict maximum CPU-Freqs during screen off/ idle to 1.1GHZ for all clusters to save power
    - introduce unfair f2fs rwsems to prevent writer starvation and improve IO perf under heavy load
    - fuse: give wakeup hints to scheduler to speed up compress/decompress in internal storage (details)
    - enable RCU_BOOST (details here), also fix RCU_BOOST behaviour
    - F2FS-Stable updated
    - TCP backports from mainline
    - SSG IO scheduler for reduced overhead and less CPU cycles (more lightweight and android optimized)
    - Scheduler updates from linux-main
    - use improved energy model for exynos cpu cooling/thermal control
    - allow GPU to scale down to 150mhz, but boost to higher value in case of interaction via powerhal
    - affine IRQS to CPU 7 during camera usage for improved performance as it tends to overload the little cores
    - use bbr as default TCP congestion algorithm (fasted algo according to this excellent research from @kdrag0n found here )
    - Enable support for TTL spoofing
    - Include LRNG, see here and here for more info, bump to v45 with 3.0.0
    - important patches from kernel/common for 5.10 (here are more details)
    - CleanSlate Features from @tbalden, big applause here! (s2s, notification booster, battery saver, flashlight notifications. Please note: cleanslate features that work otherwise with rooted devices like kadaway (adblocking) are not implemented on this kernel since I´m running rooted)
    - dirty pipe exploit fixed
    - supports direct usb access for hi-res playback over USB-C DACs
    - flashing the kernel will preserve root

    Various Optimizations:
    - update several drivers to use power efficient workingqueues (for example wlan driver)
    - kernfs: use buffer from the stack space
    - printk: use buffer from the stack space
    - kthread: use buffer from the stack space
    - bpf: avoid dynamic memory allocation for small value buffers
    - binder: Reserve caches for small, high-frequency memory allocations
    - kernfs: use kmem_cache pool for struct kernfs_open_node/file
    - cgroup: use kmem_cache pool for struct cgrp_cset_link
    - f2fs: reduce timeout for uncongestion
    - f2fs: Demote GC thread to idle scheduler class
    - f2fs: set ioprio of GC kthread to idle
    - mm: vmstat: use power efficient workingqueues
    Wakelock Blocker:
    - advanced wakelock blocker with the ability to block any wakelocks (dangerous, use with caution)
    - please read [URL="https://arstechnica.com/gadgets/2018/08/p-is-for-power-how-google-tests-tracks-and-improves-android-battery-life/"]this for further info

    AK3 Helper Module:
    - restrict little cluster to 1,19ghz mid cluster to 1,19ghz and big cluster to 1,1ghz during screen off, to reduce battery usage for example during music playback
    - only use little cores during screen off/device suspend
    - tie pelt multiplier into the powerhal (more info here)
    - prevent frequency spikes caused by small transient tasks during idle operation (more info here)
    - boost scheduler using the pelt multiplier during fingerprint unlock operation
    - setup and control PMU limiter via powerhal (more info here)

    DOWNLOAD:
    Download is always located in this folder:

    Changelog:
    Android 12.0.0

    1.0.0 Initial Release
    1.0.2 https://forum.xda-developers.com/t/...r-pixel-6-pro-aka-raven.4358435/post-85910621
    1.0.5 https://forum.xda-developers.com/t/...r-pixel-6-pro-aka-raven.4358435/post-85924419
    1.3.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-85976139
    1.4.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86109665
    1.5.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86259863
    1.7.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86390563
    1.8.4 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86541727

    Android 12.1.0 Stable (March feature drop and more recent)
    2.0.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86617873
    2.0.1 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86637233
    2.1.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86695911
    2.3.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86821331
    2.4.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86834981

    Android 12.1.0 Stable (June feature drop and more recent)
    3.0.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86992705
    3.0.1 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-86996237
    3.0.17 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-87127695

    Android 13.0.0 Stable
    4.1.0 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-87290247
    4.1.6 https://forum.xda-developers.com/t/...pixel-6-pro-aka-raviole.4358435/post-87399635



    Android 12L QPR Beta - Deprecated

    Requirements

    - unlocked Bootloader
    - USB-Debugging in developer options enabled
    - latest adb and fastboot binaries
    - working adb and fastboot environment so you can flash back to stock in case something goes wrong
    - working magisk environment (a device rooted with latest magisk stable in case you want to be absolutely safe)


    How to flash the Kernel:
    1a. Make sure you tick all the requirements above
    1. Download the correct kernel.zip depending on your device (Pixel 6 = oriole || Pixel 6 Pro = raven)
    2. Flash the correct kernel.zip via EXKM, FKM or kernel flasher. Root will be preserved. The AK3 magisk helper module will be automatically installed during flashing the kernel.zip and be present on next reboot.
    Do not remove or disable the AK3 Magisk Helper Module otherwise the device will bootloop.
    3. Reboot and profit.


    Manual installation is no longer supported starting with release 3.0.0, as there´s a free open-source option to flash kernel.zips now.
    Instead use the free kernel flasher, which can be found here.

    Manual installation without relying on paid apps like fkm/exkm:
    Please have a look at the linked post.



    Donations:
    Donations are not mandatory but very welcome if you want to support development or just buy me a coffee/tea/beer :)
    If you like my work: http://paypal.me/freak07

    Credits:
    @osm0sis for all his work on AK3.
    @tbalden for being the best HTC, Pixel, OnePlus and Asus wingman!
    @capntrips for all his work on the pixel 6!
    @LeeDroid and @mwilky for their awesome roms and work I used on multiple devices!
    @Captain_Throwback for all the mentoring and guidance!
    @Eliminater74 for bringing me into the game and the Inspiration
    @nathanchance for his upstream guidance and assistance
    @RenderBroken for helping me out
    @flar2 for all his work
    @joshuous for all the help he provided to me in the past!
    @arter97 for giving me advice
    @kdrag0n for his help and advices!
    @topjohnwu for magisk and his entire work!


    Source Code: https://github.com/freak07/Kirisakura_Raviole
    44
    Update to 4.1.0

    Hey guys and girls,

    I hope everyone started into a good week. Here´s the next release. It´s for stable Android 13.
    Thanks to Google releasing the kernel source for the previews and the betas I´m able to push this update out very quickly. As in the past, the code didn´t change between last beta and stable release.

    There are again a lot of changes in this release. I´ll try to keep the release post short as I don´t have that much time lately.


    FHD/1080P Support for Pixel 6 Pro

    The biggest change is FHD support for the Pixel 6 Pro. If you follow twitter you might have seen this tweet from @MishaalRahman.
    Instead of using the display driver that´s supposedly for the Pixel 7 Pro, FHD support was added to the Pixel 6 Pro display driver. There were a few obstacles to make it run properly on the Pixel 6 Pro, but I got it working nicely so far. If anyone has more experience than me regarding panel timings, display drivers etc, feel free to push any improvement as a pull request to my github or point me towards any improvement.

    As a result you can now select 1080p resolution from settings after flashing the kernel. Dynamic refresh rate works, brightness scaling works, no tints, colour shifts or contrast issues either. AOD has a 1080p Low-Power timing as well.

    You´ll find a few more infos with a short video on my tweet here:
    Screenshot_20220816-083147.png
    Screenshot_20220816-083204.png

    It´s perfectly usable on a daily basis so far. I ran it for a few days without issues on my end. While the advantage might be debatable (saving battery, less load on GPU, still needing to drive the same amount of pixels in the end even on lower resolution, etc etc) having options is nice and this is why I decided to ship it.

    Apps need to redraw after switching resolution, sometimes 1080p on big display size selected in settings the UI looks a bit sketchy. So I think Google is still working on that.

    There´s however one bug I found so far that makes me believe this is still very much a WIP from google. If having the "show current refresh rate" option from dev settings enabled while switching resolutions, the display will black out and a restart needs to be forced by keeping the power button pressed or using adb interface to restart the phone. This is not due to the kernel, but display settings in framework getting scrambled as it´s not yet implemented 100% on googles end. So be warned. :)


    MM Subsystem Rework

    MM subsystem was completely reworked including many improvements from linux-mainline. During this MGLRU was also reworked a bit and works better now. I´ll include links to a few of the improvements/patchsets in hide-tags below, if you´re interested beyond that please check out my github.
    links:

    Additionally tie in a few of the MM changes into the powerhal. For example Proactive compaction is more aggressive during screen-off/device suspended operations to improve long term-performance.

    Other changes:

    Also tune the powerhal and implement all A13 changes, according to the changes that were already present on A12.

    Latest changes from f2fs-stable are included, which include several bugfixes and small improvements.
    Binder improvments/fixes, scheduler improvements from kernel/common, performance for exfat formatted storage device improved (niche use case, but still nice) and other little improvements.
    For other changes and details please take a look at github.


    I wish everyone a nice day.

    If you´re one of the unfortunate ones that suffer from the device is corrupt bug on pixel 6 series please take a look at the FAQ at the beginning of this thread it contains a solution. The issue is probably caused by a bug that affects pixel 6 devices and has nothing to do with magisk or a kernel, it just happens to get triggered when using any of those.



    Changelog:

    - Rebase kernel fully on A13 trees
    - Linux-Stable bumped to 5.10.136
    - FHD/1080p support for Pixel 6 Pro
    - all previous features and improvements kept intact
    - bump f2fs-stable to latest available
    - rework mm subsystem (check git for more details)
    - scheduler improvements
    - binder improvements from kernel/common
    - improve exfat performance (if someones uses exfat formatted devices)
    - loads of other changes from kernel/common
    - update powerhal to account for a13 changes and port existing changes over
    - loads of other changes, please check github



    Download:


    If you´re coming from another kernel restore stock boot.img, dtbo.img, vendor_boot.img and vendor_dlkm.img before flashing. Thank you.

    I wish everybody a great day/evening!
    Have fun, enjoy the kernel and your phone.



    If you like my work please consider a donation.
    Donations are not mandatory but very welcome.
    If you like my work and want to buy me a coffee/green tea: http://paypal.me/freak07
    37
    Update to 1.7.0

    Hey guys and girls,


    So here´s the next update. It includes the february security update. Most of the changes brought by the February kernel source drop, were already included in this kernel by merging kernel/common and linux-stable.


    Several other notable improvements and changes in this release:
    Improve f2fs performance by merging a patchset to prevent writer starvation for the checkpoint thread. This was discussed this month in the f2fs mailing list and is already merged to the kernel/common tree. It´ll improve performance under heavy I/O utilization.
    You can find more information following the discussion here.
    Necessary backports were brought to the kernel and the platform specific f2fs-implementation was also adjusted.
    Latest f2fs-stable was also merged to the kernel.

    Update the patchset to prevent frequency spikes caused by small tasks as well. Tie those new changes into the powerhal. (That means users not flashing the kernel.zip, but instead use the manual installation method, which are only a handful from the download count, need to flash the updated magisk helper module. Users that flash the kernel.zip via FKM/EXKM have to just flash and forget)

    Several other improvements are included as well. More details in the changelog.
    Download is below.
    Updated instructions in the OP!


    Changelog:
    - February Security update merged
    - linux-stable 5.10.96
    - include latest f2fs-stable
    - improvments from kernel/common
    - fix memory leaks
    - security related patches
    - mm improvments
    - for details please check github
    - introduce unfair f2fs rwsems to prevent writer starvation and improve IO perf
    - update patchset to prevent freq spikes caused by small transient tasks (also tie this into powerhal)
    - give pelt multiplier power hint for scheduler performance boost during fingerprint unlock
    - fuse: give wakeup hints to scheduler to speed up compress/decompress in internal storage (details)
    - enable RCU_BOOST (details here), also fix RCU_BOOST behaviour
    - update LRNG implementation (thanks to arter97 )
    - improvements/fixes for CleanSlate features
    - other changes please look at my github


    Download:


    Instructions can be found in the OP! Please follow the instructions to avoid any issues.
    If you´re coming from another kernel restore stock boot.img, dtbo.img, vendor_boot.img and vendor_dlkm.img before flashing. Thank you.
    37
    Update to 1.8.4

    Hey guys and girls,


    So here´s the next update. It´s kind of an off schedule update, as I planned to update the kernel with the next security update/feature drop.

    But in the light of recent events regarding the new exploit called "Dirty Pipe" (more info here), which is similar to the "Dirty Cow" exploit from a while ago, but easier to exploit this time, I decided to release an update ahead of schedule.

    This exploit was fixed in linux-stable 5.10.102, as opposed to a single commit in AKC (android kernel common, commit here). This shows once more why merging linux-stable is beneficial as explained in detail in the OP.

    Since one of the key aspects of this kernel is security and staying on par with upstream (which often fixes exploits way ahead of android security bulletin updates, even before an exploit is even known or fixed via a patch on the security bulletin) I decided to release this update as quickly as possible, so this exploit is fixed on devices running this kernel.

    Several other notable improvements and changes in this release:
    Bring in scheduler updates from Android 13 Developer Preview, which aim at improving task placement. (adjust powerhal accordingly)
    BFQ IO-Sched is now on par with linux-mainline.
    Several fixes to mm subsystem, f2fs and others.

    Several other improvements are included as well. More details in the changelog.
    Download is below.
    Updated instructions in the OP!


    Changelog:
    - linux-stable 5.10.103
    - contains fix for the dirty pipe exploit
    - built with clang 14.0.2 prebuilt by google
    - improvments from kernel/common
    - fix memory leaks
    - security related patches
    - mm improvments
    - f2fs fixes
    - scheduler fixes
    - for details please check github
    - built with improvements from A13 Dev Preview to display driver
    - other changes please look at my github


    Download:


    Instructions can be found in the OP! Please follow the instructions to avoid any issues.
    If you´re coming from another kernel restore stock boot.img, dtbo.img, vendor_boot.img and vendor_dlkm.img before flashing. Thank you.
    36
    Update to 2.1.0

    Hey guys and girls,


    Alright here´s the next update. And it´s again a really big update! :)
    A few weeks ago google pushed a backport of Multi-Gen LRU for the 5.15 kernel to their aosp/kernel common branches. I went ahead and backported that to our 5.10 tree alongside other mm-improvements from linux-mainline. By now google pushed their own backport for 5.10, but I decided to go with my original implementation as it contains a lot more improvements alongside the main Multi-Gen LRU backport and ran stable for well over 3 weeks.

    Powerhal was adjusted quite significantly too. CPU-freqs are restricted to 1.1GHZ max during screen off/device idle operations to save more power. App launches and camera operation are improved as well in the powerhal. General usage benefits from those changes too.

    Latest linux-stable, f2fs-stable and kernel/common were merged as well.

    Users that decide to not use the CleanSlate features and don´t install the apps won´t see the kernel parsing for the config files extensively.
    Vibration Booster from CleanSlate was improved as well to kind of counter the weaker haptic feedback since the March update. Please check the linked thread from the changelog. Huge thanks to @tbalden for this. If you want to give a little bit back consider purchasing the apps via playstore or maybe a small donation. :)



    I´ll keep the warning as to preferably using magisk stable to avoid potential issues as well here in this post.
    Please note that 24305 works fine for me though on non beta, stable April firmware!
    Important:
    Make sure you´re being rooted with magisk 24300 stable before flashing the kernel if you´re unsure. Any magisk version above 24303 might potentially lead to a reboot back to bootloader since android 12.1.0 and A12L QPR3 Beta. At the moment this only affects canary, but I put the warning just in case this will not get resolved in upstream magisk in time until the next stable drops. I saw a post that some modules also have problems with latest canary, so there´s a lot going on at magisk´s side at the moment.
    A post containing a short write-up how to "downgrade" magisk can be found following this link.



    Changelog:

    - Update for April Source
    - Linux-stable merged to 5.10.109
    - f2fs-stable merged
    - fixes and improvements from kernel/common including several subsystems
    - multi-gen LRU ( more info here, here as well and here)
    - general LRU improvements from Linux-Mainline
    - improve camera performance by tuning the powerhal during recording
    - improve app launches via powerhal
    - restrict maximum CPU-Freqs during screen off/ idle to 1.1GHZ for all clusters to save power
    - remove cleanslate config files getting parsed excessively even if user did not install the CleanSlate apps
    - improve vibration boosting feature in CleanSlate config app to allow stronger vibration again(please have a look at this post )
    - other fixes for CleanSlate features such as sweep to sleep
    - updated anykernel 3 zip, thanks to @osm0sis
    - probably a lot more I forgot as time is short for me.


    Download:


    Instructions can be found in the OP! Please follow the instructions to avoid any issues and read this post carefully. Don´t use magisk canary 24303 or more recent to avoid potential issues!
    If you´re coming from another kernel restore stock boot.img, dtbo.img, vendor_boot.img and vendor_dlkm.img before flashing. Thank you.

    I wish everybody a great day/evening!
    Have fun, enjoy the kernel and your phone.


    If you like my work please consider a donation.
    Donations are not mandatory but very welcome.
    If you like my work and want to buy me a coffee/green tea: http://paypal.me/freak07