Some minimum performance criteria are critical to the user experience and impact the baseline assumptions users would have when running an app.
User Experience Consistency
A smooth user interface can be provided to the end user if there are certain minimum requirements to ensure a consistent frame rate and response time for applications and games. Builds, depending on device type, MAY have measurable requirements for user interface latency and task switching.
Performance can fluctuate dramatically for high-performance long-running apps, either because of the other apps running in the background or the CPU throttling due to scheduler.
- [C-0-0] MUST NOT using Touch Boosting and instead, use libperf and uclamp.
- [C-0-1] MUST implement efficient frequency into libperf through Power Hints. We suggest that you avoid assigning CPU 0 and 1 to tasks other than TA (Top-App) as that it's generally utilizing CPU 0 and 1 extensively.
- [C-0-2] MUST NOT overly boosting everything, because Performance is not "all-about-boosting". Efficiency is all that matters in this case, for getting efficient frequencies, you can use freqbench.
- [D-SR] STRONGLY RECOMMENDED to tune your CPUSet according to your SoC, every SoC has its specific CPUSet tuning, so make sure you correctly tune it according to your SoC.
- [C-SR] STRONGLY RECOMMENDED to ship efficient frequency data inside kernel.
- [C-SR] STRONGLY RECOMMENDED to ship PELT instead of WALT.
- [C-SR] STRONGLY RECOMMENDED to ship PELT Util Halflife by picking or forward-porting (for Linux 4.19.y upwards) kernel/common/cb22d9159761cb32c35a5f9399b8011fcdae654b and kernel/common/3c207c880674e5d29aa1c9b7e94d812383c442ee.
- [C-SR] STRONGLY RECOMMENDED to ship Google's workaround for Unity Engine CPU Affinity by picking google/redbull/69a034bb62b8841c1774617fb9b7af0ccf475b1e and google/redbull/a5137c1c9150e6617d2d62575789455bedcfd27d.
General Linux Kernel
If Maintainers include ZRAM, they:
- [C-SR] STRONGLY RECOMMENDED ship ZRAM depending on your device RAM size.
- [C-SR] STRONGLY RECOMMENDED to keep compression backend up-to-date as possible with Mainline.
- [C-1-0] MUST NOT keeping the ZRAM compression backend in LZO. We recommend you to use Zstandard (zstd) as default ZRAM and ZSWAP (if your devices use this, Smugsungs?) compression backend as it'll be beneficial for the compression ratio and faster compared to LZO, you also can use lz4 for the compression backend if you favoring performance over compression ratio by picking linus/torvalds/3d711a382735d2c34d3ba2075a5aa83a894f4a57.
The use of compilation flags
- [C-0-1] MUST NOT generically build your builds with generic CPU variant. Use your SoC-specific optimization flags instead.
Kernel Default Configurations
- [D-0-1] MUST ship kernel default configuration (known as "defconfig") as-is without any masking.
- [D-SR] STRONGLY RECOMMENDED to follows kernel/configs.
Qualcomm includes support for balancing IRQ to help balance the CPU load generated by interrupts across all of a systems CPUs, to configuring MSM-IRQBalance, Maintainers:
- [C-SR] STRONGLY RECOMMENDED to Divide the IRQ's affinity, Example commit from AOSPA OnePlus-sdm845.
- [C-SR] STRONGLY RECOMMENDED to blacklist msm_drm and kgsl_3d0 IRQs, Example commit from AOSPA OnePlus-sdm845, keep in mind that changes may vary between all devices, so make sure you blacklisted the correct IRQ.