Swap

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.

Nota: non vi è alcuna differenza di prestazioni tra l’utilizzo di una partizione di swap e di un file di swap contiguo.

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

Tango-impreciso.png L’accuratezza fattuale di questo articolo o sezione è contestata.Tango-impreciso.png

Motivo: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
Attenzione: Tutti i dati sulla partizione specificata andranno persi.

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.

Nota:

  • 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.
Avviso: Abilitando scarta su configurazioni RAID utilizzando mdadm causerà il blocco del sistema all’avvio e durante il runtime, se si utilizza swapon.

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).

Attenzione: Btrfs supporta file di swap con limitazioni a partire dalla versione 5.0 del kernel Linux. Vedere Btrfs # Swap file per ulteriori informazioni.

Manualmente

Creazione di file di swap

Nota: Se si utilizza Btrfs, seguire prima la procedura descritta in Btrfs#Swap file per inizializzare il 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
Nota: l’utilizzo di dd per allocare un file di swap è la soluzione più portabile, vedere swapon(8) § File con fori per i dettagli.

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.

Nota:

  • 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

Nota: L’autore ora consiglia di utilizzare invece zram-generator, a causa della bassa frequenza di commit e zram che copre le esigenze della maggior parte degli utenti.

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.

Nota:

  • Se il giornale continua a mostrare il seguente avviso systemd-swap: WARN: swapFC: ENOSPCe non viene creato alcun file di scambio, è necessario rimuovere il commento e impostare swapfc_force_preallocated=1in /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.swappinesso/proc/sys/vm/swappiness possono essere letti per ottenere il valore intero grezzo.

Nota: Poiché /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.

Related Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *