GNU/Linux >> Linux Esercitazione >  >> Linux

Un'introduzione allo spazio di scambio sui sistemi Linux

Ci sono due tipi fondamentali di memoria in un computer tipico. Il primo tipo, memoria ad accesso casuale (RAM), viene utilizzato per archiviare dati e programmi mentre vengono utilizzati attivamente dal computer. I programmi ei dati non possono essere utilizzati dal computer a meno che non siano archiviati nella RAM. La RAM è memoria volatile; ovvero, i dati archiviati nella RAM vengono persi se il computer viene spento.

I dischi rigidi sono supporti magnetici utilizzati per l'archiviazione a lungo termine di dati e programmi. Il supporto magnetico non è volatile; i dati memorizzati su un disco rimangono anche quando l'alimentazione viene rimossa dal computer. La CPU (unità di elaborazione centrale) non può accedere direttamente ai programmi e ai dati sul disco rigido; deve essere prima copiato nella RAM, ed è qui che la CPU può accedere alle sue istruzioni di programmazione e ai dati su cui operare da tali istruzioni. Durante il processo di avvio, un computer copia specifici programmi del sistema operativo, come kernel e init o systemd, e i dati dal disco rigido nella RAM, a cui accede direttamente dal processore del computer, la CPU.

Il secondo tipo di memoria nei moderni sistemi Linux è lo spazio di scambio.

Scambia spazio

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

La funzione principale dello spazio di scambio è sostituire lo spazio su disco con la memoria RAM quando la RAM reale si riempie ed è necessario più spazio.

Ad esempio, supponi di avere un computer con 8 GB di RAM. Se avvii programmi che non riempiono quella RAM, tutto va bene e non è richiesto alcuno scambio. Ma supponiamo che il foglio di calcolo su cui stai lavorando cresca quando aggiungi più righe e che, oltre a tutto il resto in esecuzione, ora riempia tutta la RAM. Senza spazio di swap disponibile, dovresti smettere di lavorare sul foglio di calcolo fino a quando non potrai liberare parte della tua RAM limitata chiudendo altri programmi.

Il kernel utilizza un programma di gestione della memoria che rileva i blocchi, noti anche come pagine, di memoria in cui i contenuti non sono stati utilizzati di recente. Il programma di gestione della memoria scambia una quantità sufficiente di queste pagine di memoria utilizzate relativamente di rado in una partizione speciale sul disco rigido specificatamente designata per il "paging" o lo scambio. Ciò libera la RAM e fa spazio a più dati da inserire nel foglio di calcolo. Quelle pagine di memoria trasferite sul disco rigido vengono tracciate dal codice di gestione della memoria del kernel e possono essere paginate nuovamente nella RAM se necessario.

La quantità totale di memoria in un computer Linux è la RAM più lo spazio di swap ed è indicata come memoria virtuale .

Tipi di scambio Linux

Linux fornisce due tipi di spazio di scambio. Per impostazione predefinita, la maggior parte delle installazioni Linux crea una partizione di scambio, ma è anche possibile utilizzare un file appositamente configurato come file di scambio. Una partizione di swap è proprio ciò che implica il suo nome:una partizione del disco standard che è designata come spazio di swap da mkswap comando.

È possibile utilizzare un file di scambio se non è disponibile spazio su disco in cui creare una nuova partizione di scambio o spazio in un gruppo di volumi in cui è possibile creare un volume logico per lo spazio di scambio. Questo è solo un file normale che viene creato e preallocato a una dimensione specificata. Quindi mkswap viene eseguito il comando per configurarlo come spazio di scambio. Non consiglio di utilizzare un file per lo spazio di scambio a meno che non sia assolutamente necessario.

Sbattere

Il thrashing può verificarsi quando la memoria virtuale totale, sia RAM che spazio di swap, diventa quasi piena. Il sistema impiega così tanto tempo a eseguire il paging di blocchi di memoria tra lo spazio di scambio e la RAM e viceversa che rimane poco tempo per il lavoro reale. I sintomi tipici di ciò sono evidenti:il sistema diventa lento o non risponde completamente e la spia di attività del disco rigido è quasi costantemente accesa.

