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 /RAMDISKLa creazione di un Ramdisk dinamico tramite RAMFS è il seguente:
# MKDIR /MEDIA /RAMDISKIn 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 /RAMDISKLa creazione di un Ramdisk dinamico tramite TMPFS con una dimensione fissa di 200 m di memoria fisica è la seguente:
# MKDIR /MEDIA /RAMDISKIn 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):
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-ConfigCome 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.
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.
L'autore desidera ringraziare Axel Beckert e Gerold Rupprecht per il loro supporto mentre prepara questo articolo.