Speicher, SWAP, Stabilität, Optimierung für Android

  • 24 Antworten
  • Letztes Antwortdatum
logos-ivaylo

logos-ivaylo

Neues Mitglied
0
Hallo!

Ich habe mich in die letzte Paar tage mit dem Optimierung von der Speicherverwaltung an meinen HTC-Magic beschäftigt.


1. Kurze Einführung (man kann es überspringen).

Wie vermutlich alle hier im Forum bekant, ist Android eben eine Linux GUI arbeitend auf einen Linux Kernel, bei HTC-Magic (Vodafon) ist das:
Version: 2.6.27-00393-g6607056 san@sandroid #1

Linux verwendet gern einen SWAP-Partition wenn es um Desktop oder Server OSs geht. Beim Android ist das vom "Werk" vollständig vernachlesigt worden. Im grunde braucht es ja auch nicht wirklich, außer man verwendet "speicher-hungrigen" Programme (ich z.B. CoPilot).

Es gibt auch eine Reihe von Parameter, die die Speicherverwaltung von Linux steuern und die wurden für Android großteils einfach übernommen von der standart Einstellungen und an denen mache ich mich in diesem Thema ran. Mehr Informationen findet man im Internet.


2. Was gebraucht wird.

1. Root rechte auf sein Android. Link 1 und Link 2 ohne Root-ROM
2. Ein Text-Editor für Win/Android. Ich benutze(I.b.) Notepad++/Text Edit.
3. Ein Programm für Android, das sh - Script ausführen kann. I.b. GScript Lite.
4. Und natürlich Swapper, wenn man ein SWAP-Datei erstellen will.


3. Vorgang.

Alle Programme installieren die für Android sind im Market zu finden, die für Windows Googeln.

Die Scripts schreiben. Ich habe mir 2 geschrieben, ein Script überprüft die Einstellungen und das Andere übernimmt die.

check.sh - Einstellungen prüfen.
Code:
# Einstellungen ueberpruefen
echo swappiness wert ist:
cat /proc/sys/vm/swappiness
echo dirty_expire_centisecs wert ist:
cat /proc/sys/vm/dirty_expire_centisecs
echo dirty_writeback_centisecs wert ist:
cat /proc/sys/vm/dirty_writeback_centisecs
echo dirty_background_ratio wert ist:
cat /proc/sys/vm/dirty_background_ratio
echo dirty_ratio wert ist:
cat /proc/sys/vm/dirty_ratio
echo oom_kill_allocating_task wert ist:
cat /proc/sys/vm/oom_kill_allocating_task
echo vfs_cache_pressure wert ist:
cat /proc/sys/vm/vfs_cache_pressure


speed.sh
- Einstellungen vornehmen.
Code:
# Speed Einstellungen
# Bei Wieviel Prozent freien Speicher soll das System anfange zu swappen
echo 5 > /proc/sys/vm/swappiness
#Wie oft soll der Kernel pruefen ob "dirty changes" vorhanden sind
#um diese dann auf die Platte zu schreiben (Zentisekunden)
echo 1000 > /proc/sys/vm/dirty_writeback_centisecs
#Wie alt muessen "dirty changes" sein damit sie weg geschrieben werden
#Sinnvollerweise vm.dirty_expire_centisecs = vm.dirty_writeback_centisecs
echo 1000 > /proc/sys/vm/dirty_expire_centisecs
#Wie viel Prozent das RAMS duerfen von einem Prozess mir "dirty changes" gefuellt
#sein bevor der Prozess gezwungen wird diese Aenderungen zu schreiben
echo 55 > /proc/sys/vm/dirty_ratio
echo 30 > /proc/sys/vm/dirty_background_ratio
#Diese aktiviert oder deaktiviert die Toetung der OOM-Triggerung Aufgabe in
#Out-of-Memory-Situationen. Verbessert die Stabilität.
echo 1 > /proc/sys/vm/oom_kill_allocating_task
#vm.vfs_cache_pressure (0-250, 100 ist Standard) welche festlegt ob und wie
#sehr Prozesse ausgeswappt werden um Arbeitsspeicher fuer Cache frei zu machen.
echo 50 > /proc/sys/vm/vfs_cache_pressure
echo Speed Einstellungen vorgenommen!
Jetzt das Magic (Android Handy) am Rechner anschließen und die Zwei *.sh Files im gscript\ kopieren. Ausklinken und weiter nun am Android-Gerät arbeiten, USB-Verbindung ist aus.
Das Programm "GScript Lite" starten, Menu taste drücken -> Add script auswählen. Hier "Load file" klicken und check.sh auswählen, Name wird automatisch übernommen und jetzt auf Save klicken. Für speed.sh macht man das selbe und aufpassen das "Needs SU?" eingehakt ist.

