[Guide] Swap und Compcache für CyanogenMod

  • 28 Antworten
  • Letztes Antwortdatum
Kranki

Kranki

Ehrenmitglied
859
Hallo Freunde,
in letzter Zeit tauchten öfter Fragen zu Swap und Compcache auf. Ich hoffe, das Thema mit diesem Thread zu klären.

Welche Möglichkeiten gibt es?
1. Swap-Partition
Dabei werden Teile des Speicherinhalts auf eine spezielle Partition der SD-Karte ausgelagert. Diese muss bei der Partitionierung der SD-Karte erstellt werden (siehe https://www.android-hilfe.de/forum/...31/tutorial-sd-karte-partitionieren.4632.html) und ist typischerweise 32MB, 64MB oder 96MB groß. Die Größe ist festgelegt und kann später nicht mehr verändert werden - wenn man es sich leisten kann, permanent 96MB an die Swap-Partition abzutreten, kann man allerdings die Partition mit 96MB erstellen und bei Bedarf später löschen, eine kleinere erstellen und den restlichen Platz einfach frei lassen.
Eine Swap-Partition empfiehlt sich nur bei einer schnellen SD-Karte (Class 6 und vernünftige Markenware).

2. Swap-File
Ein Swap-File ist im Grunde ähnlich wie die Swap-Partition, allerdings wird statt einer eigenen Partition nur eine Datei auf der ext-Partition erstellt. Dadurch ist die Größe jederzeit frei wählbar, ansonsten gilt dasselbe wie für eine Swap-Partition. Ein Swap-File ist eher unüblich.

3. Compcache
Compcache ist im Grunde eine virtuelle Swap-Partition im RAM. Statt auf die SD-Karte ausgelagert zu werden, werden die Daten innerhalb des Compcache-Swap komprimiert. Danach liegen sie zwar immer noch im RAM, haben aber nur noch einen Bruchteil der eigentlichen Größe. Die Idee dahinter ist, dass es auch mit Komprimierung noch effizienter ist, die Dateien im schnellen RAM zu halten als unkomprimiert von der vergleichsweise lahmen SD-Karte zu lesen.
Da nicht alle Daten im RAM komprimiert werden können unterstützt Compcache außerdem eine sog. Backing-Swap. Dabei werden Daten, die nicht komprimiert werden können, doch auf eine Swap-Partition auf der SD-Karte ausgelagert. (Compcache mit Swapfile ist buggy und funktioniert nicht.)

Konfiguration
Ich geh einfach mal die Sektionen der user.conf (siehe Anhang) nacheinander durch:
1. General
media2sd=1 Verschiebt Medien auf die SD-Karte, wenn ein Ordner media auf der ext-Partition existiert, für mehr Platz in /system.
permission_fix=0 Ruft beim nächsten Systemstart fix_permissions auf und setzt sich dann wieder auf 0.
odex_auto=0 Erstellt automatisch odex-Dateien für neue Anwendungen und löscht odex-Dateien deinstallierter Anwendungen.
odex_apk=0 Erstellt Odex für Apps, die noch keine haben
odex_all=0 Erstellt odex für alle Apps.

Ich seh hier eigentlich keinen Sinn in den odex-Optionen und halte sie für ein Überbleibsel alter fehlerhafter Annahmen. Hier kann man eigentlich alles deaktiviert (auf 0) lassen.

2. Compcache
compcache_en=1 Aktiviert Compcache
cc_disksize=32 Größe der virtuellen Compcache-Partition in MB, angegeben ist die unkomprimierte Größe. Der tatsächliche Speicherverbrauch von Compcache ist also weit niedriger.
cc_memlimit=16 Maximale Speichernutzung der Backing Swap (in MB)
cc_backingswap_en=0 Aktiviert Backing Swap
cc_backingswap=/dev/block/mmcblk0p3 Swap-Partition für Backing Swap
cc_swappiness=30 Swappiness
Standardwerte bei Cyanogen sind bis 4.1.9999 maximal 25% des RAM im Compcache, maximale Nutzung der Backing Swap 15%, Backing Swap auf der dritten Partition der SD-Karte (angegeben durch /dev/block/mmcblk0p3), aber nicht aktiv. Seit 4.2 ist Compcache standardmäßig aus. Zur Swappiness später.

3. Swap file
swap_file_en=0 Swap-Datei erstellen
linux_swap_file_size=32 Größe der Swapdatei in MB
linux_swap_file=/system/sd/swap.file Ort der Swapdatei

4. Linux-Swap
linux_swap_en=0 Linux-Swap aktivieren
linux_swap_partition=/dev/block/mmcblk0p3 Pfad zur Swap-Partition oder Datei
swappiness=30 Swappiness

5. CPU Clock
proc_cpu_en=0 Eigene CPU-Einstellungen aktivieren/deaktivieren
scaling_min_freq=245760 Minimale CPU-Frequenz
scaling_max_freq=528000 Maximale CPU-Frequenz

Alle anderen Optionen in der Datei können auf den Standardwerten belassen werden. Falls man damit irgendwas interessantes machen kann, nehm ich das gerne auf, aber ich konnte beim besten Willen nichts darüber finden, was z.B. die gesamte Sektion Virtual Memory macht.

Ein Wort zur Swappiness
An der Swappiness hängt auch ein gutes Stück Performance der Swap-Partition. Der Wert gibt an, wie bei Bedarf Speicher freigemacht wird. Steht er auf 100 werden immer inaktive Daten auf die Swap ausgelagert. Steht er auf 0 werden immer als Cache vorgehaltene Daten entfernt.
Gesehen hab ich schon alles zwischen 30 (dem Wert, den die user.conf als Standard vorgibt) und 60 (dem Linux-Standardwert). Ich selber habe momentan Swappiness 40, das scheint gut zu funktionieren.

Installation
0. Scriptwahl
Aufgrund einer Änderung bei der Bezeichnung des Compcache-Kernelmoduls funktioniert das Script V0.1.5.3 nur bis 4.1.999, ab 4.1.9999 ist das angepasste Script nötig.

1. SD-Karte partitionieren
Zur Vorgehensweise verweise ich einfach auf das entsprechende Tutorial (https://www.android-hilfe.de/forum/...31/tutorial-sd-karte-partitionieren.4632.html).
Benötigt werden eine ext2/3/4-Partition (in ausreichender Größe für Apps2SD) und gegebenenfalls eine Swap-Partition. (Zwischen 32MB und 96MB für eine reine Swap-Partition, für eine Backing-Swap für Compcache reichen maximal 32MB vollauf.)

2. user.conf konfigurieren
Die entsprechenden Einstellungen in der user.conf vornehmen, siehe dazu die separate Sektion. Wichtig ist, nicht den Windows-Editor zu benutzen, sonst gibt es Probleme mit den Zeilenumbrüchen. In dem Thread bei xda wird Notepad++ vorgeschlagen, ich benutze gVim, Hauptsache, er unterstützt Linux-Zeilenumbrüche.

3. Installation
Über adb:
Code:
adb push userinit.sh /system/sd
adb push user.conf /system/sd
adb shell chmod 755 /system/sd/userinit.sh
adb shell chmod 755 /system/sd/user.conf
Oder auf die SD-Karte kopieren und über das Terminal:
Code:
su
cp /sdcard/userinit.sh /system/sd/
cp /sdcard/user.conf /system/sd/
chmod 755 /system/sd/userinit.sh
chmod 755 /system/sd/user.conf
Weitere Schritte sind nicht notwendig, das Script wird automatisch ausgeführt, wenn es vorhanden ist.

4. Hat es geklappt?
Nach einem Neustart sollten die neuen Einstellungen aktiv sein. Überprüfen kann man dies mit folgenden Befehlen an Terminal oder adb shell:
Code:
cat /proc/swaps
Code:
su
/system/sd/userinit.sh -s
Script: [MOD]user configurable userinit.sh V0.1.5.3 for CM. [UPDATED 9/05] - xda-developers

Wenn es noch Fragen gibt, stellt sie. Idealerweise will ich ab jetzt nie wieder einen Thread sehen, in dem gefragt wird, was eine Swap bringt oder wie man eine erstellt, weil sich die Antwort hier nicht findet.
 

Anhänge

  • userinit_V0.1.5.3.zip
    6,3 KB · Aufrufe: 338
  • custom_userinit_cyanogen_4.2.1.zip
    6,6 KB · Aufrufe: 354
Zuletzt bearbeitet:
  • Danke
Reaktionen: ronan, rtv, Lubomir und 8 andere
Super Erklärung, vielen Dank! Ist es denn bei den aktuellen CM Mods (z.B.4.2.1) und bei deinen Full Updates noch notwendig die userinit zu verändern? Oder ist die dort schon eingefügt? Sorry, ich weiß, man kann die irgendwo auslesen, aber soweit bin ich mit meinem technischen Verständnis noch nicht.... ;-)
 
Android-Jeck schrieb:
Super Erklärung, vielen Dank! Ist es denn bei den aktuellen CM Mods (z.B.4.2.1) und bei deinen Full Updates noch notwendig die userinit zu verändern? Oder ist die dort schon eingefügt? Sorry, ich weiß, man kann die irgendwo auslesen, aber soweit bin ich mit meinem technischen Verständnis noch nicht.... ;-)

