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.

1lajk

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.