Utilizziamo i RAM Disk per velocizzare il sistema

Un RAM Disk e una porzione di RAM vista dal sistema operativo e dai programmi come un vero e proprio dispositivo di storage permanente

Un RAM Disk (da non confondere con un SSD) è una porzione di RAM vista dal sistema operativo e dai programmi come un vero e proprio dispositivo di storage permanente, ma non lasciatevi ingannare da questa definizione, ovviamente, essendo comunque RAM, di permanente non ha nulla.

E quindi a cosa serve? Immaginate di avere un disco sul quale potete leggere e scrivere qualsiasi dato da qualsiasi programma alla velocità di 3000 MB/s (sì, avete letto bene, proprio tremila) con l’unico inconveniente che al riavvio del sistema tutto ciò che vi è contenuto verrà irrimediabilmente cancellato. Cominciano a balzarvi alla mente alcune possibilità di impiego? Bene, vi lascio ancora un po’ a scervellarvi, perché prima di parlare di questo vediamo un po’ la storia di questo sistema.

 

L’inventore del primo software RAM Disk fu un inglese, Jerry Karlin, che ne 1979 scrisse Silicon Disk System, il cui sviluppo fu poi portato avanti trasformandolo in un software commerciale dalla JK System Research (poi diventata Microcosm Research Ltd.). L’idea era di permettere ai primi microcomputer di utilizzare più RAM di quella alla quale i processori dell’epoca riuscivano ad accedere direttamente. Silicon Disk fu quindi ufficialmente lanciato nel 1980 per il sistema operativo CP/M e, in seguito, ne fu estesa la compatibilità anche a MS-DOS.

Implementazione in Linux

In Linux esistono due tipi di filesystem che fungono da RAM Disk direttamente implementati a livello kernel e quindi utilizzabili senza bisogno di programmi esterni: tmpfs e ramfs.

 

Entrambi questi due filesystem permettono di montare parte della memoria RAM come se fosse un hard disk, le prestazioni dei due sono le stesse, le differenze stanno nel loro comportamento quando raggiungono il limite di spazio che gli abbiamo impostato in fase di mount: tmpfs non supererà mai la dimensione che gli abbiamo impostato, quando è pieno restituirà l’errore “No space left on device” senza però allocare altra RAM. Ramfs, invece, non tiene conto del limite impostatogli in fase di mount e alloca RAM fino al raggiungimento del limite fisico del sistema che a quel punto sarà praticamente inutilizzabile. L’altra grossa differenza è l’uso dello swap, tmpfs può utilizzarlo, mentre ramfs no.

 

Gli svantaggi sono i medesimi per entrambi i filesystem, allo spegnimento o al crash del sistema tutti i dati presenti nella partizione andranno persi in quanto memorizzati nella RAM che ovviamente è volatile.

 

Vediamo quindi come creare un RAM Disk nella pratica:

Premesso che sulla maggior parte delle distribuzioni Linux esiste già un RAM Disk di dimensione pari alla metà della RAM installata sul server e montato in /dev/shm ecco come possiamo crearne di nuovi oppure ridimensionare /dev/shm:

 

Per ridimensionare il già esistente RAM Disk possiamo usare il seguente comando: mount -o remount,size=1G /dev/shm

 

Creare un nuovo RAM Disk basato su tmpfs:

Per prima cosa creiamo una directory dove montare il RAM Disk: mkdir /mnt/ramdisk

 

A questo punto montiamo effettivamente il Ram Disk nella cartella appena creata: mount -t tmpfs –o size=128M tmpfs /mnt/ramdisk

 

Creare un nuovo RAM Disk basato su  ramfs:

Per prima cosa creiamo una directory dove montare il RAM Disk: mkdir /mnt/ramdisk

 

A questo punto montiamo effettivamente il Ram Disk nella cartella appena creata: mount -t ramfs –o size=128M ramfs /mnt/ramdisk

 

Ovviamente il parametro size e il punto di mount potete deciderli voi e non dimenticatevi di aggiungere in fstab la riga relativa al nuovo RAM Disk se volete che sia nuovamente creato al riavvio del sistema.

Per assicurarvi di aver fatto tutto correttamente lanciate il comando df -h che vi farà vedere la lista di tutte le partizioni montate sul sistema.