Das war alles jetzt nur ausführen und das Magic läuft um einiges stabiler und schneller(meine subjektive Meinung).

Es ist auch möglich, diese Einstellungen als Autostart einzurichten aber mit ist so lieber.Im xda-Forum ist das ausführlicher erklärt und auch diskutiert.

Eine kurze Bemerkung zum Swapper. Wenn jemand das SWAP-File verwendet und sein Gerät am PC anschließen will. Unbedingt vorher das SWAP-File Ausschalten sonnst muss man nach dem die Verbringung aus ist, sein Handy neu starten wegen eine SD-Card Fehler(ein neu Start behebt die Fehler).

4. WEB-Links.
Optimierung des Swap unter Linux
Hauptspeicher Tuning
Optimierung für SD/CF-Karten
Linux-kernel Handbuch


Ich freue mich auf eure Kommentare und Parameter Vorschläge.

mfg Ivaylo.

Schlüsselwörter für die Suche:

SWAP, Swappiness, Swapper, dirty_writeback_centisecs, dirty_background_ratio, dirty_ratio, oom_kill_allocating_task, vfs_cache_pressure, Speicherverwaltung, Auslagerungsdatei, optimieren, sh Script, RAM, SD - Karte ...

P.S.: Sorry für Schreib und Grammatik-Fehler
! :o
 
Hi, erstmal ein Lob für deine Arbeit, oder die von xda :)

Zu dem Inhalt des Links Optimierung des Swap unter Linux | Chrischan's krasseszeug.de kann ich leider nicht zustimmen, weder xda noch andere Seiten die man im Inet findet.

"Meine persönliche Empfehlung / Optimierung

Aus meiner Erfahrung herraus ist es sinnvoll diese zwei Kernelparameter auf bestimmten Systemen anzupassen.
Für ein Desktopsystem empfiehlt es sich den swappiness Wert auf 100 zu erhöhen. Gerade auf Desktopsystem liegen viele Prozesse schlafend sinnlos im Hintergrund herrum und sollten schnellstmöglich ausgeswappt werden. Bei Desktopsystem mit sehr viel Ram würde ich es jedoch bei dem Standardwert von 60 belassen."



Selbst xda hat wie ich den swappiness wert auf 10 runtergesetzt, weil es für ein Desktopsystem besser ist nicht allzuschell auszulagern, weil das Medium ( Platte / sdcard ) x mal langsamer ist als RAM.
Für Android vor allem mit HERO ROM ist es viel sinnvoller den Wert um die 10 zu benutzen und nicht wie in dem Artikel beschrieben ein Desktopsystem auf 100 zu setzen. Das wäre der sichere i/o Tod für jedes Desktop System , weil ja alles ausgelagert wird und bei jedem Zugriff erstmal von dem Speichermedium gelesen werden muss und ein ständiger swap/ram Austausch stattfindet.


Werde das Feintuning mal bei meinem Hero ROM testen, ist dazu ein sehr guter Testkandidat.


Gruß
 
Hallo.

Das stimme ich dir voll zu. 100 ist viel zu viel für uns, das Heist eigentlich das mit dem auslagern gleich anfängt. Bei mir hat sich 5% am besten ausgewirkt. Von 0 rate ich ab, da wird dann nur das vfs_cache_pressure berücksichtigt was auch nicht das beste ist.

Und ja das stimmt auch, dass im Forum von xda auch eine Anleitung gibt an denen ich mich auch angelehnt habe. Ich habe es aber erst gestern gefunden, als ich das "sysctl.conf" beim Android nicht gefunden habe. Bei mir hat das leider nicht geklappt mit dem Anleitung von Ohsaka. :o

sysctl.conf für Diejenigen, die es versuchen wollen
Code:
vm.swappiness=5
vm.dirty_expire_centisecs=1000
vm.dirty_writeback_centisecs=1000
vm.dirty_background_ratio=30
vm.dirty_ratio=55
vm.oom_kill_allocating_task=1
vm.vfs_cache_pressure=50
Ich habe was noch vergessen. Die Standard Einstellungen sind wie im Bild unten.

