Pamięć wirtualna w Androidzie - 5.0 out of 5 based on 2 votes

Ocena użytkowników: 5 / 5

Gwiazdka aktywnaGwiazdka aktywnaGwiazdka aktywnaGwiazdka aktywnaGwiazdka aktywna
 
Rzeczą której najczęściej brakuje w Androidzie to pamięć RAM. Pomimo, że procesor jeszcze daje radę z pracą z wieloma aplikacjami na raz, ilość wolnego RAMu jest nieadekwatnie mała. Gdy zaczyna brakować RAMu system ubija aplikacje uruchomione w tle, a inne z powrotem uruchamia. Podczas gdy ty korzystasz z np. z przeglądarki w tle odbywa się wojna aplikacji o dostęp do RAMu. Z pomocą przychodzi swap.
Android bazuje na systemie Linux tak więc odziedziczył po nim również wiele udogodnień, m.in. pamięć wirtualną zwaną również swapem. Jest to rozszerzenie pamięci RAM. Przydatne gdy chcemy zachować wielozadaniowość, przy niewystarczającej ilości wolnej pamięci RAM.
Aby skorzystać ze swapa trzeba mieć zrootowany smartfon oraz wersję kernela wspierająca możliwość wykorzystania pamięci wirtualnej. Na Linuksie lepiej jest korzystać ze specjalnej partycji swap, ale na Androidzie wykorzystamy do tego zwykły plik.
Tutaj małe ostrzeżenie: dyski flash mają ograniczoną żywotność i są przewidziane na określoną liczbę operacji wejścia-wyjścia. Używanie swapa na partycji w telefonie może skrócić jej żywotność, więc lepiej tworzyć swapa na karcie SD. Jak padnie to po prostu można ją wymienić. Kolejne ostrzeżenie: jeśli korzystamy ze swapa od czasu do czasu, nie usuwajmy jego pliku. Kasowanie i tworzenie na nowo swapa w razie potrzeby będzie prowadzić do fragmentacji, zwiększania garbage collection i wolniejszego zapisu z dysku flash.
Przydatnym narzędziem, z którego będę korzystał do tego artykułu jest Busybox. To zestaw przydanych poleceń zawartych w jednym programie. Uruchamiamy konsolę przez polecenie:
$ adb shell
a potem su aby uzyskać pełen dostęp do systemu.
Na początek tworzymy plik swapa. Ja wybrałem miejsce na partycji sd-ext, która służy mi do przenoszenia aplikacji z pamięci wewnętrznej na kartę SD. Korzystam z Link2SD, a jego punkt montowania partycji sd-ext jest w /data/sdext2/ więc przechodzę do tego katalogu pod konsolą i wydaje polecenie:
# dd if=/dev/zero of=swapfile count=50 bs=1024000
Polecenie dd skopiuje 50MB z urządzenia generującego bajty o wartości $00 do pliku swapfile. Teraz musimy przygotować plik do używania go jako swap.
# mkswap swapfile
I na sam koniec podmontowanie swapa
# swapon swapfile
Aby sprawdzić czy swap jest w użyciu dajemy polecenie free
# free -m
             total  used  free  shared  buffers
Mem:           588   546    41       0        8
-/+ buffers:         538    49
Swap:           48     0    48
Z powyższego polecenia wynika, że do dyspozycji mamy 48 MB swapu, z czego użyte jest 0. Parametr -m podaje wartości z megabajtach, polecenie free uruchomione bez żadnych parametrów da wartości w bajtach.
Gdy chcemy wyłączyć swapa dajemy polecenie w katalogu gdzie znajduje się swapfile:
# swapoff swapfile
Tutaj trzeba wspomnieć o jednej ważnej kwestii. Gdy swap będzie już wypełniony po brzegi i będziemy go chcieli wyłączyć może się to nam nie udać. Aby wyłączyć swap system musi przerzucić dane z niego do RAMu. Jeśli dane się nie zmieszczą system przerwie wykonywanie swapoff. Można spróbować zamknąć aplikacje, które aktualnie działają w RAMie aby zrobić miejsce dla danych ze swapa. Jedynym w 100% pewnym sposobem wyłączenia swapa jest restart telefonu.
Wszystkie powyższe polecenia można wrzucić w skrypty uruchamiane na żądanie. Ja do tego używam ROMToolBox Pro. Kilkoma kliknięciami włączam i wyłączam swapa. Oczywiście jak wcześniej pisałem, jeżeli mamy zamiar wykorzystać jeszcze swap w przyszłości to nie usuwajmy pliku. Jeżeli nasz Android korzysta z katalogu init.d możemy utworzyć skrypt startowy, który będzie montował swap przy starcie systemu.
Osobiście włączam swapa tylko wtedy gdy wiem, że będę korzystał z aplikacji pazernych na RAM i będę chciał zachować multitasking. Nie chce po prostu wykończyć karty SD. Ale jeżeli będziemy wykorzystywać go na co dzień na pewno odczujemy większą responsywność smartfona.
Spodobało Ci się? Udostępnij, przypnij, podziel się z innymi:


Wykorzystanie zawartości tej strony w celach komercyjnych bez zgody autora jest zabronione.
Jeśli wykorzystujesz zawartość tej strony w swoich artykułach, podaj jako źródło adres URI tej strony. Google+
Creative Commons License