Plik SWAP

Jakiś czas temu ktoś podpiął w moim kompie dysk SSD, a start (HDD) przepiął w miejsce napędu optycznego. Domyślam się, że napęd optyczny był na wolniejszym kontrolerze. Na partycji systemowej miałem plik swap. Teraz, choćby zabrakło mi trochę ram-u, to system potrafi przymulić. Czy jest sens trzymania pliku SWAP na SSD (konkretnie partycji systemowej), a może jest lepsze rozwiązanie? W teorii, to nie mam tak mało ramu, bo 16GB, ale jak widać, to może niekiedy nie starczyć (odpalony emulator Androida lub jakiś VM + parę instancji przeglądarek + jakieś IDE).

Tak.

Wyłącz tradycyjny plik SWAP i daj nad tym kontrolę systemd-swap.

W /etc/systemd/ masz plik swap.conf

Zrób np. tak:

zswap_enabled=0
zram_enabled=0
swapfc_enabled=1
swapfc_chunk_size=1G
swapfc_max_count=8
swapfc_free_ram_perc=4
swapfc_path=/var/lib/systemd-swap/swapfc/
swapfc_nocow=1

https://wiki.archlinux.org/index.php/Swap#Automated

Powyższe ustawienia powodują utworzenie pliku SWAP 1GB jeżeli zostaje 4% wolnego RAM (w Twoim przypadku 640 MB RAM).
Jeżeli zbliżasz się do końca pliku 1 GB SWAP, to tworzy kolejny plik 1 GB (i tak to 8 razy, czyli 8 x 1 GB=8 GB max SWAP).

Mechanizm jest dobry, o ile zbyt często nie przekraczasz dostępnej pamięci RAM.
Sposób ten nie wpływa na wydajność komputera i wolniejsze uruchamianie/zamykanie systemu.
Połączenie zalet braku SWAP z posiadaniem SWAP kiedy tylko jest taka potrzeba.

Czyli coś w stylu WIndowsowego pliku stronnicowania. Z jakiegoś rozwiązania do tworzenia/usuwania swapów korzystałem w przeszłości, ale potem pojawił się (chyba) zram. Twoja propozycja opiera się na wyłączaniu zram, jak widzę. Powinno wszystko przyśpieszyć?

Tak powinno przyspieszyć. Zram używa kompresji w RAM i angażuje w to pewien % mocy procesora. Powinno przyspieszyć, bo plik jest tworzony tylko i wyłącznie, gdy jest taka potrzeba. Jeżeli nie zbliżasz się do końca pamięci RAM, to system zachowuje się, jakby był SWAP OFF.

Rozwiązanie jedynie złe jest jeżeli b. często i znacznie przekraczasz ilość RAMu, jaką masz dostępną. (tworzenie chunka (pliku SWAP) i jego częste usuwanie, wtedy niezdrowe to jest dla dysku SSD) W takim przypadku lepszy jest stały swapfile.

Się zastanawiam, czy nie lepszy stały rozmiar, bo przynajmniej nie muszę sprawdzać ilości wolnego miejsca. W końcu, to mogę zapchać dysk i miejsca na swap zabraknie. Jednak spowodowałoby to ubicie procesu. Na razie skorzystam z twojej porady.

Aha. W OpenSUSE nie mam tego pliku. Utworzyłem go i zobaczę, co i jak. Stary plik swap skasować? Wybadałoby to, bo nadanie mu mniejszego priorytetu nie ma sensu - pliki i tak są zakładane, gdy są potrzebne. Jednak stary plik jest na innej partycji niż systemowa.

Systemd sprawdza dostępność miejsca i nie utworzy Ci “file-chunka” ze swapem jak będzie zbyt mało miejsca. Zresztą Ty sam określasz, ile plików swap ma być maksymalnie utworzone i o jakim rozmiarze ma być pojedynczy plik SWAP.

Wielkość pojedynczego pliku określasz na podstawie szybkości zapisu twojego SSD. Chodzi o to, żeby nie było przestoju, jak tworzy się plik swap, gdy zaczyna brakować RAM.

Plik będzie, tylko doinstaluj pakiet systemd-swap.

$pacman -Fl systemd-swap
systemd-swap etc/
systemd-swap etc/systemd/
systemd-swap etc/systemd/swap.conf
systemd-swap etc/systemd/swap.conf.d/

@nintyfan nie zapomnij o aktywacji usługi w systemd. (systemctl enable systemd-swap.service)

Utworzenie pustego pliku wymiany nie ma praktycznie żadnego wpływu na żywotność dysku, to tylko wpis w tabeli systemu plików. Dopiero zapisywanie tam danych skutkuje operacjami na dysku, a to już bez różnicy czy jest stały swap, czy ten znaleziony przez ciebie sposób.

Dokładnie, ale tutaj właśnie chodzi o częste usuwanie chunków właśnie z danymi ze swapowania, gdy spadnie użycie RAM i przy zamykaniu systemu.
Można oczywiście to ogarnąć parametrem w konfiguracji, ale usuwaniu przy zamykaniu systemu już nie zapobiegniesz. Dlatego rozwiązanie raczej dobre jeżeli notorycznie nie przekraczasz maksymalnej dostępnej ilości RAM.

1 polubienie

Jak byś miał słaby procesor to pewnie zram nie jest dobrym rozwiązaniem, ale przy dzisiejszych procesorach obciążenie procesora jest niezauważalne, a korzyści z dodatkowego “wirtualnego” swapu są ogromne.

Na nowym (starym) komputerze (i5 + GTX1050 + 8GB RAM) nie chciałem używać zram, bo myślałem że wystarczy zmienić w swap priorytet jego włączania na 6 (swap potrzebny mi do hibernacji).
Wszystko działało dopóki nie zachciało mi się instalować na VMware Player Win10.
Jak dawałem na Win mało RAM to mulił, a jak więcej to zaczynało używać swap i zaczynały się lagi.
Bardzo dużo zależy od odpowiedniego skonfigurowania zram i swap.
Teraz mam na maszynę wirtualną z Win 10 przydzielone 6GB RAM + 2GB RAM na grafikę czyli tyle ile mam wszystkiego fizycznego RAM-u w komputerze, a jak jeszcze uruchomię Firefoksa oprócz maszyny wirtualnej to też daje się przeglądać strony w internecie jak nie będzie się włączać dużo ciężkich stron naraz.
Dość powiedzieć że przy odpowiednim skonfigurowaniu Win10 w maszynie wirtualnej uruchamia się teraz i działa Need for Speed: Most Wanted

Trzeba też wziąć pod uwagę zmienną cat /proc/sys/vm/swappiness i nie nadawać zbyt małej wartości bo jak jest za mała to w momencie jak jest koniec pamięci i system zaczyna używac swap to może przez chwilę wojniej chodzić komputer, generalnie ta wartość powinna być małą jak jest duża ilość RAMu.