Start Magazin Android Kernel Tuning – Teil 1: Die Grundlagen erklärt, vier Kernel...

Android Kernel Tuning – Teil 1: Die Grundlagen erklärt, vier Kernel im Detail

17874
0

Mit dem passenden Kernel und den richtigen Einstellungen steht und fällt nicht nur die Performance eines Android-Geräts, auch welche externen Geräte dein Androide unterstützt und über welche speziellen Software-Funktionen er verfügt, hängt vom Kernel ab. In unserem dreiteiligen Kernel-Tuning-Workshop erklären wir dir, was der Kernel überhaupt ist, welche Kernel es für Android gibt und wie du mit einem Custom Kernel dein Android-Gerät so richtig ausreizt.

Der Kernel (auch Systemkern genannt) ist die Basis eines Betriebssystems. Android verfügt über keinen eigenen Kernel, sondern benutzt einen leicht modifizierten Linux-Kernel als Grundlage. Der Kernel stellt die unterste Schicht des Betriebssystems dar, indem er für die Ansteuerung der Hardware zuständig ist. Prozessortakt, Speicherzugriffe und sonstige Zugriffe auf die Hardware werden vom Kernel ausgeführt.

Der Kernel dient generell als Schnittstelle zwischen der Hardware und dem restlichen Betriebssystem mit der Programmsteuerung, den Entwicklerbibliotheken und im Falle des Android Systems der Android Runtime („ART“ bzw. früher „Dalvik“). Da der Kernel eben unter Anderem für das Timing bei Hardwarezugriffen verantwortlich ist, kann man durch Veränderungen im Kernel deutliche Verbesserungen in puncto Performance und Batterielaufzeit erzielen.

Die Basis von Android ist der Linux Kernel, dieser wurde von Google für Smartphones optimiert und ist im Android-Quellcode für jeden verfügbar. Zwar hat Google den eigentlichen Linux-Kernel soweit für Smartphones und Tablets optimiert, dass dieser relativ gut auf diesen Geräten läuft, da jedoch jedes Smartphone einen anderen Chipsatz hat, gibt es gerätespezifischen Optimierungsbedarf bei den meisten Android Geräten. Da auch die Hersteller diese Arbeit meistens nicht optimal ausgeführt haben, haben sich einige Entwickler der Aufgabe der Optimierung des Linux Kernels auf ein spezielles Gerät angenommen.

Open Source gegen Closed Source

Den Android-Kernel per se sich gibt es also nicht, sondern jeder Hersteller pflegt für jedes Gerät einen anderen Kernel. Das hängt unter anderem damit zusammen, dass jeder Hersteller sein eigenes Süppchen kocht und sich mit einem speziellen Feature von der Konkurrenz abheben möchte. Mal ist der der Treiber des Kamera-Moduls, der nicht frei verfügbar ist, meistens bleiben aber auch die Grafiktreiber und viele weitere Module closed source. Wirklich frei und in diesem Sinne auch am ehesten als „der Android-Kernel“ bezeichnen lässt sich nur der Quellcode im Android Open Source Projekt.

Während unter Linux also ein generischer Kernel gepflegt wird, der möglichst viele Hardware-Komponenten und Funtkionen als Open-Source-Lösung unterstützen möchte, gibt es bei Android keinen solchen Kernel. Zudem haben einige Hersteller bis heute nicht komplett kapiert, wie denn überhaupt die ganze Linux-Entwicklung inklusive Kernel funktionert. Deshalb gibt es je nach Gerät und Hersteller tatsächlich sehr große Optimierungsmöglichkeiten.

Schematische Darstellung des Linux-Kernels. Bildquelle: http://de.wikipedia.org/wiki/Linux_(Kernel)
Schematische Darstellung des Linux-Kernels. Bildquelle: http://de.wikipedia.org/wiki/Linux_(Kernel)

Doch was kann man alles optimieren und einstellen? Klären wir doch erst einmal die Grundbegriffe, die Parameter, auf die der Kernel einen Einfluss hat.

CPU-Frequenz

