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:
Oder auf die SD-Karte kopieren und über das Terminal:
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:
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.
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
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
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
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
Zuletzt bearbeitet: