La memoria virtuale è una di quelle cose alla base dei sistemi operativi moderni, ma di solito non ci pensi davvero a meno che tu non abbia un problema. Le distribuzioni Linux ti chiedono di configurare il tuo spazio di memoria virtuale (scambia le partizioni) durante l'installazione, ma la maggior parte dei principianti non è consapevole di quanto sia utile.
Ecco tutto ciò che devi sapere sulla memoria virtuale su Linux.
Che cos'è la memoria virtuale?
La memoria virtuale è un modo per rappresentare la tua memoria che è astratta dalla memoria fisica sulla tua macchina. Utilizza sia la RAM che lo spazio di archiviazione, sia su un disco rigido tradizionale che su un SSD.
In Linux, questo viene fatto a livello di kernel e hardware. La CPU ha un componente hardware chiamato Memory Management Unit (MMU) che traduce gli indirizzi di memoria fisica in quelli virtuali. Questi indirizzi sono indipendenti da dove risiedono fisicamente sulla macchina. Questi spazi di indirizzi sono noti come "pagine" e potrebbero trovarsi nella RAM o sul disco rigido o SSD. Il sistema operativo vede questi indirizzi come un grande pool di memoria, noto come "spazio degli indirizzi".
La memoria virtuale sfrutta il fatto che non tutta la memoria utilizzata in teoria viene utilizzata continuamente. I programmi in memoria sono suddivisi in pagine e le parti che il kernel ritiene non necessarie vengono "scambiate" o spostate sul disco rigido. Quando sono necessari, possono essere "scambiati" o riportati nella RAM.
Lo spazio utilizzato per la memoria virtuale su un'unità è noto come "archivio di backup" o "spazio di scambio". Nel mondo Windows, lo è di solito implementato come un file, noto come "file di scambio". È anche possibile farlo in Linux, ma è molto più comune a utilizzare una partizione del disco dedicata.
I file di scambio su Linux sono solitamente riservati a sistemi minimi o incorporati ed è comune che questi ultimi vengano eseguiti completamente senza memoria virtuale perché i sistemi operativi incorporati devono essere piccoli.
Il risultato della memoria virtuale è che è possibile eseguire programmi di grandi dimensioni utilizzando più memoria della RAM fisica la tua macchina, simile a come una carta di credito ti consente di fare grandi acquisti per più soldi di quelli che hai nella tua banca account. Come una carta di credito, la memoria virtuale è utile quando ne hai bisogno ma non vuoi prolungarne l'utilizzo.
La memoria virtuale consente inoltre agli sviluppatori di creare applicazioni senza dover sapere come è organizzata la memoria di un computer.
Il principale svantaggio storicamente della memoria virtuale è stato che i dischi rigidi sono stati più lenti della RAM. Se una macchina non ha abbastanza RAM, il sistema può continuare a scambiare pagine dentro e fuori all'infinito, un processo noto come "thrashing". Questo è meno di un problema sui PC moderni con più RAM e SSD più veloci che sostituiscono i dischi rigidi meccanici, ma è comunque qualcosa di cui essere consapevoli di.
Partizioni di scambio Linux
Come accennato in precedenza, il metodo usuale per configurare la memoria virtuale su Linux è utilizzare una partizione del disco dedicata. L'utilità di installazione esaminerà l'hardware e proporrà uno schema di partizionamento che include una partizione di scambio.
È inoltre possibile aggiungere partizioni di swap dopo l'installazione. Se vuoi aggiungere una nuova partizione a un'unità esistente, dovrai farlo utilizzare uno strumento di partizionamento non distruttivo come GParted. Assicurati di aver selezionato "Linux swap" come filesystem per la tua partizione.
Eseguire il backup dei dati importanti prima di ripartizionare l'unità.
Dopo aver creato la partizione, utilizzare il comando mkswap per formattare la partizione.
sudo mkswap /dev/sdX
Ora dovrai modificare il tuo /etc/fstab come root per aggiungere la partizione di swap. Questa riga, aggiunta al file, imposterà una partizione di swap da montare all'avvio:
/dev/sdX nessuno scambia i valori predefiniti 0 0
Ora usa il scambiare comando per attivare il tuo nuovo spazio di swap, dove sdX è il nome della tua partizione di swap:
sudo swapon /dev/sdX
Utilizzo dei file di scambio su Linux
È facile impostare un file di scambio in Linux usando la riga di comando. Potresti volerlo fare se non vuoi preoccuparti di ripartizionare l'unità o modificarla /etc/fstab. Un metodo è quello di utilizzare falloccare:
Ad esempio, per creare un file di scambio da 2 GB:
sudo fallocate -l 2G /percorso/a/file di scambio
In alternativa, puoi utilizzare il comando dd per creare il file di scambio.
sudo dd Se=/dev/zero di=/path/in/scambia file bs=1024 contare=2048
Assicurati di utilizzare il comando dd correttamente, poiché l'errore di infile e outfile può causare la perdita di dati. fallocate è il metodo preferito per questo motivo.
Il /dev/zero dispositivo è un dispositivo speciale che emette "0". Quello che fa questo comando dd è creare un file di blocco vuoto da due gigabyte usando blocchi da 1024 kilobyte adatti per l'uso come spazio di scambio.
È quindi possibile utilizzare il mkswap e scambiare comandi con un file di scambio come faresti con una partizione di scambio:
sudo mkswap /percorso/di/swapfile
sudo swapon /percorso/a/file di scambio
Potresti chiederti quando dovresti usare un file di scambio o una partizione dedicata per il tuo spazio di scambio. La scelta è facile: nella maggior parte dei casi, dovresti usare una partizione. Questa è la scelta migliore per un desktop o un server Linux. Lo schema di partizione suggerito dal programma di installazione è generalmente adeguato su un desktop Linux a utente singolo.
Potresti voler usare un file di scambio se stai eseguendo Linux in una macchina virtuale, su un piccolo sistema embedded, o semplicemente non vuoi ripartizionare il tuo sistema Linux esistente.
Quanto spazio di scambio?
Per molti anni, il consiglio standard per quanto spazio di swap è necessario è il doppio della RAM fisica. Con le grandi unità e le quantità di memoria fornite anche dai PC più economici, questa regola potrebbe essere messa in discussione.
Su molti sistemi, se selezioni top o htop, potresti anche notare che il tuo spazio di swap non viene nemmeno utilizzato se imposti il tuo sistema in questo modo.
Tuttavia, il doppio della memoria fisica è un buon punto di partenza e una polizza assicurativa se si richiedono maggiori richieste di memoria. È possibile apportare modifiche al sistema secondo necessità. Se il sistema utilizza tutta la RAM, il computer potrebbe riscontrare problemi di prestazioni quando si utilizza la memoria virtuale.
Il computer può continuare a scambiare in entrata e in uscita, un processo noto come thrashing, facendolo sembrare non rispondente. Se hai ancora un disco rigido meccanico, spesso puoi sentirlo accedere costantemente.
Questo è molto meno problematico di questi tempi poiché la quantità di RAM anche sui PC più economici è più che adeguata, inoltre la velocità degli SSD è molto più veloce rispetto ai vecchi dischi rigidi. È ancora qualcosa di cui dovresti essere consapevole.
Il modo più semplice per risolvere questo problema è semplicemente aggiungere più RAM alla tua macchina. Se ciò non è possibile, potresti provare a regolare lo "swappiness" del kernel Linux.
Il numero di swappiness determina quanto il kernel si immerge nella memoria virtuale. Va da 0 a 100. Impostandolo a 0 significa che Linux non si scambierà affatto, mentre a 100 si scambierà ad ogni occasione. L'impostazione predefinita sulla maggior parte dei sistemi è 60.
Per modificare temporaneamente lo swappiness, utilizzare il comando sysctl:
sudo sysctl vm.swappiness=20
Il "20" in quel comando sarà il numero di swappiness fino al riavvio. Per modificarlo in modo permanente, modificare il /etc/sysctl.conf file come root e posiziona la riga "vm.swappiness=[swappiness number]", dove "[swappiness number]" è il numero di swappiness che desideri. Questo sarà un ripiego fino a quando non potrai installare più RAM.
La memoria virtuale mantiene il tuo sistema Linux in esecuzione senza intoppi
La memoria virtuale è un componente dei sistemi operativi moderni, incluso Linux, che consente al computer di funzionare senza problemi. Puoi usare un file di scambio, ma il metodo usuale è una partizione dedicata. Non devi pensarci tanto, ma le partizioni di scambio di Linux e i file di scambio sono facili da configurare e risolvere.
Molti di questi consigli sono applicabili anche ad altri sistemi, incluso Windows, anche se i metodi per impostare la memoria virtuale sono diversi.