Beginnen wir zunächst mit dem wohl Grundlegendsten: der CPU Taktfrequenz. Wie allgemein bekannt sein dürfte, handelt es sich bei der CPU/dem Prozessor um das Herzstück eines jeden Computers. Sie ist die zentrale Recheneinheit, wird aber durch die GPU/den Grafikprozessor sehr stark unterstützt. Die CPU macht eigentlich nichts anders, als ständig zu rechnen, Bits zu verarbeiten. Die Information, was es gerade zu rechnen gibt, wird dem Hauptprozessor in periodischen Abständen übermittelt, aus diesen Abständen leitet sich die Prozessortaktung ab. Je höher die Frequenz, desto mehr Rechenoperationen kann der Prozessor innerhalb einer bestimmten Zeit ausführen. Eine höhere Taktrate bedeutet also ein schnelleres Arbeiten des Prozessors, jedoch bedeutet sie auch einen höheren Energieverbrauch und eine größere Erwärmung des Prozessors. Will man hier Energie sparen, sollte man daher die Taktfrequenz herunterregeln, will man ein noch schneller arbeitendes Gerät, muss man die Taktfrequenz steigern.

CPU-Spannung und Undervolting

Wie bereits erwähnt, haben Prozessoren eine bestimmte Taktfrequenz. Damit der Prozessor korrekt arbeiten kann, muss bei einer höheren Frequenz die Spannung der elektrischen Impulse, mit denen die Daten an den Prozessor geliefert werden, erhöht werden, sonst sind bei steigender Frequenz die Zustände „Ein“ und „Aus“ für die CPU nicht mehr deutlich unterscheidbar. Mit steigender Frequenz steigt auch der Energieverbrauch und die Hitzeentwicklung des Prozessors. Will man als User also Energie sparen, kann man versuchen, die Spannung der CPU herunterzuregeln, im Fachjargon nennt man das „undervolting“. Da die Untergrenze der Spannung mit der der Prozessor bei einer bestimmten Frequenz korrekt arbeiten kann unter Anderem von der Reinheit der Rohstoffe (genauer gesagt der Halbleiter) abhängt, vertragen Chips ein und des selben Herstellers und Modells oft unterschiedliche „Mengen“ an undervolting. Hier muss man also selbst testen, wie weit man die Spannung herunterregeln kann ohne dass dies zu Systemabstürzen führt.

Mit speziellen Tuning-Apps wie hier dem Kernel-Toolkit lassen sich sehr viele Einstellungen des Kernels anpassen.
Mit speziellen Tuning-Apps wie hier dem Kernel-Toolkit lassen sich sehr viele Einstellungen des Kernels anpassen.

Hotplugging

In modernen Smartphones besteht eine CPU nicht mehr aus nur einer Einheit, sondern aus mehreren sogenannten Kernen, die vom Kernel unabhängig voneinander angesteuert werden können. Das bedeutet, bei geringer Last können einzelne Kerne von der Taktfrequenz heruntergeregelt oder sogar abgeschalten werden. Bei den aktuellen Top-Smartphones kommen acht Kerne zum Einsatz (Octacore), von denen vier Kerne für besonders viel Leistung sorgen sollen, vier für eine besonders stromsparenden Grundmodus (big.LITTLE). MediaTek hat aber mit dem Helio X20 bereits eine 10-Kern-CPU in der Mache, die dann über drei Prozessorblöcke verfügen wird.

Um das Ein- und Ausschalten der einzelnen Prozessorkerne kümmert sich der Hotplugging-Dienst. Dieses Hotplugging hat bestimmte Verzögerungen. Das bedeutet, Hotplugging schaltet nicht sofort den Kern ein wenn hohe Last vorliegt, umgekehrt wird ein Kern auch nicht sofort ausgeschaltet, wenn gerade wenig Last vorliegt, denn das würde Energie kosten. Ist die Verzögerung beim Einschalten allerdings zu lange, kann sich das als „Lag“ bemerkbar machen. Wie die Steuerung zwischen den Prozessoblöcken geregelt wird, ist wiederum in den meisten Fällen „Betriebsgeheimnis“, also Closed Source.

Touch-Boost (PowerHAL, mpdecision und co)

Da das Hochfahren und Hochtakten eines Prozessors (beziehungsweise eines Prozessorkerns) Zeit braucht, versucht der Kernel „vorherzusagen“, wann eine größere Last bevorsteht. Seit Android 4.1 und Project Butter sorgt PowerHAL dafür, dass der Prozessor bei jeder Berührung des Bildschirmes die Bereitschaft des Prozessors erhöht. Dies geschieht sowohl durch das Erhöhen des Prozessortaktes als auch durch das Einschalten von mehreren Kernen und ist auch unter dem Namen „Touch-Boost“ bekannt. Auch hier gilt wieder: Will man eine höhere Leistung erzielen, kann man die Touch-Boost Frequenz erhöhen, will man länger mit einer Akkuladung arbeiten können, muss man — auf Kosten der Performance — diese Frequenz herunterregeln.