Se riesci a emettere un comando come free che mostra il carico della CPU e l'utilizzo della memoria, vedrai che il carico della CPU è molto alto, forse da 30 a 40 volte il numero di core della CPU nel sistema. Un altro sintomo è che sia la RAM che lo spazio di swap sono allocati quasi completamente.

Dopo il fatto, anche guardare i dati SAR (rapporto sull'attività del sistema) può mostrare questi sintomi. Installo SAR su ogni sistema su cui lavoro e lo uso per analisi forensi post-riparazione.

Qual ​​è la giusta quantità di spazio di scambio?

Molti anni fa, la regola pratica per la quantità di spazio di swap che doveva essere allocata sul disco rigido era 2 volte la quantità di RAM installata nel computer (ovviamente, era quando la RAM della maggior parte dei computer veniva misurata in KB o MB) . Quindi, se un computer avesse 64 KB di RAM, una partizione di swap di 128 KB sarebbe una dimensione ottimale. Questa regola teneva conto del fatto che le dimensioni della RAM erano in genere piuttosto piccole a quel tempo e che l'allocazione di più di 2X RAM per lo spazio di scambio non migliorava le prestazioni. Con più del doppio della RAM per lo scambio, la maggior parte dei sistemi ha impiegato più tempo a smanettare che a svolgere effettivamente un lavoro utile.

La RAM è diventata una merce poco costosa e la maggior parte dei computer oggigiorno ha quantità di RAM che si estendono fino a decine di gigabyte. La maggior parte dei miei computer più recenti ha almeno 8 GB di RAM, uno ha 32 GB e la mia workstation principale ha 64 GB. I miei computer più vecchi hanno da 4 a 8 GB di RAM.

Quando si ha a che fare con computer con enormi quantità di RAM, il fattore di prestazione limitante per lo spazio di scambio è di gran lunga inferiore al moltiplicatore 2X. La Guida all'installazione online di Fedora 28, che può essere trovata online su Fedora Installation Guide, definisce il pensiero attuale sull'allocazione dello spazio di scambio. Ho incluso di seguito alcune discussioni e la tabella delle raccomandazioni di quel documento.

La tabella seguente fornisce la dimensione consigliata di una partizione di swap a seconda della quantità di RAM nel sistema e se si desidera memoria sufficiente per l'ibernazione del sistema. La dimensione della partizione di swap consigliata viene stabilita automaticamente durante l'installazione. Per consentire l'ibernazione, tuttavia, dovrai modificare lo spazio di scambio nella fase di partizionamento personalizzato.

Tabella 1:spazio di scambio di sistema consigliato nella documentazione di Fedora

Quantità di RAM di sistema

Spazio di scambio consigliato

Scambio consigliato con ibernazione

meno di 2 GB

2 volte la quantità di RAM

3 volte la quantità di RAM

2 GB - 8 GB

Uguale alla quantità di RAM

2 volte la quantità di RAM

8 GB - 64 GB

0,5 volte la quantità di RAM

1,5 volte la quantità di RAM

più di 64 GB

dipende dal carico di lavoro

ibernazione non consigliata

Al confine tra ciascun intervallo sopra elencato (ad esempio, un sistema con 2 GB, 8 GB o 64 GB di RAM di sistema), utilizzare la discrezione per quanto riguarda lo spazio di scambio scelto e il supporto per l'ibernazione. Se le risorse di sistema lo consentono, l'aumento dello spazio di scambio può portare a prestazioni migliori.

Naturalmente, la maggior parte degli amministratori Linux ha le proprie idee sulla quantità appropriata di spazio di scambio, così come praticamente su tutto il resto. La tabella 2, di seguito, contiene i miei consigli basati sulle mie esperienze personali in più ambienti. Questi potrebbero non funzionare per te, ma come con la Tabella 1, possono aiutarti a iniziare.

Tabella 2:spazio di scambio di sistema consigliato dall'autore

Quantità di RAM

Spazio di scambio consigliato

≤ 2 GB

2X RAM

2 GB – 8 GB

=RAM

>8GB

8 GB

Una considerazione in entrambe le tabelle è che all'aumentare della quantità di RAM, oltre un certo punto l'aggiunta di più spazio di scambio porta semplicemente a thrashing ben prima che lo spazio di scambio si avvicini al riempimento. Se hai poca memoria virtuale mentre segui questi consigli, dovresti aggiungere più RAM, se possibile, piuttosto che più spazio di scambio. Come per tutti i consigli che influiscono sulle prestazioni del sistema, utilizzare ciò che funziona meglio per il proprio ambiente specifico. Ciò richiederà tempo e sforzi per sperimentare e apportare modifiche in base alle condizioni del tuo ambiente Linux.

Aggiungere più spazio di swap a un ambiente disco non LVM

A causa del cambiamento dei requisiti per lo spazio di scambio sugli host con Linux già installato, potrebbe rendersi necessario modificare la quantità di spazio di scambio definita per il sistema. Questa procedura può essere utilizzata per tutti i casi generali in cui è necessario aumentare la quantità di spazio di scambio. Presuppone che sia disponibile spazio su disco sufficiente. Questa procedura presuppone inoltre che i dischi siano partizionati in EXT4 "raw" e partizioni di scambio e non utilizzino la gestione del volume logico (LVM).

I passaggi di base da compiere sono semplici:

  1. Disattiva lo spazio di scambio esistente.

  2. Crea una nuova partizione di swap della dimensione desiderata.

  3. Rileggi la tabella delle partizioni.

  4. Configura la partizione come spazio di scambio.

  5. Aggiungi la nuova partizione/etc/fstab.

  6. Attiva lo scambio.

Non dovrebbe essere necessario un riavvio.

Per motivi di sicurezza, prima di disattivare lo scambio, dovresti almeno assicurarti che nessuna applicazione sia in esecuzione e che nessuno spazio di scambio sia in uso. Il free o top i comandi possono dirti se lo spazio di scambio è in uso. Per essere ancora più sicuro, potresti ripristinare il livello 1 o la modalità utente singolo.

Disattiva la partizione di swap con il comando che disattiva tutto lo spazio di swap:

$ swapoff -a

Ora mostra le partizioni esistenti sul disco rigido.

$ fdisk -l

Questo visualizza le tabelle delle partizioni correnti su ciascuna unità. Identifica la partizione di swap corrente in base al numero.

Avvia fdisk in modalità interattiva con il comando:

$ fdisk /dev/<device name>

Ad esempio:

$ fdisk /dev/sda

A questo punto, fdisk è interattivo e opera solo sull'unità disco specificata.

Usa l'fdisk p sottocomando per verificare che vi sia spazio libero sufficiente sul disco per creare la nuova partizione di scambio. Lo spazio sul disco rigido viene mostrato in termini di blocchi da 512 byte e numeri di cilindri iniziali e finali, quindi potrebbe essere necessario eseguire alcuni calcoli per determinare lo spazio disponibile tra e alla fine delle partizioni allocate.

Usa il n sottocomando per creare una nuova partizione di swap. fdisk ti chiederà il cilindro di partenza. Per impostazione predefinita, sceglie il cilindro disponibile con il numero più basso. Se desideri cambiarlo, digita il numero del cilindro di partenza.

Il fdisk Il comando ora consente di inserire la dimensione delle partizioni in diversi formati, incluso il numero dell'ultimo cilindro o la dimensione in byte, KB o MB. Digita 4000M, che darà circa 4 GB di spazio sulla nuova partizione (ad esempio), e premi Invio.

Usa il p sottocomando per verificare che la partizione sia stata creata come specificato. Nota che la partizione probabilmente non sarà esattamente quella che hai specificato a meno che tu non abbia usato il numero del cilindro finale. Il fdisk il comando può allocare spazio su disco solo in incrementi su interi cilindri, quindi la tua partizione potrebbe essere leggermente più piccola o più grande di quanto hai specificato. Se la partizione non è quella che desideri, puoi eliminarla e crearla di nuovo.

Ora è necessario specificare che la nuova partizione deve essere una partizione di swap. Il sottocomando t consente di specificare il tipo di partizione. Quindi inserisci t , specifica il numero di partizione e, quando viene richiesto il tipo di partizione con codice esadecimale, digita 82, che è il tipo di partizione di scambio Linux, e premi Invio.

Quando sei soddisfatto della partizione che hai creato, usa il w sottocomando per scrivere la nuova tabella delle partizioni sul disco. Il fdisk il programma uscirà e ti riporterà al prompt dei comandi dopo aver completato la scrittura della tabella delle partizioni rivista. Probabilmente riceverai il seguente messaggio come fdisk completa la scrittura della nuova tabella delle partizioni:

The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

A questo punto, usi il partprobe comando per forzare il kernel a rileggere la tabella delle partizioni in modo che non sia necessario eseguire un riavvio.

$ partprobe

Ora usa il comando fdisk -l per elencare le partizioni e la nuova partizione di swap dovrebbe essere tra quelle elencate. Assicurati che il nuovo tipo di partizione sia "Scambio Linux".

Sarà necessario modificare il file /etc/fstab in modo che punti alla nuova partizione di swap. La riga esistente potrebbe assomigliare a questa:

LABEL=SWAP-sdaX   swap        swap    defaults        0 0

dove X è il numero della partizione. Aggiungi una nuova riga simile a questa, a seconda della posizione della tua nuova partizione di swap:

/dev/sdaY         swap        swap    defaults        0 0

Assicurati di utilizzare il numero di partizione corretto. Ora puoi eseguire il passaggio finale nella creazione della partizione di swap. Usa mkswap comando per definire la partizione come partizione di swap.

$ mkswap /dev/sdaY

Il passaggio finale consiste nell'attivare lo scambio utilizzando il comando:

$ swapon -a

La tua nuova partizione di swap è ora online insieme alla partizione di swap esistente in precedenza. Puoi usare il free o top comandi per verificarlo.

Aggiunta di swap a un ambiente disco LVM

Se la configurazione del disco utilizza LVM, modificare lo spazio di swap sarà abbastanza semplice. Anche in questo caso, questo presuppone che lo spazio sia disponibile nel gruppo di volumi in cui si trova il volume di scambio corrente. Per impostazione predefinita, le procedure di installazione di Fedora Linux in un ambiente LVM creano la partizione di swap come volume logico. Questo lo semplifica perché puoi semplicemente aumentare la dimensione del volume di scambio.

Di seguito sono riportati i passaggi necessari per aumentare la quantità di spazio di scambio in un ambiente LVM:

  1. Disattiva tutti gli scambi.

  2. Aumenta la dimensione del volume logico designato per lo scambio.

  3. Configura il volume ridimensionato come spazio di scambio.

  4. Attiva lo scambio.

Per prima cosa, verifica che lo swap esista e sia un volume logico usando lvs comando (elenca il volume logico).

# lvs
  LV     VG                Attr       LSize  Pool   Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home   fedora_studentvm1 -wi-ao----  2.00g                                                      
  pool00 fedora_studentvm1 twi-aotz--  2.00g               8.17   2.93                            
  root   fedora_studentvm1 Vwi-aotz--  2.00g pool00        8.17                                  
  swap   fedora_studentvm1 -wi-ao----  8.00g                                                      
  tmp    fedora_studentvm1 -wi-ao----  5.00g                                                      
  usr    fedora_studentvm1 -wi-ao---- 15.00g                                                      
  var    fedora_studentvm1 -wi-ao---- 10.00g

Puoi vedere che la dimensione dello scambio attuale è 8 GB. In questo caso, vogliamo aggiungere 2 GB a questo volume di scambio. Innanzitutto, interrompi lo scambio esistente. Potrebbe essere necessario terminare i programmi in esecuzione se lo spazio di scambio è in uso.

$ swapoff -a

Ora aumenta la dimensione del volume logico.

# lvextend -L +2G /dev/mapper/fedora_studentvm1-swap
  Size of logical volume fedora_studentvm1/swap changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents).
  Logical volume fedora_studentvm1/swap successfully resized.