Wenn es nicht notwendig wäre, würd ich kaum einen riesigen Guide dazu posten. :p
Bis auf die Standardwerte hat sich da schon seit einer halben Ewigkeit nichts mehr getan.
 
Kranki schrieb:
Wenn es nicht notwendig wäre, würd ich kaum einen riesigen Guide dazu posten. :p
Bis auf die Standardwerte hat sich da schon seit einer halben Ewigkeit nichts mehr getan.
Na, dann mache ich mich nachher mal daran,das bei mir zu ändern.
 
Kranki schrieb:
2. user.conf konfigurieren
Die entsprechenden Einstellungen in der user.conf vornehmen, siehe dazu die separate Sektion. Wichtig ist, nicht den Windows-Editor zu benutzen, sonst gibt es Probleme mit den Zeilenumbrüchen. In dem Thread bei xda wird Notepad++ vorgeschlagen, ich benutze gVim, Hauptsache, er unterstützt Linux-Zeilenumbrüche.

Hi,

erstmal vielen Dank für die ausführliche Anleitung. Zu dem o.g. Punkt hätte ich nur eine Frage... welche seperate Sektion meinst du?? kannst du mir einen Link geben oder hab ich da was falsch verstanden??

Vielen Dank

greetz
g-oNe
 
Hallo,
ich habe versucht compcache via userinit.sh unter cyan 4.2.2 zu aktiviern, nur leider kommt im status immer "Compcache disabled" lege mal userinit.sh und user.conf als anlage bei, es wäre nett wenn mal jemand düber sehen könnte und mir helfen könnte Compcache zu aktivieren!

