Memoria

Ottimizzazione dell'utilizzo della memoria di Linux

Ottimizzazione dell'utilizzo della memoria di Linux
Nella prima parte di questa serie, abbiamo dato un'occhiata più da vicino allo spazio Swap e la seconda ha trattato strumenti e comandi per gestire la memoria. Ora discuteremo vari parametri e strategie per ottimizzare la memoria e il suo utilizzo in generale. Questo copre la quantità di memoria, l'accelerazione dell'accesso e la strategia di utilizzo interno.

Quantità di memoria

Come già discusso nella prima parte, l'intera memoria è chiamata memoria virtuale e consiste sia di memoria fisica che di spazio di swap. La disponibilità della memoria fisica dipende dall'hardware integrato nella macchina e dalla quantità di memoria che il processore può indirizzare, in realtà. Ad esempio, i sistemi operativi a 32 bit hanno un limite di 4G di memoria, solo (2^32 bit), mentre i sistemi operativi basati su 64 bit consentono teoricamente fino a 16 EB (2^64 bit).

Per essere precisi, la limitazione è la scheda madre con il processore stesso, i moduli di memoria supportati da quella scheda madre e i moduli di memoria specifici che sono inseriti negli slot di memoria sulla scheda madre. Un modo per massimizzare la memoria disponibile del sistema è utilizzare moduli di memoria simili che abbiano le dimensioni più grandi possibili. Il secondo modo è usare la memoria di swap come già spiegato nella prima parte.

Accesso alla memoria

Successivamente, viene preso in considerazione un miglioramento della velocità di accesso della memoria. Inizialmente, il limite fisico è dato dal modulo di memoria stesso. Non puoi andare al di sotto dei confini fisici dell'hardware. In secondo luogo, un ramdisk e in terzo luogo l'utilizzo di zRAM può accelerare l'accesso alla memoria. Discuteremo queste due tecnologie in modo più dettagliato.

Creazione di un ramdisk

Un ramdisk è un blocco di memoria che il sistema operativo gestisce come un dispositivo fisico su cui archiviare i dati, un disco rigido interamente mantenuto in memoria. Questo dispositivo temporaneo esiste non appena il sistema si avvia e abilita il ramdisk e il sistema disabilita il ramdisk o si spegne. Tieni presente che i dati archiviati su un tale ramdisk vengono persi dopo l'arresto della macchina.

È possibile creare un ramdisk dinamico tramite il file system tmpfs e tramite il file system ramfs. Entrambe le tecnologie differiscono significativamente l'una dall'altra. Innanzitutto, dinamico significa che la memoria per il ramdisk viene allocata in base al suo utilizzo (vero per entrambi i metodi). Finché non memorizzi dati su di esso, la dimensione del ramdisk è 0.

La creazione di un ramdisk dinamico tramite tmpfs è la seguente:

# mkdir /media/ramdisk
# mount -t tmpfs none /media/ramdisk

La creazione di un ramdisk dinamico tramite ramfs è la seguente:

# mkdir /media/ramdisk
# mount -t ramfs ramfs /media/ramdisk

In secondo luogo, utilizzando tmpfs e, a meno che non sia specificato esplicitamente, la dimensione del ramdisk è limitata al 50% della memoria fisica. Al contrario, un ramdisk basato su ramfs non ha tale limitazione.

La creazione di un ramdisk dinamico tramite tmpfs con una dimensione relativa del 20% della memoria fisica è la seguente:

# mkdir /media/ramdisk
# mount -t tmpfs -o size=20% nessuno /media/ramdisk

La creazione di un ramdisk dinamico tramite tmpfs con una dimensione fissa di 200 M di memoria fisica è la seguente:

# mkdir /media/ramdisk
# mount -t tmpfs -o size=200M nessuno /media/ramdisk

Terzo, entrambi i metodi gestiscono lo scambio in modo diverso. Nel caso in cui il sistema raggiunga il limite di memoria di un ramdisk basato su tmpfs, i dati dal ramdisk vengono scambiati. Questo sventa l'idea di un accesso rapido. D'altra parte, il sistema operativo dà la priorità sia al contenuto che alle pagine di memoria richieste di un ramdisk basato su ramfs, lo mantiene in memoria e scambia le pagine di memoria rimanenti su disco.