Esegui mkswap comando per trasformare l'intera partizione da 10 GB nello spazio di swap.

# mkswap /dev/mapper/fedora_studentvm1-swap
mkswap: /dev/mapper/fedora_studentvm1-swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 10 GiB (10737414144 bytes)
no label, UUID=3cc2bee0-e746-4b66-aa2d-1ea15ef1574a

Riattiva lo scambio.

# swapon -a

Ora verifica che il nuovo spazio di scambio sia presente con il comando list block devices. Anche in questo caso, non è necessario riavviare.

# lsblk 
NAME                                 MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                                    8:0    0   60G  0 disk
|-sda1                                 8:1    0    1G  0 part /boot
`-sda2                                 8:2    0   59G  0 part
  |-fedora_studentvm1-pool00_tmeta   253:0    0    4M  0 lvm  
  | `-fedora_studentvm1-pool00-tpool 253:2    0    2G  0 lvm  
  |   |-fedora_studentvm1-root       253:3    0    2G  0 lvm  /
  |   `-fedora_studentvm1-pool00     253:6    0    2G  0 lvm  
  |-fedora_studentvm1-pool00_tdata   253:1    0    2G  0 lvm  
  | `-fedora_studentvm1-pool00-tpool 253:2    0    2G  0 lvm  
  |   |-fedora_studentvm1-root       253:3    0    2G  0 lvm  /
  |   `-fedora_studentvm1-pool00     253:6    0    2G  0 lvm  
  |-fedora_studentvm1-swap           253:4    0   10G  0 lvm  [SWAP]
  |-fedora_studentvm1-usr            253:5    0   15G  0 lvm  /usr
  |-fedora_studentvm1-home           253:7    0    2G  0 lvm  /home
  |-fedora_studentvm1-var            253:8    0   10G  0 lvm  /var
  `-fedora_studentvm1-tmp            253:9    0    5G  0 lvm  /tmp