Mit Linux-Swap hatt es funktioniert, aber dass wollte ich wegen der lebensdauer der SD nicht weiter nutzen. Leidet die Lebensdauer der SD eigentlich so stark unter Linux-Swap (Swppiness ~30)?

Schonmal vielen Dank!
 

Anhänge

  • userinit.sh.txt
    20,5 KB · Aufrufe: 885
  • user.conf.txt
    2,5 KB · Aufrufe: 341
Update:
Habe userinit.sh mal manuell ausgeführt:

Scheinbar sind im Cyanogen 4.2.2 keine Compcache Module installiert?!

Kann das jemand bestätigen?
 
So habe jetzt die beiden dateien auf mein G1 gepusht und neugestartet. Wenn ich aber über adb den befehl
Code:
adb shell sh /system/sd/userinit.sh -s
eingebe bekommen ich folgenede Ausgabe:
www.imgbox.de
http://www.imgbox.de/?img=r26518v22.jpg

kann mir vielleciht jemand sagen was da schiefgelaufen ist? wäre über jede Hilfe dankbar und wenn mir jemand die user.conf so zurechtschreiben könnte das Sie mit dem CM 4.2.1 läuft wär natürlich noch besser... ;)

freue mich über antworten...

greetz
g-oNe
 
Zuletzt bearbeitet:
Kann es sein das hier viele die userinit.sh bearbeiten/verändern und nicht die user.conf :confused:

Möchte noch einmal betonen das die Einstellungen in der user.conf vorgenommen werden müssen! ;)
 
Zuletzt bearbeitet:
ne also ich hab schon die richtige datei bearbeitet: user.conf :rolleyes:

und nu :confused:
 