Implementazione su Windows

Purtroppo sui sistemi operativi Microsoft creare un RAM Disk non è così immediato come su Linux, in quanto non esiste un filesystem nativo incluso nel sistema operativo, tuttavia esistono numerosi programmi creati con questo scopo, sia free che a pagamento.

 

Un ottimo programma free è RAMDisk sviluppato da DATARAM, supporta RAM Disk fino a 32GB previa registrazione gratuita e 4GB senza registrazione, è compatibile con le versioni di Windows da XP in poi (Windows 7 e Windows Server 2008 anche a 64bit compresi), si ha la possibilità di scegliere il file system del RAMDisk tra FAT16, FAT32 oppure non formattato e permette di salvare un immagine del RAMDisk su disco fisico allo spegnimento del server e volendo ogni tot secondi e la possibilità di ripristinare questa immagine all’avvio del server.

 

Se invece tutto ciò non vi basta esiste un altro programma, RAMDisk Enterprise che per pochi dollari oltre alle caratteristiche sopracitate vi garantisce la creazione di RAM Disk fino a 64GB, una funzione di autoresizing e tuning della quantità di RAM per sfruttare più spazio disponibile possibile e il supporto a NTFS e NTFS col supporto alla compressione dei dati per risparmiare spazio.

 

Anche se questi programmi danno la possibilità di salvare un immagine del contenuto del RAM Disk prima dello spegnimenti del server oppure ad intervalli regolari bisogna comunque tener presente che questo non è assolutamente un sistema infallibile, la probabilità di perdita di dati in caso di crash del sistema o di mancata alimentazione è molto alta, perciò fatevi due conti prima di pensare di essere in una botte di ferro, giusto per non rimanere spiacevolmente scottati.

Possibili utilizzi

Sono sicuro che già qualcosa vi sarà venuta in mente, ecco comunque alcuni degli utilizzi di un RAM Disk che possono davvero contribuire a velocizzare un server sotto stress.

 

MySQL quando deve effettuare alcune query complesse, o quando entrano in gioco campi di tipo TEXT, è costretto a creare delle tabelle temporanee su disco al posto che su RAM il che è molto più lento, se noi gli impostiamo come PATH dove andare a scrivere queste tabelle temporanee un RAM Disk sarà come se non venissero mai create tabelle su disco, ma siano sempre create in RAM!

 

Per fare ciò aggiungiamo o modifichiamo questo settaggio nel file di configurazione di mysql:

tmpdir = /dev/shm

 

Ovviamente il PATH da impostare è quello del percorso del vostro RAMDisk; attenzione però: potreste incontrare qualche problema nell’eseguire backup/restore o altre operazioni di manutenzione sui database se il RAMDisk è di dimensioni inferiori alla grandezza della tabella più grande contenuta nel database, in quanto MySQL potrebbe creare alcune tabelle temporanee grosse quanto l’intera tabella.

 

Un’altra cosa che possiamo andare a scrivere sul RAM Disk sono le sessioni di PHP, per fare questo dobbiamo aggiungere o modificare questa riga nel file di configurazione di PHP:

session.save_path = /dev/shm

 

Anche la cache dei vostri applicativi web, se basata su files, può trarre giovamento dall’essere scritta in un RAM Disk.

 

Infine, se i files del vostro sito non cambiano frequentemente, potreste pensare di metterlo interamente in un RAM Disk in modo tale che tutti i files che lo compongono vengano sempre serviti direttamente dalla RAM. Per assicurarvi di non subire perdite di dati dovete innanzitutto sapere esattamente se e quando vengono cambiati dei files sul vostro sito (pensate ad esempio ad un forum con gli allegati abilitati o l’upload degli avatar, in questo caso dovreste predisporre un cronjob che ogni tot minuti tramite rsync copi i nuovi/modificati files su un disco fisico), in più dovrete creare uno script che all’avvio del sistema copi l’intero sito nel RAM Disk prima di avviare il webserver (potete usare la parola chiave “@reboot” in cron), inutile dire che l’intero sistema va prima testato e testato ancora in locale simulando anche crash del sistema, ah forse dimenticavo, va prima testato in locale.