sr0

Puoi anche usare swapon -s comando o top , free , o uno qualsiasi dei numerosi altri comandi per verificarlo.

# free
              total        used        free      shared  buff/cache   available
Mem:        4038808      382404     2754072        4152      902332     3404184
Swap:      10485756           0    10485756

Si noti che i diversi comandi visualizzano o richiedono come input il file speciale del dispositivo in forme diverse. Esistono diversi modi per accedere a dispositivi specifici nella directory /dev. Il mio articolo, Gestione dei dispositivi in ​​Linux, include ulteriori informazioni sulla directory /dev e sui suoi contenuti.

Questo articolo è stato originariamente pubblicato a settembre 2018 ed è stato aggiornato con ulteriori informazioni dall'editore.


Linux
  1. Qual è la giusta quantità di spazio di scambio per un moderno sistema Linux?

  2. Guida per principianti allo scambio di gestione dello spazio in Linux

  3. Come aggiungere spazio di swap in Linux

  4. Come aumentare lo spazio di swap su Linux

  5. 3 modi per aumentare lo spazio di scambio su Linux

Un'introduzione a Vivaldi Browser su Linux

Quanto swap dovresti usare in Linux?

Come cancellare la cache della RAM, il buffer e lo spazio di scambio su un sistema Linux

5 comandi per controllare lo spazio di scambio in Linux

Come cancellare la cache di memoria RAM e il buffer e lo spazio di scambio su Linux

Come controllare lo spazio di scambio in Linux