Swap

ta strona zawiera wprowadzenie do wymiany przestrzeni i stronicowania na GNU/Linuksie. Obejmuje tworzenie i aktywację partycji wymiany i plików wymiany.

Z All about Linux swap space:

Linux dzieli swoją fizyczną PAMIĘĆ RAM (random access memory) Na części pamięci zwane pages. Wymiana jest procesem, w którym strona pamięci jest kopiowana do wstępnie skonfigurowanego miejsca na dysku twardym, zwanego przestrzenią wymiany, aby zwolnić tę stronę pamięci. Połączone rozmiary pamięci fizycznej i przestrzeni wymiany to ilość dostępnej pamięci wirtualnej.

Wsparcie dla swap jest zapewniane przez jądro Linuksa i narzędzia przestrzeni użytkownika z pakietu util-linux.

przestrzeń wymiany

przestrzeń wymiany może mieć formę partycji dysku lub pliku. Użytkownicy mogą utworzyć przestrzeń wymiany podczas instalacji lub w dowolnym późniejszym czasie, zgodnie z potrzebami. Przestrzeń wymiany może być wykorzystana do dwóch celów, aby rozszerzyć pamięć wirtualną poza zainstalowaną pamięć fizyczną (RAM), a także do obsługi zawieszania na dysk.

czy warto rozszerzyć pamięć wirtualną za pomocą swapu zależy od ilości zainstalowanej pamięci fizycznej. Jeśli ilość pamięci fizycznej jest mniejsza niż ilość pamięci wymagana do uruchomienia wszystkich żądanych programów, korzystne może być włączenie funkcji swap. Pozwala to uniknąć wyczerpania pamięci, gdzie mechanizm OOM killer jądra Linuksa będzie automatycznie próbował zwolnić pamięć poprzez zabijanie procesów. Aby zwiększyć ilość pamięci wirtualnej do wymaganej ilości, dodaj niezbędną różnicę (lub więcej) jako przestrzeń wymiany.

największą wadą włączania swapu jest jego niższa wydajność, patrz sekcja #wydajność. Dlatego włączenie wymiany jest kwestią osobistych preferencji: niektórzy wolą zabijać programy zamiast włączać swap, a inni wolą włączać swap i wolniejszy system, gdy pamięć fizyczna jest wyczerpana.

uwaga: nie ma różnicy wydajności pomiędzy używaniem partycji wymiany a sąsiadującym plikiem wymiany.

aby sprawdzić stan wymiany, użyj:

$ swapon --show

lub aby wyświetlić pamięć fizyczną oraz użycie wymiany:

$ free -h

partycja wymiany

Tango-niedokładne.pngfaktyczna dokładność tego artykułu lub sekcji jest kwestionowana.Tango-niedokładne.png

