Contributing to EAS for Android

Goals

  • Have product-quality EAS available as early as possible in new Android kernels
  • Minimize the patches from mainline Linux
  • Minimize further EAS updates during lifetime of kernel version (to allow catch-up updates & fixes)

Upstream EAS Development

At any given time, we are pushing a small number of patch sets upstream which each contain enhancements to the Linux scheduler.

All patch sets which are not yet merged are made available to the wider world though our EAS-mainline-integration branch, which is published on linux-arm.org. Each patch set is maintained as a topic branch on the same repository. Every release is tested on a collection of 32-bit and 64-bit ARM platforms using Arm's internal CI process.

Accepting Contributions and Reviews

Patches should be posted upstream first if possible, and against android-mainline Gerrit for android-specific bits, before being backported to the relevant LTS kernels if required.  Discussion can take place on lkml, or very EAS-specific discussions could be on the Linaro eas-dev mailing list.

Quality Requirements

Changes should be tested such that they:

  1. Pass checkpatch.pl
  2. Do not fail 0-day build testing
  3. Do not cause regression in LTP testing
  4. Do not cause regression in lisa tests
  5. Have the appropriate level of testing for the patch

Support Commitment

The EAS parts of each android-X.XX branch will be supported by Arm for 3 years. Each version of EAS for Android will have a nominated maintainer at Arm. Since these kernels act as upstream sources for many device kernels, all of which make changes to cpufreq and scheduler, we will try to minimise changes after initial release.

Patches intended to be merged in the common kernel (as opposed to patches intended to provoke discussion and act similarly to an RFC) should be annotated with the ‘eas-dev’ hashtag in Gerrit, to make it as simple as possible for observers to see in-progress updates for testing. For example, this link should allow you to see all eas-dev tagged patches which are not yet merged.

https://android-review.googlesource.com/q/hashtag:%2522eas-dev%2522+(status:open)

Documentation

EAS is documented in the kernel source file Documentation/scheduler/sched-energy.rst

Illustration of code flows

In this diagram, the provision of a patch set for the android-mainline-tracking branch is shown along with the construction of the LTS android kernel (assumed to be 4.19 as an example in this diagram due to expected release dates - if 4.19 is not the LTS release, the steps here will apply to whatever release that is).

 

Definitions:

‘Mainline’ - The mainline Linux Kernel release branch.

‘Arm Mainline Integration’ - A branch containing all the EAS code which is currently targeted at upstream Linux plus any other parts necessary to use it on our test platforms (energy models etc.). This branch is published Arm, and is based upon the tip/sched-core branch. This is treated like a topic branch, previous versions are tagged and the branch is force-pushed to the latest version.

‘android-mainline’ - A branch tracking mainline Linux Kernel releases with the complete set of ‘Android’ out of tree patches included interleaved. This is the kernel branch to use for testing with Android.