Anscheinend hat sich beim Wechsel auf die neue Compcache-Version in 4.1.9999 der Name des Kernelmoduls geändert. Auf xda habe ich eine angepasste Version des Scripts gefunden und im ersten Beitrag hochgeladen. Damit sollte Compcache auch wieder funktionieren.
 
Hi Kranki,

welche Ausgabe sollte man denn erhalten wenn man die Eingaben aus "Hat alles geklappt" gemacht hat?

hab ne swap partition und dort steht Used 4292 und Priority -1

:confused: denk aber mal das es geklappt hat... oder muss ich in der user.conf noch irgendwas ändern?

Linux_swap
Swap_file
und
Sys_vm is disabled
nur compcache steht auf 1.

hoffe das das alles so seine richtigkeit hat?

nochmal vielen dank für die ganzen mühen :)

greetz
g-oNe
----------------------------------------------------------
mmh.. bekomme bei der Eingabe von
Code:
/system/sd/userinit.sh -s

am ende immer mehrere meldungen in der mir gesagt wird:

Unable to create /system/app/****.odex
---- dexopt-wrapper

hab nur keinen blassen was das bedeuten könnte. wär nett wenn mir das mal jemand kurz erläutern könnte! frage mich ob ich die rechte alle richtig vergeben habe?

THX
 
Zuletzt bearbeitet:
Ich würde die Odex-Optionen deaktivieren. Ich sehe darin keinen Performancegewinn, aber Potential für Ärger.
 
kai84m schrieb:
Update:
Habe userinit.sh mal manuell ausgeführt:

Scheinbar sind im Cyanogen 4.2.2 keine Compcache Module installiert?!

Kann das jemand bestätigen?

cyanogen hat vor ein paar Tagen im IRC erklärt, dass compcache viele Bugs in allen möglichen Anwendung ans Tageslicht bringt, und es eigentlich keinen Sinn macht, zu diesem Zeitpunkt da Energie zu investieren wenn man ein stabiles System haben möchte (und selbst die meisten "Alphatester" werden stinkig, wenn mal die SMS des Hausdrachens nicht ankommt).


Oh, getwittert hatte er's auch:
Twitter / Steve Kondik: I think I am going to disa ...
Twitter / Steve Kondik: Finding out that its expos ...
 
Ich hab bei mir gesehen, dass CPU CLOCK in der runtergeladenen user.conf deaktiviert ist. Brauch man das bei den aktuellen CM nicht, oder ist es sinnvoll das manuell zu aktivieren?
 
Android-Jeck schrieb:
Ich hab bei mir gesehen, dass CPU CLOCK in der runtergeladenen user.conf deaktiviert ist. Brauch man das bei den aktuellen CM nicht, oder ist es sinnvoll das manuell zu aktivieren?

Bei deaktivierten CPU-Einstellungen in der user.conf sind die Standardeinstellungen 245Mhz Min, 528 Mhz Max, das ist eigentlich in Ordnung.
 
also compcache aus oder??? aber swap an...

oder was ist nun die beste einstellung??

oder sogar beides aus??? hab echt kein plan mehr
 
CMcRae schrieb:
also compcache aus oder??? aber swap an...

oder was ist nun die beste einstellung??

oder sogar beides aus??? hab echt kein plan mehr
Wenn ich's richtig verstanden hab Compcache aus (verursacht wohl zu viele Probleme) und Linux Swap an...swappiness 30-40. Richtig?

Was CPU CLOCK angeht hab ich schon häufiger was von Min. bei 128000 gelesen um den Akku zu schonen...Ist das sinnvoll?

Welche Funktion hat eigentlich die userinit.sh, wenn man dort nichts verändert? Und was passiert, wenn man dort was ändert?
 
Zuletzt bearbeitet:
Im Market gibt's seit Kurzem das App "user.conf creator". Hat das schon jemand getestet?
 
Android-Jeck schrieb:
Im Market gibt's seit Kurzem das App "user.conf creator". Hat das schon jemand getestet?

Scheint wohl zu machen, was es soll. Link zur Herstellerseite verweist ja auf einen xda-Thread.
 

Ähnliche Themen

Technoolli
Antworten
0
Aufrufe
2.799
Technoolli
Technoolli
HexHecker
Antworten
0
Aufrufe
2.518
HexHecker
HexHecker
A
Antworten
6
Aufrufe
1.631
Kuni
K
Zurück
Oben Unten