lg Logos

P.S.(Edit): Für Hero ist möglich, dass "dirty_expire_centisecs" und "dirty_writeback_centisecs" auf 500 (5 Sekunde) zu setzen, sich besser auswirkt.
 

Anhänge

  • Standart_einstellungen.png
    Standart_einstellungen.png
    5,3 KB · Aufrufe: 1.005
Zuletzt bearbeitet:
Hallo Android User,

ich habe diesen Beitrag vorhin in meiner Referrer Liste gefunden. Ich selbst bin hin und her gerissen ob ich mir ein Android Handy oder doch besser das iPhone zulegen sollte... ich bin hier noch echt unschlüssig^^.

Aber nun zum Thema. Meine Empfehlung (im übrigen teilen diese auch die Kernelentwickler) geht von einem Standard Desktop Nutzer und dessen Verhalten aus. Ein Windows oder MacOS verhält sich vergleichsweise so wie wenn man unter Linux den Swappiness Wert auf 100 erhöht. Dies ist nicht ohne Grund so. Bei einem normalem Desktopsystem liegen schnell 300MB und mehr Prozesse im Hintergrund welche nicht genutzt werden. Bei Swappiness 100 werden diese sehr zeitnah ausgelagert. Der Ram steht nun z.B. für Lesecache zur Verfügung was den Rechner letztendlich beschleunigt. Nutzt man einen dieser ausgelagerten Prozesse muss dieser erst wieder eingelesen werden. Im Normalfall überwiegt der Nutzen des Lesecaches dem Aufwand des wieder einlesens (vor allem da HD's heutzutage recht schnell sind). Der Prozess bzw. dessen Speicherseiten liegen ja deshalb im Swap weil er nicht genutzt wurde!
Letztendlich hängt es vom Nutzer und seiner genutzen Hardware ab welche Einstellung wirklich gut für Ihn ist.

Zum Thema Swap bei einem Android Handy:
Ich rate davon ab Swap auf einer Speicherkarte dauerhaft zu verwenden. Jede SD Karte hat eine maximale Anzahl an Schreibzyklen je Block. Je nach Hersteller und Qualität der Karte variiert diese Zahl. Nach der Spezifikation der meisten Speicherkarten müssen diese nur 10.000 Schreibzyklen / Block aushalten. Die meisten besseren Karten vertragen 100.000 bis 1 Mio Schreibvorgänge. Durch die Nutzung von Swap können 100.000 Schreibzyklen auf einen Block recht schnell in ein paar Monaten zusammenkommen. Aus diesem Grund ist dieses Feature bei keinem Handy, PDA usw. aktiviert. Wer immer brav Backup's zieht und wem der Preis für eine neue Karte nichts ausmacht, dem kann das natürlich egal sein.
Da die Karten sich also verbrauchen, würde ich versuchen das Swappen so weit wie möglich zu vermeiden. D.h. vfs_cache_pressure und swappiness auf 0 setzen wodurch nur noch im Notfall geswappt wird.

Ich hoffe mal das hilft jemandem hier weiter.

PS: swappiness ist, soweit ich mich nicht irre, KEIN Prozentwert von irgend etwas. Es ist nur ein Faktor welcher in die Berechnung für das wann/was Swappen des Kernels eingeht. Diese "Formel" wurde in der Entwicklung des 2.6er Kernels mehrfach angepasst.
 
Hallo @krasseszeug

Das ist uns bewusst, bezueglich der schreibzyklen auf sdcards und das es sehr schnell zum crash fuehren kann.
wurde auch schon in einem anderen Thread diskutiert.

Ja bei Android ist es so eine Sache.

bei PCs kommt es sehr stark auf die Hardware an ( RAM Groesse ) und bei einem System mit 8 GB RAM wird swap kaum genutzt sodas ein defaultwert von 60 auch in ordnung geht.

Letztendlich kommt es immer auf das Verhalten des Anwenders an und der Hardware.

########################

@parabolon

Bitte der Thread dient der Speicheroptimierung des Linuxkernels für Android.
Wende dich bitte an das xda Forum, wohher du die Anleitung hast oder öffne dazu einen neuen Thread.
Ich sehe wieder die Gefahr das weitere Diskussion komplett am Topic vorbeigehen.

Danke
 
Magic schrieb:
Bitte der Thread dient der Speicheroptimierung des Linuxkernels für Android.
Wende dich bitte an das xda Forum, wohher du die Anleitung hast oder öffne dazu einen neuen Thread.
Ich sehe wieder die Gefahr das weitere Diskussion komplett am Topic vorbeigehen.

Danke

habe gedacht genau darum geht es hier (siehe titel (...)SWAP).

bin nur halt kein hacker :eek: und dachte swap steht im titel, dann wirds passen...
scheinen aber zwei unterschiedliche welten zu sein, wenn ich dir richtig folgen kann...
 
ok, dann mache einen restore deiner alte userinit und loesche die swappartition.

irgendwo hast du doch nach der anleitung eine swappartition aktiviert " swapon" .
mache es wieder rückgängig oder spiele dein komplettbackup mit "nandroid" ein.

falls du nichts dergleichen hast ( Backup ) dann solltest du solche Dinge in Zukunft lassen und dafür einen neuen Thread öffnen, in dem man Dir bestimmt Hilfe geben wird.

Gruß
 
parabolon schrieb:
ich habe die swap-partition so xda-developers - View Single Post - [MOD]Auto Swap Extention bei mir aktiviert, wie schalte ich sie wieder aus?

Hallo, Parabalon.
Ich werde dir von SWAP-Partition dringend abraten. Warum? Beim eine Partition legst du ein bereich auf deine SD-Karte für Swapen fest und wie schon bekant beim swapen wird es so ziemlich oft auf die Karte zugegriffen. Das wiederum fürt zu eine schnelle Ausnutzung von genau diesem Bereich und zu einen relativ baldiges Versagen. Erlich gesagt wollte ich am anfach auch eine SWAP-Partition erstellen, aber nach gründliche Überlegung gelassen.

Mein Tip, benutze Swapper. Und so einmal an 2-3(Aber meistens kommt ehe nicht zu eine geplante aus/ein schalten da du immer dazwischen dein Magic am PC anschließt und da musst du vorher so wieso das SWAP ausmachen) Tage SWAP aus und wieder einschalten. So wird der SWAP-File im einen anderen bereich gespeichert und deine Karte ein bisschen gleichmäßigerer belastet. EDIT: Swapper kann auch Partitionen benutzen versuche es mit Swapper aus zuschalten. Wenn du es aber trotztem mit Partition machen willst benutze DIES hier und ab Punkt 4 Swapper mir Einstellungen für Partition.


@krasseszeug
Hallo auch dir krasseszeug.
Die Empfehlungen sind mir bekant aber wie du es geschrieben hast, sind die für Desktop und Server und nicht(noch nicht) für Handhelds. Und das war auch mein ziel für dieses Tehema, optimale werte für Magic(Android) zu ermitteln.
Zu Swappiness, also alles was ich bis jetzt gefunden habe ist eben ein an %-ten angelegter Wert(0 wird möglichst nicht geswapt, 100 möglichst gleich). Aber nicht fest gelegter es ist nur eine Empfehlung am Kernel, ab wann er mit dem ausswapen beginnen soll.

LINK 1, LINK 2, LINK 3 ...
Und hier, eine heiße Diskussion.

lg Logos
 
Zuletzt bearbeitet:
thx@ logos-ivaylo & magic

nandroid backup habe ich... war auch eher aus interesse gefragt, danke!

swapper werde ich dann auf meiner bestellten class 6 karte testen... habe momentan noch die standard-karte...

gruß

para
 
ich noch mal...

ich frag einfach mal mit meinem niedrigen wissenstand, wo der unterschied zwischen compcache und swapper ist. bei den xda-dev gibts da irgendwie (für mich) widersprüchliche angaben.

speichert compcache im ram und swapper auf sd?


hmm, und so richtig zum magic passt das thema ja auch nicht ^^


gruß

para
 
parabolon schrieb:
speichert compcache im ram und swapper auf sd?

Ganz genau. Swapper verwendet einfach eine Datei oder Partition um mehr Ram zur Verfügung zu stellen.

Compcache hingegen komprimiert einen Teil deines Speichers. Du stellst z.B. 32 MB an Speicher für Comcache zur Verfügung und alles was da reingeswapt wird, wird automatisch komprimiert. So kannst du dann - je nachdem wie gut die Daten komprimiert werden können - aus 32 MB Speicher z.B. 64 MB machen.

Soweit die Theorie - beides hat Vor- und Nachteile.
 
gibt es benchmarks mit denen man seine ergebnisse mal objektiv bewerten kann?
 
Hi,

habe mal irgendwo im hier im Forum oder xda etwas von so einem Acid Test gelesen, habe aber keinen Link mehr dazu.

Einfach mal google befragen.
 
Der Acid Test untersucht und bewertet die Standardkonformität von Webbrowsern. Der aktuellste ist der Acid3-Test. Hat allerdings nichts mit Speicher, SWAP o.ä. zu tun.
 
also mir geht die geschichte nicht wirklich aus dem kopf.

1.
eigentlich müsste man doch sagen können, welche methode (rein von der geschwindigkeit her) die beste ist ?!? wenn nicht, warum kann man das nicht sagen? (nach meinem subjektiven empfinden war die swap-partition am schnellsten)


2.
Weiter würde mich interessieren, was nun der faktor "swappiness" konkret bewirkt.
einmal wird geschrieben die zahl gibt an, zu wieviel prozent der speicher gefüllt sein muss, damit geswapt wird. dann steht wo anders, dass es sich nur um eine "balance" handelt, ob grundsätzlich viel (100) oder wenig (0) ausgelagert werden soll.

2.1
angenommen der zweite ansatz stimmt, müsste man ihn dann nicht grds. auf 0 setzen?
oder würde das dann dazu führen, dass er lieber löscht als auszulagern?! eigentlich ja nicht...


3.
nochmal zu compcache... ist das wie folgt zu verstehen?

96 MB ram - (z.b.) 32 MB compcache = 64 MB ram + 32 MB compcache?

das doch auch murks, vor allem da ich das gefühl habe die cpu läuft i.v.m. android eh immer am anschlag. wenn sie dann auch noch ständig komprimiere/dekomprimieren soll kann das ja nichts werden. außerdem reduziert man den "schnellen" arbeitsspeicher auf 64 MB...


3.1
Besteht die möglichkeit die cpu-auslastung aufzuzeichnen?


würde mich freuen, wenn noch mal jemand stellung bezieht ;)