powód:82 jest typem partycji wymiany w MBR, nie ma autodetekcji partycji wymiany w MBR. Polecenia / TRIM na partycjach wymiany wydają się być wydawane automatycznie przez jądro, jeśli są obsługiwane, patrz Przewodniki wdrażania Fedory. (Dyskusja w Talk:Swap#Clarify swap discovery)

partycja swap może być utworzona przy użyciu większości narzędzi do partycjonowania GNU/Linuksa. Partycje wymiany są zazwyczaj oznaczone jako typ 82. Nawet jeśli możliwe jest użycie dowolnego typu partycji jako swap, zaleca się użycie typu 82 w większości przypadków, ponieważ systemd automatycznie wykryje go i zamontuje (patrz poniżej).

aby skonfigurować partycję jako obszar wymiany Linuksa, używane jest polecenie mkswap(8). Na przykład:

# mkswap /dev/sdxy
Ostrzeżenie: wszystkie dane na podanej partycji zostaną utracone.

aby włączyć urządzenie do stronicowania:

# swapon /dev/sdxy

aby włączyć tę partycję wymiany podczas rozruchu, Dodaj wpis do/etc/fstab:

UUID=device_UUID none swap defaults 0 0

gdziedevice_UUID jest UUID przestrzeni swap.

patrz fstab dla składni pliku.

Uwaga:

  • wpis fstab jest opcjonalny, jeśli partycja wymiany znajduje się na urządzeniu używającym GPT. Zobacz następny podrozdział.
  • Jeśli używasz dysku SSD z obsługą TRIM, rozważ użyciediscard w wierszu wymiany w fstab. Jeśli aktywujesz swap ręcznie za pomocą swapon, używając-d--discard parametr osiąga to samo. Szczegóły można znaleźć w swapon(8).
Ostrzeżenie: Włączenie odrzucania w konfiguracjach RAID przy użyciu mdadm spowoduje blokadę systemu podczas rozruchu i podczas pracy, jeśli używasz swapon.

aktywacja przez systemd

systemd aktywuje partycje wymiany oparte na dwóch różnych mechanizmach. Oba są wykonywalne w /usr/lib/systemd/system-generators. Generatory są uruchamiane podczas uruchamiania i tworzą natywne jednostki systemd do montażu. Pierwszy,systemd-fstab-generator, odczytuje fstab, aby wygenerować jednostki, w tym jednostkę do wymiany. Drugi,systemd-gpt-auto-generator sprawdza dysk główny w celu wygenerowania jednostek. Działa tylko na dyskach GPT i może identyfikować partycje wymiany według ich GUID typu, zobacz systemd # GPT Partition automounting aby uzyskać więcej informacji.

wyłączenie swapu

, aby dezaktywować określoną przestrzeń swapu:

# swapoff /dev/sdxy

alternatywnie użyj przełącznika-a, aby dezaktywować całą przestrzeń swapu.

ponieważ swap jest zarządzany przez systemd, zostanie on aktywowany ponownie przy następnym uruchomieniu systemu. Aby wyłączyć automatyczną aktywację wykrytej przestrzeni wymiany na stałe, Uruchom systemctl --type swap, aby znaleźć odpowiedzialnego .zamień jednostkę i zamaskuj ją.

plik wymiany

jako alternatywa dla tworzenia całej partycji, plik wymiany oferuje możliwość zmiany jego rozmiaru w locie i jest łatwiejszy do całkowitego usunięcia. Może to być szczególnie pożądane, jeśli miejsce na dysku jest na wagę złota (np. niewielki dysk SSD).

Ostrzeżenie: Btrfs obsługuje plik wymiany z ograniczeniami od wersji jądra Linuksa 5.0. Zobacz plik Btrfs # Swap, aby uzyskać więcej informacji.

ręcznie

tworzenie pliku wymiany

Uwaga: Jeśli używasz Btrfs, najpierw wykonaj procedurę opisaną w Btrfs#Swap file, aby zainicjować plik wymiany.

użyj dd, aby utworzyć plik wymiany o wybranym rozmiarze. Na przykład utworzenie pliku wymiany 512 MiB:

# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
Uwaga: użycie dd do przydzielenia pliku wymiany jest najbardziej przenośnym rozwiązaniem, Zobacz pliki swapon(8) § z otworami po szczegóły.

ustaw odpowiednie uprawnienia (plik wymiany do odczytu na całym świecie to ogromna luka lokalna):

# chmod 600 /swapfile

Po utworzeniu pliku o prawidłowym rozmiarze sformatuj go do wymiany:

# mkswap /swapfile

Aktywuj plik wymiany:

# swapon /swapfile

na koniec Edytuj konfigurację fstab, aby dodać wpis dla pliku wymiany:

/etc/fstab
/swapfile none domyślne wartości wymiany 0 0

Dla dodatkowe informacje, patrz fstab#usage.

Uwaga:

  • plik wymiany musi być określony przez jego lokalizację w systemie plików, a nie przez jego UUID lub etykietę.
  • podczas korzystania z Btrfs, nie zapomnij dodać utworzonego podwojenia do listy, a także usunąćdiscard,autodefrag I opcje kompresji.

Usuń plik wymiany

aby usunąć plik wymiany, należy go najpierw wyłączyć, a następnie usunąć:

# swapoff /swapfile# rm -f /swapfile

wreszcie Usuń odpowiedni wpis z/etc/fstab.

zautomatyzowany

ZRAM-generator

celem tego narzędzia jest tworzenie urządzeń zram. Jest napisany w Rust i znajduje się na GitHubie systemd. Może być instalowany z pakietem ZRAM-generatorAUR.Konfiguracja jest prosta i wyjaśniona w README.

systemd-swap

Uwaga: Autor zaleca teraz użycie zram-generator zamiast tego, ze względu na niską częstotliwość commitów i ZRAM zaspokajający potrzeby większości użytkowników.

systemd-swap jest skryptem do tworzenia hybrydowej przestrzeni wymiany z zram swap, plików wymiany i partycji wymiany. Nie jest powiązany z projektem systemd.

zainstaluj pakiet systemd-swap. Rozpakuj i ustaw swapfc_enabled=1 w sekcji pliku wymiany /etc/systemd/swap.conf. Uruchom/Włącz usługę systemd-swap.

odwiedź stronę GitHub autorów, aby uzyskać więcej informacji i skonfigurować zalecaną konfigurację.

Uwaga:

  • Jeśli dziennik wyświetla następujące ostrzeżeniesystemd-swap: WARN: swapFC: ENOSPC I nie jest tworzony plik wymiany, musisz rozpakować i ustawićswapfc_force_preallocated=1 w/etc/systemd/swap.conf.
  • plik wymiany utworzony przez systemd-swap nie może być łatwo użyty do hibernacji. Patrz systemd-swap issue 85.

Swap encryption

Patrz dm-crypt / Swap encryption.

wydajność

operacje wymiany są zwykle znacznie wolniejsze niż bezpośredni dostęp do danych w pamięci RAM. Całkowite wyłączenie swapu w celu poprawy wydajności może czasami prowadzić do degradacji, ponieważ zmniejsza pamięć dostępną dla pamięci podręcznej VFS, powodując częstsze i droższe wejścia/Wyjścia dysków.

wartości Swapu można dostosować, aby zwiększyć wydajność:

Swappiness

parametr sysctl swappiness reprezentuje preferencje jądra (lub unikanie) przestrzeni swapu. Swappiness może mieć wartość od 0 do 200 (max 100 jeśli Linux < 5.8), domyślną wartością jest 60. Niska wartość powoduje, że jądro uniknie zamiany, wysoka wartość powoduje, że jądro próbuje użyć przestrzeni swap, a wartość 100 oznacza, że koszt IO jest równy. Użycie niskiej wartości na wystarczającej ilości pamięci jest znane, aby poprawić czas reakcji w wielu systemach.

aby sprawdzić aktualną wartość swappiness:

$ sysctl vm.swappiness

Alternatywnie można odczytać pliki/sys/fs/cgroup/memory/memory.swappiness lub/proc/sys/vm/swappiness w celu uzyskania surowej wartości całkowitej.

Uwaga: Ponieważ /proc jest znacznie mniej zorganizowany i jest przechowywany tylko w celach kompatybilności, zachęcamy do użycia /sys.

aby tymczasowo ustawić wartość swappiness:

# sysctl -w vm.swappiness=10

aby ustawić wartość swappiness na stałe, utwórz sysctl.d (5) plik konfiguracyjny. Na przykład:

/etc/sysctl.D / 99-Zamiana.conf 
vm.swappiness=10

aby przetestować i dowiedzieć się więcej na temat tego, dlaczego to może zadziałać, zapoznaj się z tym artykułem.

ciśnienie pamięci podręcznej VFS

kolejnym parametrem sysctl wpływającym na wydajność swap jestvm.vfs_cache_pressure, który kontroluje tendencję jądra do odzyskiwania pamięci używanej do buforowania pamięci podręcznej VFS, w przeciwieństwie do pagecache i swap. Zwiększenie tej wartości zwiększa szybkość odzyskiwania pamięci podręcznych VFS. Więcej informacji można znaleźć w dokumentacji jądra Linuksa.

priorytet

Jeśli masz więcej niż jeden plik wymiany lub partycję wymiany, powinieneś rozważyć przypisanie wartości priorytetu (0 do 32767) dla każdego obszaru wymiany. System użyje obszarów swap o wyższym priorytecie przed użyciem obszarów swap o niższym priorytecie. Na przykład, jeśli masz szybszy dysk(/dev/sda) I wolniejszy dysk (/dev/sdb), Przypisz wyższy priorytet do obszaru wymiany znajdującego się na najszybszym urządzeniu. Priorytety można przypisać w fstab poprzezpri parametr:

/dev/sda1 none swap defaults,pri=100 0 0/dev/sdb2 none swap defaults,pri=10 0 0

lub poprzez--priority parametr swapon:

# swapon --priority 100 /dev/sda1

Jeśli dwa lub więcej obszarów ma ten sam priorytet i jest to najwyższy dostępny priorytet, strony są przydzielane między nimi w sposób okrągły.

używanie zswap lub zram

Zswap to funkcja jądra Linuksa zapewniająca skompresowany bufor zapisu dla zamienionych stron. Zwiększa to wydajność i zmniejsza operacje IO. ZRAM tworzy wirtualny skompresowany plik wymiany w pamięci jako alternatywę dla pliku wymiany na dysku.

Striping

nie ma potrzeby używania RAID ze względu na wydajność wymiany. Samo jądro może wymieniać paski na kilku urządzeniach, jeśli po prostu nadasz im ten sam priorytet w pliku/etc/fstab. Szczegółowe informacje można znaleźć w HOWTO Software-RAID.

Related Posts

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *