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:
-
Disattiva lo spazio di scambio esistente.
-
Crea una nuova partizione di swap della dimensione desiderata.
-
Rileggi la tabella delle partizioni.
-
Configura la partizione come spazio di scambio.
-
Aggiungi la nuova partizione/etc/fstab.
-
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:
-
Disattiva tutti gli scambi.
-
Aumenta la dimensione del volume logico designato per lo scambio.
-
Configura il volume ridimensionato come spazio di scambio.
-
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.