Ottimizzazione dell'utilizzo della memoria Linux

Ottimizzazione dell'utilizzo della memoria Linux
Nella prima parte di questa serie, abbiamo dato un'occhiata più da vicino allo spazio di swap e la seconda parte ha trattato strumenti e comandi per gestire la memoria. Ora discuteremo di vari parametri e strategie per ottimizzare la memoria e il suo utilizzo in generale. Ciò 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 si chiama memoria virtuale ed è costituito sia dalla memoria fisica che nello spazio di scambio. La disponibilità della memoria fisica dipende dall'hardware integrato nella macchina e dalla memoria che il processore può affrontare, 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 che sono supportati da quella scheda madre e i moduli di memoria specifici che sono collegati agli slot di memoria sulla scheda madre. Un modo per massimizzare la memoria disponibile del sistema è utilizzare moduli di memoria simili che hanno la dimensione più grande possibile. Il secondo modo è utilizzare la memoria di swap come già spiegato nella prima parte.

Accesso della memoria

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

Creazione di un Ramdisk

Un Ramdisk è un blocco di memoria su cui il sistema operativo gestisce come un dispositivo fisico su cui archiviare i dati: un harddisk che è 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 è allocata in base al suo utilizzo (vero per entrambi i metodi). Finché non si archivia i dati su di esso, la dimensione del Ramdisk è 0.

La creazione di un Ramdisk dinamico tramite TMPFS è il seguente:

# MKDIR /MEDIA /RAMDISK
# mount -t tmpfs Nessuno /multimediale /ramdisk

La creazione di un Ramdisk dinamico tramite RAMFS è il seguente:

# MKDIR /MEDIA /RAMDISK
# Mount -t Ramfs Ramfs /Media /Ramdisk

In secondo luogo, usando TMPFS e, a meno che non specifichi esplicitamente la dimensione del Ramdisk è limitata al 50% della memoria fisica. Al contrario, un Ramdisk basato su Ramfs non ha una 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 /multimediale /ramdisk

In terzo luogo, entrambi i metodi gestiscono lo scambio in un modo diverso. Nel caso in cui il sistema raggiunga il limite di memoria di un Ramdisk basato su TMPFS, vengono scambiati i dati del Ramdisk. Questo svende 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 scambiano pagine di memoria rimanenti sul disco.

Negli esempi sopra abbiamo usato /Media/Ramdisk Come un punto di montaggio. Per quanto riguarda i dati regolari l'unica parte del file system Linux che si consiglia di essere utilizzato su un Ramdisk è /TMP. Questa directory memorizza solo dati temporanei, che non persistono. La creazione di un Ramdisk permanente che memorizza il file system /TMP richiede una voce aggiuntiva nel file /etc/fstab Come segue (basato su Ramfs):

RAMFS /TMP RAMFS Impostazioni 0 0

La prossima volta che si avvia il sistema Linux, il Ramdisk verrà abilitato, automaticamente.

Usando zram

Zram significa swap virtuale compresso in RAM e crea un dispositivo a blocchi compressi direttamente nella memoria fisica. Zram entra in azione (usa) non appena non ci sono più pagine di memoria fisica disponibili sul sistema. Quindi, il kernel Linux cerca di archiviare le pagine come dati compressi sul dispositivo Zram.

Attualmente, non ci sono pacchetti disponibili per Debian GNU/Linux ma Ubuntu. Si chiama Zram-config. Installa il pacchetto e imposta un dispositivo Zram semplicemente avviando il servizio SystemD come segue:

# SystemCtrl Start 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 assegnata per Zram (vedi Figura 1). Attualmente, non c'è modo di specificare un valore diverso per lo zram da allocare.

Per vedere maggiori dettagli sulla partizione di swap compresso, utilizzare 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 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 - su 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 scambio di memoria di runtime, invece di far cadere le pagine di memoria dalla cache della pagina del 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'uso 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 codice binario considera invece l'utilizzo di un'alternativa e una libreria C molto più piccola. Ad esempio, ci sono dietlibc [1], UCLIBC [2] e musl lib c [3]. Il sito Web di Musl Lib C dello sviluppatore contiene un ampio confronto [4] riguardo a queste librerie in termini di più piccolo programma statico C possibile, un confronto di funzionalità e ambienti di build secondo e supportati hardware.

Come utente potresti non dover compilare i tuoi programmi. Prendi in considerazione la ricerca di programmi più piccoli e diversi quadri che richiedono meno risorse. Ad esempio, è possibile utilizzare l'ambiente desktop XFCE anziché KDE o GNOME.

Conclusione

Esistono alcune opzioni per cambiare l'utilizzo della memoria in meglio. Questo varia da Swap alla compressione in base a Zram e alla configurazione di un Ramdisk o alla selezione di un framework diverso.

Collegamenti e riferimenti

  • [1] Dietlibc, https: // www.fefe.de/dietlibc/
  • [2] UCLIBC, https: // UCLIBC.org/
  • [3] Musl Lib C, http: // www.Musl-Libc.org/
  • [4] Confronto delle librerie C, http: // www.etalabs.net/confront_libcs.html

Serie di gestione della memoria Linux

  • Parte 1: Gestione della memoria del kernel Linux: spazio di scambio
  • Parte 2: comandi per gestire la memoria di Linux
  • Parte 3: ottimizzazione dell'utilizzo della memoria Linux

Riconoscimenti

L'autore desidera ringraziare Axel Beckert e Gerold Rupprecht per il loro supporto mentre prepara questo articolo.