Il device shm
All'interno della directory /dev è possibile trovare un device chiamato /shm. Di che cosa si tratta?
Questo particolare device è stato introdotto per la prima volta nel ramo 2.4.x del kernel e implementa il concetto di memoria condivisa (SHared Memory).
Si tratta di un modo per la condivisione di alcune risorse o variabili tra più programmi, queste infatti potrebbero essere create in questo dispositivo e se consentito un altro programma potrebbe accederci facilmente e sopratutto in maniera molto più veloce rispetto ad una lettura da hard disk.
Questo device appare come un qualunque altro dispositivo ma in pratica si tratta di una cartella che utilizza il filesystem tmpfs. Qualunque file creato all'interno di questo device esiste solo in memoria condivisa ovvero nella RAM, ma nulla viene scritto su disco. Per questo motivo al riavvio della macchina il device è automaticamente svuotato. Con questo sistema un programma può riempire una porzione di memoria alla quale un altro processo può accedere se gli è permesso direttamente in RAM. Il risultato è un sensibile aumento di prestazioni.
Quindi ad esempio se spostiamo un qualsiasi file all'interno
$ cp -f ~/file /dev/shm
abbiamo semplicemente spostato il file in RAM.
Se devo accedere ad un file in lettura o scrittura molte volte, averlo in RAM è un vantaggio enorme, dato che le prestazioni aumenterebbero notevolmente.
Di default la dimensione di questo filesystem è impostata su metà della RAM disponibile al sistema ma può ingrandirsi quanto vogliamo. Per farlo è sufficiente rimontare il device shm come si farebbe per un qualunque altro dispositivo semplicemente utilizzando il comando mount
# mount -o remount,size=2G /dev/shm
Questo device tuttavia è stato introdotto per compatibilità con la memoria condivisa POSIX e non è del tutto consigliabile farne un uso eccessivo, nel senso che sebbene questo sia già pronto all'uso, sarebbe consigliabile creare e montare direttamente direttamente delle directory usando il filesystem tmpfs.
Volendo creare con il filesystem tmpfs una directory persistente montata in automatico ad ogni avvio della macchina possiamo utilizzare sempre il comando mount
$ mkdir -p ~/cache
$ mount -t tmpfs -o size=1G, mode=700 tmpfs ~/cache
Usando il mode=700 si limita l'uso di questa risorsa all'utente root.
Un altro campo di utilizzo è sicuramente la creazione di una cache su un server che ospita un sito internet. L'aumento di prestazioni può fare tantissima differenza anche su macchine virtuali come VMware.
Ad esempio per creare la cache per il nostro sito possiamo semplicemente utilizzare i seguenti comandi
# cd /var/www/sito/
# mkdir -p ./tmp
# mount -t tmpfs -o size=5G,nr_inodes=5k,mode=744 tmpfs /var/www/sito/tmp
Se abbiamo una macchina dotata di più di 2G di RAM con molte macchine virtuali attive questo spesso fa una enorme differenza in termini di prestazioni. Per rendere queste modifiche disponibili ad ogni riavvio della macchina possiamo impostarle all'interno di /etc/fstab aggiungendo questa riga
tmpfs /var/www/sito/tmp tmpfs size=5G,nr_inodes=5k,mode=744 0 0





