Questa pagina fornisce un’introduzione allo spazio di swap e al paging su GNU / Linux. Copre la creazione e l’attivazione di partizioni di swap e file di swap.
Da All about Linux swap space:
Linux divide la sua RAM fisica (random access memory) in blocchi di memoria chiamati pages. Lo scambio è il processo con cui una pagina di memoria viene copiata nello spazio preconfigurato sul disco rigido, chiamato spazio di swap, per liberare quella pagina di memoria. Le dimensioni combinate della memoria fisica e lo spazio di swap è la quantità di memoria virtuale disponibile.
Il supporto per lo swap è fornito dal kernel Linux e dalle utilità dello spazio utente del pacchetto util-linux.
Spazio di swap
Lo spazio di swap può assumere la forma di una partizione del disco o di un file. Gli utenti possono creare uno spazio di swap durante l’installazione o in qualsiasi momento successivo a piacere. Lo spazio swap può essere utilizzato per due scopi, per estendere la memoria virtuale oltre la memoria fisica installata (RAM) e anche per il supporto di sospensione su disco.
Se è utile estendere la memoria virtuale con swap dipende dalla quantità di memoria fisica installata. Se la quantità di memoria fisica è inferiore alla quantità di memoria necessaria per eseguire tutti i programmi desiderati, potrebbe essere utile abilitare lo swap. Ciò evita condizioni di memoria esaurita, in cui il meccanismo killer OOM del kernel Linux tenterà automaticamente di liberare memoria uccidendo i processi. Per aumentare la quantità di memoria virtuale alla quantità richiesta, aggiungere la differenza necessaria (o più) come spazio di swap.
Il più grande svantaggio dell’abilitazione dello swap è la sua minore performance, vedi sezione #Performance. Quindi, abilitare lo swap è una questione di preferenze personali: alcuni preferiscono che i programmi vengano uccisi rispetto all’abilitazione dello swap e altri preferiscono abilitare lo swap e il sistema più lento quando la memoria fisica è esaurita.
Per controllare lo stato di swap, utilizzare:
$ swapon --show
O per mostrare la memoria fisica e l’utilizzo di swap:
$ free -h
Partizione di swap
L’accuratezza fattuale di questo articolo o sezione è contestata.
82
è il tipo di partizione di swap su MBR, non c’è rilevamento automatico della partizione di swap su MBR. / TRIM comandi su partizioni di swap sembrano essere emessi automaticamente dal Kernel se supportato vedere Fedora Deployment Guides. (Discuss in Talk: Swap # Clarify swap discovery) Una partizione di swap può essere creata con la maggior parte degli strumenti di partizionamento GNU/Linux. Le partizioni di swap sono in genere designate come type82
. Anche se è possibile utilizzare qualsiasi tipo di partizione come swap, si consiglia di utilizzare type 82
nella maggior parte dei casi poiché systemd lo rileverà automaticamente e lo monterà (vedi sotto).
Per impostare una partizione come area di swap Linux, viene utilizzato il comando mkswap(8). Ad esempio:
# mkswap /dev/sdxy
Per abilitare il dispositivo per il paging:
# swapon /dev/sdxy
Per abilitare questa partizione di swap all’avvio, aggiungere una voce a /etc/fstab
:
UUID=device_UUID none swap defaults 0 0
dovedevice_UUID
è l’UUID dello spazio di swap.
Vedere fstab per la sintassi del file.
- La voce fstab è facoltativa se la partizione di swap si trova su un dispositivo che utilizza GPT. Vedere la prossima sottosezione.
- Se si utilizza un SSD con supporto TRIM, considerare l’utilizzo di
discard
nella riga di swap in fstab. Se si attiva lo swap manualmente con swapon, utilizzando il parametro-d
--discard
si ottiene lo stesso risultato. Vedere swapon(8) per i dettagli.
Attivazione da systemd
systemd attiva le partizioni di swap basate su due diversi meccanismi. Entrambi sono eseguibili in /usr/lib/systemd/system-generators
. I generatori vengono eseguiti all’avvio e creano unità systemd native per i supporti. Il primo,systemd-fstab-generator
, legge l’fstab per generare unità, inclusa un’unità per lo swap. Il secondo,systemd-gpt-auto-generator
ispeziona il disco di root per generare unità. Funziona solo su dischi GPT e può identificare le partizioni di swap in base al loro tipo GUID, vedere systemd # GPT partition automating per ulteriori informazioni.
Disabilitazione dello swap
Per disattivare lo spazio di swap specifico:
# swapoff /dev/sdxy
In alternativa, utilizzare lo switch-a
per disattivare tutto lo spazio di swap.
Poiché lo swap è gestito da systemd, verrà nuovamente attivato al successivo avvio del sistema. Per disabilitare l’attivazione automatica dello spazio di swap rilevato in modo permanente, eseguire systemctl --type swap
per trovare il responsabile .scambia l’unità e mascherala.
Swap file
In alternativa alla creazione di un’intera partizione, un file di swap offre la possibilità di variare le sue dimensioni on-the-fly, ed è più facilmente rimosso del tutto. Questo può essere particolarmente desiderabile se lo spazio su disco è ad un premio (ad esempio un SSD di dimensioni modeste).
Manualmente
Creazione di file di swap
Usa dd per creare un file di scambio delle dimensioni che preferisci. Ad esempio, la creazione di un file di swap 512 MiB:
# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
Imposta i permessi giusti (un file di swap leggibile in tutto il mondo è un’enorme vulnerabilità locale):
# chmod 600 /swapfile
Dopo aver creato il file di dimensioni corrette, formattalo per scambiare:
# mkswap /swapfile
Attiva il file di swap:
# swapon /swapfile
Infine, modificare il file fstab di configurazione per aggiungere una voce per il file di swap:
/etc/fstab
/swapfile none swap defaults 0 0
Per ulteriori informazioni, vedere fstab#Utilizzo.
- Il file di swap deve essere specificato dalla sua posizione sul file system, non dal suo UUID o ETICHETTA.
- Quando si utilizza Btrfs, non dimenticare di aggiungere anche il sottovolume creato all’elenco e rimuovere le opzioni
discard,autodefrag
e di compressione.
Rimuovi file di swap
Per rimuovere un file di swap, deve prima essere spento e quindi può essere rimosso:
# swapoff /swapfile# rm -f /swapfile
Infine rimuovere la voce pertinente da/etc/fstab
.
Automated
zram-generator
Lo scopo di questo strumento è la creazione di dispositivi zram. È scritto in Rust e risiede nel GitHub di systemd. Può essere installato con il pacchetto zram-generatorAUR.La configurazione è semplice e spiegata nel README.
systemd-swap
systemd-swap è uno script per la creazione di spazio di swap ibrido da swap zram, file di swap e partizioni di swap. Non è affiliato con il progetto systemd.
Installa il pacchetto systemd-swap. Decommentare e impostareswapfc_enabled=1
nella sezione Chunked del file di swap di/etc/systemd/swap.conf
. Avviare/abilitare il servizio systemd-swap
.
Visita la pagina GitHub degli autori per ulteriori informazioni e impostare la configurazione consigliata.
- Se il giornale continua a mostrare il seguente avviso
systemd-swap: WARN: swapFC: ENOSPC
e non viene creato alcun file di scambio, è necessario rimuovere il commento e impostareswapfc_force_preallocated=1
in/etc/systemd/swap.conf
. - Il file di swap creato da systemd-swap non può essere facilmente utilizzato per l’ibernazione. Vedere systemd-swap problema 85.
Swap encryption
Vedere dm-crypt / Swap encryption.
Prestazioni
Le operazioni di swap sono solitamente significativamente più lente rispetto all’accesso diretto ai dati nella RAM. Disabilitare completamente lo swap per migliorare le prestazioni può talvolta portare a un degrado, poiché diminuisce la memoria disponibile per le cache VFS, causando I/O del disco più frequenti e costosi.
I valori di swap possono essere regolati per aiutare le prestazioni:
Swappiness
Il parametro swappiness sysctl rappresenta la preferenza (o l’evitamento) dello spazio di swap del kernel. Swappiness può avere un valore compreso tra 0 e 200 (max 100 se Linux < 5.8), il valore predefinito è 60. Un valore basso fa sì che il kernel eviti lo scambio, un valore alto fa sì che il kernel provi a utilizzare lo spazio di swap e un valore di 100 significa che il costo IO è considerato uguale. L’utilizzo di un valore basso su memoria sufficiente è noto per migliorare la reattività su molti sistemi.
Per verificare il valore di swappiness corrente:
$ sysctl vm.swappiness
In alternativa, i file/sys/fs/cgroup/memory/memory.swappiness
o/proc/sys/vm/swappiness
possono essere letti per ottenere il valore intero grezzo.
/proc
è molto meno organizzato e viene mantenuto solo per scopi di compatibilità, si consiglia di utilizzare /sys
.Per impostare temporaneamente il valore di swappiness:
# sysctl -w vm.swappiness=10
Per impostare il valore di swappiness in modo permanente, creare un sysctl.d (5) file di configurazione. Ad esempio:
/etc/sysctl.d / 99-scambio.conf
vm.swappiness=10
Per testare e più sul perché questo potrebbe funzionare, dai un’occhiata a questo articolo.
Pressione cache VFS
Un altro parametro sysctl che influenza le prestazioni di swap èvm.vfs_cache_pressure
, che controlla la tendenza del kernel a recuperare la memoria utilizzata per il caching delle cache VFS, rispetto a pagecache e swap. L’aumento di questo valore aumenta la velocità con cui vengono recuperate le cache VFS. Per ulteriori informazioni, consultare la documentazione del kernel Linux.
Priorità
Se si dispone di più di un file di swap o partizione di swap si dovrebbe considerare l’assegnazione di un valore di priorità (da 0 a 32767) per ogni area di swap. Il sistema utilizzerà le aree di swap di priorità superiore prima di utilizzare le aree di swap di priorità inferiore. Ad esempio, se si dispone di un disco più veloce (/dev/sda
) e di un disco più lento (/dev/sdb
), assegnare una priorità maggiore all’area di swap situata sul dispositivo più veloce. Le priorità possono essere assegnate in fstab tramite il parametropri
:
/dev/sda1 none swap defaults,pri=100 0 0/dev/sdb2 none swap defaults,pri=10 0 0
O tramite il parametro--priority
di swapon:
# swapon --priority 100 /dev/sda1
Se due o più aree hanno la stessa priorità, ed è la priorità più alta disponibile, le pagine vengono allocate in base a round-robin tra di loro.
Utilizzando zswap o zram
Zswap è una funzionalità del kernel Linux che fornisce una cache di write-back compressa per le pagine scambiate. Ciò aumenta le prestazioni e diminuisce le operazioni IO. ZRAM crea un file di swap compresso virtuale in memoria come alternativa a un file di swap su disco.
Striping
Non è necessario utilizzare RAID per motivi di prestazioni di swap. Il kernel stesso può eseguire lo scambio a strisce su diversi dispositivi, se si dà loro la stessa priorità nel file/etc/fstab
. Fare riferimento al Software-RAID HOWTO per i dettagli.