Standardmäßig erledigt bei Qualcomm-Chipsätzen nicht der Kernel an sich diese Aufgabe, sondern eine proprietärere Binärdatei von Qualcomm. Dieser Dienst heißt mpdecision und wird oft spöttisch „m(ake)p(oor)decision“ genannt, da er eben für das gesamte System entscheidet, welche Frequenz nun die optimale ist, obwohl das eigentlich Aufgabe des Kernel wäre. Zudem ist nicht vollständig bekannt, welche Kriterien mpdecision für seine Entscheidungen heranzieht. Viele alternative Kernel setzten daher auf einen quelloffenen Ersatz der mpdecision und erzielen damit häufig viel bessere Ergebnisse was Performance und vor allem Energieverbrauch betrifft.

Der Governor

Der Governor übernimmt in erster Line die Aufgabe der Regelung der CPU-Frequenz. Er entscheidet, wann ein Prozessorkern welche CPU-Frequenz einnimmt und wie schnell er von der minimalen beziehungsweise maximalen Frequenz wechselt, nachdem die Minimal-beziehungsweise Maximallast vorüber ist. Außerdem legen manche Governors eine zweite maximale CPU Frequenz fest, die dann gilt, wenn der Bildschirm ausgeschaltet ist. Linux selbst kennt fünf Governos, unter Android gibt es eine beinahe unüberschaubare Menge. Eine ausführlich erklärte Liste mit den wichtigsten Governors für den Android-Kernel, die allerdings schon etwas älter ist, gibt es bei android-hilfe.de. Einen aktuellen Vergleichstest verschiedener Governor-Einstellungen findest du bei xda-developers.com.

Input-Output-Verwalter

Der I/O Scheduler verwaltet die Zugriffe und Zugriffszeiten auf den Datenspeicher. Jedes mal, wenn ein Programm eine Datei auslesen oder schreiben will, muss auf den Speicher zugegriffen werden. Doch Speicherzugriffe können nicht parallel ausgeführt werden, sondern müssen hintereinander abgearbeitet werden. Um zu verhindern, dass eine Applikation den Zugriff von anderen Diensten auf den Speicher „blockiert“ und damit zu Abstürzen oder Performanceeinbußen führt, muss der Scheduler Zugriffszeiten verteilen und zuteilen. Da die unterschiedlichen Hersteller verschiedene Speichertechnologien verwenden, können manche Scheduler bei einem Smartphone schneller sein als bei einem anderen, auch hier hilft meistens nur das Ausprobieren. Der Standard-Kernel von Linux kennt drei I/O-Sheduler: Noop, Anticipatory und den CFQ-Sheduler. Auch hier gibt es unter Android eine deutlich größere Auswahl, wie im oben verknüpften Android-Hilfe-Artikel nachzulesen ist.

Der ganze Rest

Hier habe ich nun die wichtigsten Komponenten des Kernel zusammengefasst, sie machen aber nur einen kleinen Teil des kompletten Systemkerns aus. Schließlich ist der Kernel auch für die Netzwerkverbindung, USB-Geräte, Bluetooth, NFC und — zusammen mit der GPU — für den Touchscreen verantwortlich. Zum Beispiel bieten viele Kernel die Möglichkeit die Ansteuerung des Displays zu verändern und Farbprofile zu setzen. So können vom Benutzer die Sättigungs und Gamma-Werte individuell eingestellt werden. Auch die Stärke des Vibrationsmotors, die Spannung für die unterschiedlichen Lautsprecher und Audioausgänge und die WiFi-Scanning-Intervalle können bei einigen Kernel verstellt werden. Die Verfügbarkeit dieser Features unterscheiden sich aber stark von Kernel zu Kernel. Natürlich gibt es auch für die GPU, also den Grafikprozessor, eine Frequenzkontrolle ähnlich der der CPU, es gelten im Großen und Ganzen die gleichen Regeln für CPU und GPU.

Welchen Kernel benutze ich gerade?

