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.
aby sprawdzić stan wymiany, użyj:
$ swapon --show
lub aby wyświetlić pamięć fizyczną oraz użycie wymiany:
$ free -h
partycja wymiany
faktyczna dokładność tego artykułu lub sekcji jest kwestionowana.
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
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.
- 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życie
discard
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).
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).
ręcznie
tworzenie pliku 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
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.
- 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
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ę.
- Jeśli dziennik wyświetla następujące ostrzeżenie
systemd-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.
/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.