Memory und swap

kla960

Neuer User
Mitglied seit
31 Mrz 2006
Beiträge
94
Punkte für Reaktionen
0
Punkte
6
Hi,

auf meiner 7270 sind twonkymedia und davfs große Speicherfresser. Also habe ich versucht mit swap den Speicherengpass zu verringern. Leider mit nicht so großen Erfolg. Der Clientzugriff auf den Twonkyserver wurde zu einer Qual, durch den langsammen Speicherzugriff auf das Swapfile. Also habe ich nach wegen gesucht, den vorhanden Speicher besser zu nutzen. Mein HTC Desire bietet da z.B. zwei Möglichkeiten an.

1. Kernel Samepage Mapping (KSM)
kurz, gleiche Speicherblöcke werden nur einmal gespeichert, wodurch der interne Speicher besser genutzt wird. Also Kernel mit KSM erstellt, aber leider umsonst. Unter /sys/kernel/mm/KSM findet man Dateien zur Nutzung von KSM. Leider wird kein gesharter Speicher angezeigt.

Weiß einer wieso das nichts funktioniert?

Aktiviert habe ich KSM über rc.custom
echo 1 > /sys/kernel/mm/ksm/run

2. Compcache (neu auch ZRAM genannt)
Komprimierter SWAP speicher im RAM. Durch Komprimierung wird also hier der Speicher besser ausgenutzt. Da dieser SWAP Speicher im RAM läuft, wird lediglich Rechenleistung zur Komprimierung genutzt und ist somit relativ schnell. Standardmäßig nutzt die BOX bereits diese Möglichkeit mit dem folgenden Aufruch über init.d

modprobe ramzswap num_devices=1 disksize_kb=8192 memlimit_kb=2048

Zur Zeit teste ich zwei Änderungen der Einstellungen ebenfalls über rc.custom

swapoff /dev/ramzswap0
rmmod ramzswap
modprobe ramzswap disksize_kb=32768 memlimit_kb=8192 (erhöhung des nutzbarem RAMs für compcache)
bzw. modprobe ramzswap backing_swap=/var/media/ftp/uStor01/swapfile (memlimit_kb 15% des RAMs und nicht wirklich komprimierbare Speicherinhalte werden in ein swapfile ausgelagert)
swapon /dev/ramzswap0

Variante 2 wäre nach allem was ich gelesen habe, zumindest eine Verbesserung gegenüber der aktuell möglichen Kombination aus compcache und Swapfile mit prio Zugriff auf compcache, da compcache hier höher komprimierbare Speicherbestandteile in den RAM lädt.

Hat hier einer schon Erfahrungen und eigene Empfehlungen? Oder sonstige Ideen, wie man den Speicher besser nutzen kann?
 
Nun, KSM wird hauptsächlich auf Virtualusierungs Host angewendet, da bei z.B. 20 Windows Gastsystemen viele Speicherinhalte gleich sind. Bei meinem Android Telefon stehen z.Z. 9088 pages_unshared, 2772 pages_sharing, 483 pages_shared, 5049 pages_volatile

The effectiveness of KSM and MADV_MERGEABLE is shown in /sys/kernel/mm/ksm/:

pages_shared - how many shared unswappable kernel pages KSM is using
pages_sharing - how many more sites are sharing them i.e. how much saved
pages_unshared - how many pages unique but repeatedly checked for merging
pages_volatile - how many pages changing too fast to be placed in a tree
full_scans - how many times all mergeable areas have been scanned

A high ratio of pages_sharing to pages_shared indicates good sharing, but
a high ratio of pages_unshared to pages_sharing indicates wasted effort.
pages_volatile embraces several different kinds of activity, but a high
proportion there would also indicate poor use of madvise MADV_MERGEABLE.

Wie das bei einer Fritz!Box ausehen könnte weiß ich nicht. Bei bleiben die Werte bei 0, was daruaf hinweißt, dass es schlicht und ergreifend nicht funktioniert. Aber warum konnte ich nach nicht ermitteln. Eine erläuterung zu KSM findet man hier:

http://www.kernel.org/doc/Documentation/vm/ksm.txt
 
Weitere Möglichkeit RAM zu optimieren wäre ggf. die tmpfs Partition durch eine zram Partition zu ersetzen. ZRAM ist der nachfolger von Compcache und wurde um die Möglichkeit als normale Partition zu arbeiten erweitert.

Filesystem Size Used Available Use% Mounted on
/dev/root 7.8M 7.8M 0 100% /
tmpfs 29.4M 1.1M 28.3M 4% /var
dev 29.4M 64.0K 29.3M 0% /dev

/var wird auf der FB als tmpfs über fstab gemounted. ZRAM hat den vorteil gegenüber tmpfs, dass es den USED Space comprimiert und somit weniger realen memory benötigt.

Wenn man ZRAM für die FB compiliert bekommt und die fstab entsprechend anpasst, könnte das doch funktionieren. Oder sieht hier jemand Probleme?
 
Bei bleiben die Werte bei 0, was daruaf hinweißt, dass es schlicht und ergreifend nicht funktioniert. Aber warum konnte ich nach nicht ermitteln.
Die Programme müssen den speicher ja als "Teilbar" makieren, ich denke das macht aber kein Programm weshalb er auch nichts shared
 
Genau, es steht schon in der von Dir verlinkten Dokumentation:
http://www.kernel.org/doc/Documentation/vm/ksm.txt schrieb:
KSM only operates on those areas of address space which an application has advised to be likely candidates for merging, by using the madvise(2) system call:
int madvise(addr, length, MADV_MERGEABLE).

Es wundert mich, dass das Android überhaupt so viele identische Seiten hat. Hast Du einen Hinweis darauf, welche Art von Seiten identisch sind?
 
So richtig gut Dokumentiert ist das leider nicht. Irgendwo habe ich gelesen, dass es ebenfalls bei Programmen hilft die mehrere Prozesse starten. Wie bei mir z.B. der Twonkymediaserver. Allerdings ist das nun kein Freetz Paket in das man noch in irgendeinerweise eingreifen könnte um diesen madvise system call einzubauen.

2056 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2134 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2135 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2188 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2190 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2191 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2192 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2193 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2194 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2195 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2196 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2197 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2198 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2204 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2205 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2206 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2208 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2209 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
2212 root 13672 S /var/media/ftp/uStor01/twonky_60/twonkymediaserver -
 
Ich denke mal das Thema KSM muss man nicht mehr weiter verfolgen aber bei compcache sehe ich Potential. Hier mal ein paar Erläuterungen aus den Man Pages:

-b, --backing_swap

Specify backing swap device. This can either be a swap block device or a swap file. Writes are forwarded to this device when memory limit is reached or when a page is incompressible. You must swapoff backing swap device before init is issued, otherwise init will fail with -EBUSY error. Also, backing swap must be a valid swap device, otherwise 'swapon /dev/ramzswapX' will fail as if swapon was issued directly on the backing swap device.

-m, --memlimit_kb

Specify memory limit (in KB). This is the limit on amount of memory allocated for compressed pages. When this memory limit is reached, all further writes are forwarded to backing swap device. This option is valid only if backing swap is specified. This must be smaller than or equal to backing swap size. Default: 15% of RAM or backing swap size, whichever is smaller.

-d, --disksize_kb

Specify ramzswap disk size (in KB). This is the limit on number of (uncompressed) pages that can be stored in this device. This parameter is valid only when backing swap is not present since in that case, it is implicitly equal to size of the backing swap device. Default: 25% of RAM

Demnach verwendet die 7270 standardmäßig 2048 KB RAM als SWAP ohne das Ihr ein swapfile verwendet.

Ich habe mir mal rzscontrol für die 7270 compiliert und bekomme folgende Statistik relativ kurz nach einem Neustart. bei folgenden SWAP Einstellungen:

modprobe ramzswap backing_swap=/var/media/ftp/uStor01/swapfile memlimit_kb=4096

root@twonky:/var/media/ftp/uStor01/addons/bin# ./rzscontrol /dev/ramzswap0 -s
BackingSwap: /var/media/ftp/uStor01/swapfile
DiskSize: 65536 kB
MemLimit: 4096 kB
NumReads: 1
NumWrites: 18
FailedReads: 0
FailedWrites: 0
InvalidIO: 0
NotifyFree: 0
ZeroPages: 0
GoodCompress: 100 %
NoCompress: 0 %
PagesStored: 13
PagesUsed: 6
OrigDataSize: 52 kB
ComprDataSize: 18 kB
MemUsedTotal: 24 kB
BDevNumReads: 0
BDevNumWrites: 5

Das heißt für mich, dass 100 % des Swaps komprimiert im RAM abgelegt sind und für die eigentlich 52 kB nur 24 kB RAM belegt sind. Mal sehen wie es aussieht, wenn mal mehr Swap benutzt wird.
 
Nach einem Tag ist schon wesentlich mehr ausgelagert. 8.236 kB Swap benötigen nur 584 kB RAM. Der Unkomprimierte SWAP Teil scheint nicht aufzutauchen, da er im Swapfile landet.

root@twonky:/var/mod/root# rzscontrol /dev/ramzswap0 -s
BackingSwap: /var/media/ftp/uStor01/swapfile
DiskSize: 65536 kB
MemLimit: 4096 kB
NumReads: 1312
NumWrites: 2345
FailedReads: 0
FailedWrites: 0
InvalidIO: 0
NotifyFree: 0
ZeroPages: 38
GoodCompress: 100 %
NoCompress: 0 %
PagesStored: 2059
PagesUsed: 146
OrigDataSize: 8236 kB
ComprDataSize: 568 kB
MemUsedTotal: 584 kB
BDevNumReads: 183
BDevNumWrites: 248

root@twonky:/var/mod/root# free
total used free shared buffers
Mem: 60180 49372 10808 0 640
-/+ buffers: 48732 11448
Swap: 65528 11600 53928
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.