Unter den Einstellungen | über mein Gerät findest du einen Eintrag „Kernel-Version“. Wie bereits erwähnt, basiert Android auf dem Linux-Kernel. Die erste sichtbare Versionsnummer (meistens 3.4.0, 3.10.x oder 3.14.x) zeigt die verwendete Linux-Kernel-Version an. Google und die meisten Android-Kernel-Programmierer setzen hier auf die Longterm-Release-Version des Linux-Kernels, daher werden häufig die oben genannten Versionsnummern zu finden sein. Die neueste Linux Kernel Version ist 4.1, die aktuelle Longterm Stable Version 3.18.

Danach finden wir weitere Zahlen, die je nach Kernelhersteller mehr oder weniger kryptisch aussehen, in unserem Beispiel ist b75 gut als Versionsnummer erkennbar, bei den von Google kompilierten Versionen sieht die Nummer oft so aus: gbb66a39 (Stock-Kernel vom Nexus 9 auf Android 5.1.1). Diese Versionsnummer ist wichtig, wenn du den dazugehörigen Quellcode herunterladen möchtest (siehe unten).

Eine Zeile darunter sehen wir, wer den Kernel auf welchem Rechner kompiliert hat, in unserem Beispiel ist das hellsgod auf dem Rechner hells, bei den Nexus-Kernel von Google ist das der Systemnutzer android-build auf dem Rechner vpbs1.mtv.corp.google.com. Darunter steht, an welchem Tag der Kernel kompiliert wurde.

Hier als Beispiel der hellscore-Kernel der Version b75, welcher auf dem Linux Kernel 3.4.0 basiert. Kompiliert wurde er am 1. Mai 2015 von „hellsgod“.
Hier als Beispiel der hellscore-Kernel der Version b75, welcher auf dem Linux Kernel 3.4.0 basiert. Kompiliert wurde er am 1. Mai 2015 von „hellsgod“.

Wo finde ich den Quellcode? Um den Quellcode für den auf deinem Gerät installierten Kernel in der gewohnten Verzeichnisstruktur zu bekommen, benötigst du bei Nexus-Geräten die Versionsnummer hinter der Kernel-Version, also zum Beispiel g8a80a0e für Android 5.1 auf dem Nexus 5. Zunächst holst du dir den passenden Quellcode für den CPU-Herstellern (hier Qualcomm):
git clone https://android.googlesource.com/kernel/msm.git. Anschließend „checkst“ du den passenden Branch aus dem Kernel-Repository aus:
git checkout g8a80a0e

Welche Kernel gibt es, und welchen soll ich nutzen?

Diese Frage kann man nicht allgemein beantworten. Denn je nach Nutzerprofil und Gerät variieren die Anforderungen an den Kernel stark. Generell gibt es drei Hauptversionen:

  1. Kernel des Herstellers mit proprietären Zusätzen
  2. Generischer AOSP-Kernel
  3. CyanogenMod-Kernel auf Basis des AOSP-Kernels

AOSP ist die Abkürzung für „Android OpenSource Project“, daher basiert eine AOSP-ROM auf dem Android-Quellcode von Google ohne größere Änderungen an der Struktur des Betriebssystems selbst vorgenommen zu haben. CyanogenMod ist wiederum ein Ableger des AOSP-Codes, allerdings mit einigen tiefgreifenden Veränderungen im Quellcode. Das hat zur Folge, dass Kernel die auf dem AOSP-Kernel basieren nicht mit CM-basierenden ROMs kompatibel sind. Oder kurz gesagt: Bevor du einen Kernel installierst, solltest du herausfinden, ob dein Betriebssystem auf AOSP oder auf CyanogenMod basiert. Und dann musst du natürlich den passenden Kernel flashen. Viele Kernelentwickler bieten sowohl eine AOSP- als auch eine CM-Version ihres Kernels an. Bei einigen Geräten gibt es hingegen nur Kernel, die auf dem Kernel des Herstellers basieren. Den Quellcode dazu müssen die Hersteller veröffentlichen. Dazu sind sie laut der GPL-Lizenz des Linux-Kernels (GNU Public Licence) verpflichtet. Eine Übersicht über einige der wichtigsten Kernel gebe ich an dieser Stelle.

Zwischen Root und Custom-ROM: Einen alternativen Kernel zu Installieren, ist in vielen Fällen eine gute Zwischenlösung zwischen der Hersteller-Firmware und einer Custom-ROM.  Du musst dazu dein System nicht komplett platt machen, bekommst aber dennoch jede Menge Einstellungsmöglichkeiten für das System. Beachte aber, dass dein System für Kernel-Tweaks jeglicher Art gerootet sein muss!

Franco.Kernel