gruß

para
 
hmm, interessiert wohl kaum leute hier ^^

egal...

habe jetzt meine einstellung gefunden.

mit swapper 96 MB Swap-File und swappiness auf 60 (irgendwie alles gegen die empfehlungen).

damit auf ich insb. über einen längeren zeitraum die besten erfarungen gemacht. die swapfile ist auch ganz schön ausgelastet, meist so um 50MB... läuft echt top!
 
Sorry, war im Urlaub.

parabolon schrieb:
1.
eigentlich müsste man doch sagen können, welche methode (rein von der geschwindigkeit her) die beste ist ?!? wenn nicht, warum kann man das nicht sagen? (nach meinem subjektiven empfinden war die swap-partition am schnellsten)

Das kann man nicht wirklich sagen, weil es stark von den verwendeten Applikationen, der Rechenpower deines Handys und der Geschwindigkeit deiner Speicherkarte abhängt. "Die Beste" Methode ist ausserdem relativ. Wenn ich meine Hardware schonen möchte, dann ist auf jedenfall compcache die beste Variante. Wenn du eine extrem schnelle Speicherkarte hast und dir Geld egal ist, dann ist eine Swap-Partition die beste Methode. Extrem schnell ist aber leider schonmal nicht drin, da es bisher keine Speicherkarten > Class 6 gibt und du somit auf lächerliche 6MB/s begrenzt bist.

