Skryptowa nakładka na kernelowski moduł ZRAM

Kategoria: Artykuły, etykiety: kernel, kompresja, moduł, ram, zram

Dodany: 2015-02-17 21:02 (zmodyfikowany: 2015-02-17 21:26)
Przez: morfik

Wyświetleń: 9620

Wiele miesięcy temu opisywałem ciekawy mechanizm, który może nam pomóc w odciążeniu dysku twardego. Z tym, że wiele się od tego czasu zmieniło, świat poszedł ździebko do przodu i postanowiłem napisać lekki update w stosunku do modułu ZRAM. Tego starego tekstu zdecydowałem się nie kasować -- może komuś się przyda, jakby nie patrzeć, są jeszcze ludzie na świecie co używają stabilnych wydań debiana.

Dla przypomnienia, ZRAM to taki moduł kernela, który tworzy wirtualne urządzenia w pamięci operacyjnej komputera, a te z kolei można wykorzystać pod system plików lub też i pod przestrzeń wymiany SWAP. Dane w takim urządzeni są kompresowane, dzięki czemu mamy do dyspozycji więcej miejsca w pamięci. Jeśli mamy niepierwszej jakości dysk twardy, lub też wykorzystujemy szyfrowanie i nie mamy przy tym procka ze wsparciem dla AES, to operacje zapisu/odczytu mogą zająć wieki. Możemy w dość znacznym stopniu odciążyć dysk przenosząc pliki do RAMu, który jest o wiele szybszy no i dane w nim nie podlegają szyfrowaniu. Tu jest przykład zastosowania takiego mechanizmu -- pokazane w oparciu o przeprowadzenie kompilacji na w pełni zaszyfrowanym systemie nie posiadającym wsparcia dla AES.

Jeśli mamy dużo pamięci operacyjnej, to raczej ZRAM będzie zbędny i tylko podniesie nam rachunek za prąd. Natomiast jeśli nasz komputer nie szasta zbytnio pamięcią, możemy rozszerzyć ją 2-3 krotnie. Trzeba jednak pamiętać, że kompresja dodaje lekki overhead procesorowi.

By móc skorzystać z modułu ZRAM, musimy mieć go wkompilowanego w kernel:

# cat /boot/config-3.16.0-4-amd64 | grep -i zram
CONFIG_ZRAM=m
# CONFIG_ZRAM_LZ4_COMPRESS is not set
# CONFIG_ZRAM_DEBUG is not set

Na githubie znalazłem projekt co się zwie zram-init . Jest to skrypt, zajmujący się tworzeniem odpowiednich urządzeń i całość działa prawie OOTB. Prawie, a to z tego względu, że jak się przyjrzymy wyżej, w debianie nie mamy standardowo wkompilowanego LZ4_COMPRESS i trzeba to będzie zmienić ale o tym później.

W paczce też znajdziemy kilka innych plików, w tym też konfigurację dla modułu ZRAM. Chodzi o to ile urządzeń system będzie tworzył na starcie -- domyślnie są 3. Jeden dla SWAP, jeden dla /tmp/ i jeden dla /var/tmp/ . Oczywiście możemy to sobie dowolnie dobrać przez edycję pliku /etc/modprobe.d/zram.conf :

options zram num_devices=3

Skrypt zram-init wgrywamy do /usr/sbin/ .

Ja używam systemd, zatem potrzebne mi są również pliki .service , które są także dostarczone z paczką. Z tym, że trzeba zmienić w nich algorytm kompresji -- trzeba pozmieniać linijki, przykładowo:

ExecStart=/usr/sbin/zram-init -s2 -alz4 2048

na

ExecStart=/usr/sbin/zram-init -s2 -alzo 2048

Jeśli nie odpowiada nam rozmiar urządzenia (w powyższym przykładzie to 2G), możemy również zmienić tę wartość. Sam skrypt ma więcej opcji, patrz --help .

Po edycji pliki wrzucamy do do /etc/systemd/system/ i aktywujemy:

systemctl enable zram_swap.service
systemctl enable zram_tmp.service
systemctl enable zram_var_tmp.service

Takich plików .service możemy tworzyć ile dusza zapragnie. Trzeba jednak pamiętać, by odpowiednio dobrać parametr -b oraz stworzyć odpowiednią ilość urządzeń.

Jeśli mamy zamiar korzystać z kompresji plików w katalogu /tmp/ , musimy także zamaskować systemową usługę tmp.mount :

# systemctl mask tmp.mount

Jeśli mamy jakieś wpisy w pliku /etc/fstab dotyczące /tmp/ , trzeba je wykomentować.

Po zresetowaniu maszyny, urządzenia ZRAM powinny zostać utworzone, odpowiednio sformatowane i zamontowane w systemie.

OSnews Wykop Blip Flaker Kciuk Śledzik Facebook Identi.ca Twitter del.icio.us Google Bookmarks