Einer der wohl populärsten Custom Kernel in der Android-Welt ist wohl der Kernel des Entwicklers Francisco Franco. Der franco.Kernel ist für alle Nexus-Geräte ab dem Galaxy Nexus sowie für das OnePlus One verfügbar. Der franco.Kernel zeichnet sich durch eine sehr große Menge an Anpassungsmöglichkeiten aus. Hat man sich so weit mit dem Thema Android Kernel auseinandergesetzt um zu wissen, welche Einstellung was bewirkt, ist der Kernel von Francisco Franco sicherlich eine gute Wahl. Franco bietet durch die eigene franco.Kernel Updater-App eine einfache Installationsmöglichkeit.

ElementalX

ElementalX wurde von Aaron Segaert für die Geräte Nexus 5,6,7 und 9, sowie HTC One M7, M8, M9 und S und das Motorola Xoom entwickelt. Ziel des Kernels ist es, eine perfekte out-of-the-box Erfahrung zu bieten, daher mit den Standardeinstellungen den perfekten Kompromiss zwischen Performance und Akkulaufzeit zu finden. Wird die zip-Datei von der Recovery aus geflasht (mehr dazu später), startet der sogenannte Aroma Installer. Mit ihm kann der Nutzer die Einstellungen noch vor der eigentlichen Installation setzen. Der Kernel verfügt neben vielen Standardfeatures einen eigenen CPU-Governor und spezielle Entsperrgesten. Auch für diesen Kernel gibt es eine eigene App, die allerdings etwas kostet. Sie ist für den Betrieb des Kernels aber nicht notwendig. Wer also eine gute Kernel-Erfahrung machen will, ohne viel mit den Einstellungen herumzuspielen, sollte zumindest einen Blick auf den ElementalX Kernel werden.

Zu den bekanntesten Custom-Kerneln gibt es auch passende Einstellungsapps, wie hier für ElementalX den EX Kernel Manager.
Zu den bekanntesten Custom-Kerneln gibt es auch passende Einstellungsapps, wie hier für ElementalX den EX Kernel Manager.

AK Kernel für das OnePlus One

Der AK Kernel basiert auf dem CyanogenMOD Kernel für das OnePlus One und ist dementsprechend für CyanogenMOD verfügbar. Der AK Kernel bietet ähnlich dem franco.Kernel einen riesigen Umfang an Einstellungsmöglichkeiten an. Nicht nur stellt er Unmengen an Schedulers und Governors an, sondern lässt den User aus verschiedenen Hotplugging-Diensten und Farbprofilen auswählen. Ein Universal-Kernel für das OnePlus One sozusagen.

Hells-Core für Nexus 4, 5 und 6

Mein persönlicher Favorit wurde vom Schweizer Laurent Hess, in der Community als „hellsgod“ bekannt, entwickelt und ist für die Nexus Smartphones ab dem Nexus 4 verfügbar. Der hells-Core Kernel wurde mit dem Ziel entwickelt, die Akkulaufzeit der Nexus Smartphones so lange wie möglich zu halten und das Gerät dabei kühl zu halten ohne dass es gröbere Performanceeinbußen gibt. Das wird durch Undervolting und speziell angepasstes Hotplug-Verhalten und einen modifizierten Governor erzielt. Außerdem bietet hells-Core auch erweiterte Kontrolle über Bildschirmprofile, faux-Sound Kontrolle und andere kleine Tweaks. Auch für diesen Kernel gibt es eine App zur Kontrolle über die Kerneleinstellungen, aber auch einen einfachen Installer.

Es gibt eine Unmenge an verschiedenen Kernel, ich habe für diesen Artikel vier populäre Kernel ausgewählt und genauer betrachtet, das bedeutet nicht, dass andere Kernel schlechter sind. Mit dem Grundwissen nach dem Lesen dieses Artikels solltest du selbst in der Lage zu sein, die verschiedenen Kernel zu vergleichen. Wir würden uns freuen, wenn du deinen Lieblingskernel in die Kommentare schreibst!

Fortsetzung folgt…

Im nächsten Teil zeigen wir dir, wie du einen Custom-Kernel installierst und grundlegende Einstellungen daran vornimmst. Im dritten Teil unserer Kernel-Tuning-Artikelserie folgt ein Vergleichstest von je drei Kerneln auf dem Nexus 5 und dem OnePlus One.

 

Kommentiere den Artikel

Please enter your comment!
Please enter your name here