2.
dann steht wo anders, dass es sich nur um eine "balance" handelt, ob grundsätzlich viel (100) oder wenig (0) ausgelagert werden soll.

Das ist korrekt. Im Prinzip wird das natürlich auf Prozentwerte umgerechnet (somit haben beide Recht) aber prinzipiell ist es mehr als Balance zu sehen.

2.1
angenommen der zweite ansatz stimmt, müsste man ihn dann nicht grds. auf 0 setzen?

Kommt auf deine persönlichen Vorlieben an. Wenn wenig ausgelagert wird, dann werden immer alle Applikationen im Speicher gehalten. Dafür steht dann aber wenig/kein Cache für Zugriffe auf die Speicherkarte zur Verfügung. Dadurch werden Operationen generell träger weil Daten ständig von der Speicherkarte nachgeladen werden müssen.

Lagerst du viel aus, dann läuft das Arbeiten etwas flüssiger, allerdings dauert es länger zwischen (laufenden) Applikationen umzuschalten, weil die ja jedesmal wieder aus dem Swap geholt werden müssen.

oder würde das dann dazu führen, dass er lieber löscht als auszulagern?!

Das stimmt. Wenn du wenig swapst wird eher gelöscht als ausgelagert. Gelöscht werden kann aber nur, wenn keine Applikation die Daten mehr braucht. Also ist es meist der Plattencache der gelöscht wird.