Negli esempi sopra abbiamo usato /media/ramdisk come punto di montaggio. Per quanto riguarda i dati regolari, l'unica parte del file system Linux che si consiglia di utilizzare su un ramdisk è /tmp. Questa directory memorizza solo dati temporanei che non persistono. La creazione di un ramdisk permanente che memorizzi il file system /tmp richiede una voce aggiuntiva nel file /etc/fstab come segue (basato su ramfs):

ramfs   /tmp     ramfs   valori predefiniti 0  0

La prossima volta che avvii il tuo sistema Linux, il ramdisk sarà abilitato, automaticamente.

Utilizzo di zRAM

zRAM significa Virtual Swap Compressed in RAM, e crea un dispositivo a blocchi compresso direttamente nella memoria fisica. zRAM entra in azione (uso) non appena non ci sono più pagine di memoria fisica disponibili sul sistema. Quindi, il kernel Linux cerca di memorizzare le pagine come dati compressi sul dispositivo zRAM.

Attualmente, non è disponibile alcun pacchetto per Debian GNU/Linux tranne Ubuntu. Si chiama zram-config. Installa il pacchetto e configura un dispositivo zRAM semplicemente avviando il servizio systemd corrispondente come segue:

# systemctrl avvia zram-config

Come dato dall'output di swapon -s, il dispositivo è attivo come partizione di Swap aggiuntiva. Automaticamente, una dimensione del 50% della memoria viene allocata per zRAM (vedi figura 1). Attualmente, non è possibile specificare un valore diverso per la zRAM da allocare.

Per vedere maggiori dettagli sulla partizione di swap compressa usa il comando zramctl. La Figura 2 mostra il nome del dispositivo, l'algoritmo di compressione (LZO), la dimensione della partizione di swap, la dimensione dei dati sul disco e la sua dimensione compressa, nonché il numero di flussi di compressione (valore predefinito: 1).

Strategia di utilizzo

Successivamente, ci concentriamo sulla strategia di utilizzo della memoria. Ci sono alcuni parametri per influenzare il comportamento dell'utilizzo e della distribuzione della memoria. Ciò include la dimensione delle pagine di memoria: sui sistemi a 64 bit è 4M. Successivamente, il parametro swappiness gioca un ruolo. Come già spiegato nella prima parte questo parametro controlla il peso relativo dato allo swapping della memoria di runtime, invece di eliminare le pagine di memoria dalla cache delle pagine di sistema. Inoltre, non dovremmo dimenticare sia la memorizzazione nella cache che l'allineamento della pagina di memoria.

Usa programmi che richiedono meno memoria

Ultimo ma non meno importante, l'utilizzo della memoria dipende dai programmi stessi. La maggior parte di essi è collegata alla libreria C predefinita (LibC standard). Come sviluppatore, per ridurre al minimo il tuo codice binario considera l'utilizzo di una libreria C alternativa e molto più piccola. Ad esempio, ci sono dietlibc [1], uClibc [2] e musl lib C [3]. Il sito Web dello sviluppatore di musl lib C contiene un ampio confronto [4] relativo a queste librerie in termini del più piccolo programma C statico possibile, un confronto delle funzionalità, nonché gli ambienti di compilazione corrispondenti e le architetture hardware supportate.

Come utente potresti non dover compilare i tuoi programmi. Considera la ricerca di programmi più piccoli e strutture diverse che richiedono meno risorse. Ad esempio puoi usare l'ambiente desktop XFCE invece di KDE o GNOME.

Conclusione

Esistono alcune opzioni per modificare in meglio l'utilizzo della memoria. Questo va dallo Swap alla compressione basata su zRAM, nonché l'impostazione di un ramdisk o la selezione di un framework diverso.

Link e riferimenti

Serie Linux per la gestione della memoria

Ringraziamenti

L'autore desidera ringraziare Axel Beckert e Gerold Rupprecht per il loro supporto durante la preparazione di questo articolo.

Le migliori distribuzioni Linux per il gioco nel 2021
Il sistema operativo Linux ha fatto molta strada dal suo aspetto originale, semplice e basato su server. Questo sistema operativo è notevolmente migli...
Come acquisire e riprodurre in streaming la tua sessione di gioco su Linux
In passato, giocare era considerato solo un hobby, ma con il tempo l'industria dei giochi ha visto una crescita enorme in termini di tecnologia e nume...
I migliori giochi da giocare con il tracciamento delle mani
Oculus Quest ha recentemente introdotto la grande idea del tracciamento manuale senza controller. Con un numero sempre crescente di giochi e attività ...