3.
nochmal zu compcache... ist das wie folgt zu verstehen?

96 MB ram - (z.b.) 32 MB compcache = 64 MB ram + 32 MB compcache?

Nein:

96MB (ram) - 32MB (cc) = 64 MB + (32 MB bis ? MB)

Du hast also hinterher mindestens wieder 96 MB, in den meisten Fällen aber deutlich mehr, da viele Daten sehr gut komprimiert werden können. Im Regelfall wirst du auf mehr als 128 MB kommen.

das doch auch murks, vor allem da ich das gefühl habe die cpu läuft i.v.m. android eh immer am anschlag. wenn sie dann auch noch ständig komprimiere/dekomprimieren soll kann das ja nichts werden.

Das liegt aber dann an deinen Applikationen. Normalerweise wartet die CPU mehr als das sie rechnet. Ausserdem darfst du die dynamische Taktung nicht vergessen (weiss nicht ob das das Samsung macht). Normalerweise ist die Taktfrequenz variabel und wird langsam hochgeschaltet. Somit ist das Handy zwar oft zu 100% ausgelastet, aber nur auf einer bestimmten Taktfrequenz. Sobald das OS merkt, dass mehr Power benötigt wird, wird hochgeschaltet und es steht wieder mehr Rechenpower zur Verfügung.


außerdem reduziert man den "schnellen" arbeitsspeicher auf 64 MB...

Nein, man vergrössert den schnellen Arbeitsspeicher. Das ist der Witz an der Sache. Es ist völlig egal, dass dabei ein Teil komprimiert wird. Das bisschen Kompression fällt normalerweise nicht ins Gewicht.

3.1
Besteht die möglichkeit die cpu-auslastung aufzuzeichnen?

Das bringt nix, solange du sie nicht in Relation zu der aktuellen Taktfrequenz aufzeichnest.
 
  • Danke
Reaktionen: parabolon
Mal ne Frage...

Sorry wenn der Ansatz jetzt blöde klingt (ist), aber was passiert grundsätzlich wenn ich mit dem Swapper aus dem Market ne Swappartition am Hauptspeicher des Magics erstelle ?

Was macht der Magic genau wenn ich den Swapper starte, und unter Configuration/Settings --> Advanced Preferences --> Use Swap Partition anwähle ??

Wenn man dann auf Swap Partition tippt schlägt er einen Pfad im Hauptspeicher vor, so lese ich das zumindest... /dev/block/mmcblk0p3 schreibt er mir da rein, wo ist das ? Ist wohl der interne Memory oder ??

Wenn das ginge hätten wir zumindest das Problem mit den 6MB/sec. I/O ausgeschaltet, so denke ich mal.... (naturlich geht das ewige I/O dann auf den Hauptspeicher, auch nicht so prickelnd)

Oder ist das dann schon CompCache was ich hier meine ??

Sorry, bin Nob was Android betrifft, koche zwar für WM6.5 in anderen Communitys aber das hier is wieder ganz was anderes... (vlt. ist mein Hirn auch schon WM verseucht... würd ich glatt nicht abstreiten...) :rolleyes:

Was meint Ihr dazu, oder hab ich nen Denkfehler ??

MfG Andi
 
Zuletzt bearbeitet:

Ähnliche Themen

B
Antworten
2
Aufrufe
7.314
bluefix
B
Wildkater
  • Wildkater
2 3
Antworten
44
Aufrufe
7.086
Killhunter
K
F
  • Finsch
Antworten
3
Aufrufe
1.327
snoopdogg2210
snoopdogg2210
Zurück
Oben Unten