La prima cosa che si nota quando si acquista un router è il drastico calo di memoria RAM disponibile appena si usa un drive USB esterno. Sui forum di discussione di Internet è stato spesso discusso questo problema, soprattutto su quei router che hanno almeno 512 MB di RAM. Questo problema viene visto come un difetto del router, in realtà, come vedremo in seguito, è una caratteristica peculiare di tutti i router che possiedono un sistema operativo basato su Linux.
Molti utenti sono abituati alla gestione della memoria in Microsoft Windows. Microsoft Windows riserva una parte minimale della memoria
disponibile per la cache delle unità disco, tale quantità purtroppo non aumenta con l'aumentare delle operazioni di Input/Output sul disco, pertanto quegli
utenti che hanno ad esempio 32 GB di RAM, si vedono tantissima memoria RAM disponibile non utilizzata. Linux non presenta questa anomalia, Linux infatti
utilizza tutta la RAM disponibile come memoria cache del disco al fine di aumentare le prestazioni di Input/Output sul disco. La RAM utilizzata dal router come
memoria cache del disco viene in seguito resa disponibile per le applicazioni e per i servizi quando questi ultimi la richiedono. Questa gestione dinamica della
RAM rende tantissimi router molto veloci, poiché una parte dei dati viene conservata nella memoria RAM durante le operazioni di Input/Output.
Così come non esiste un modo per aumentare la quantità di RAM utilizzata come memoria cache del disco in Microsoft Windows, nella stessa maniera in Linux è
impossibile ridurre la quantità di RAM utilizzata come memoria cache del disco. E' invece possibile in Linux liberare la memoria cache del disco con un comando
apposito, che vedremo in seguito. Questa operazione è decisamente sconsigliata, poiché è un'operazione semplicemente temporanea, nulla toglie a Linux la
possibilità di occupare nuovamente la memoria disponibile per usarla come memoria cache del disco per le operazioni di Input/Output. La soluzione definitiva
sarebbe quella di rimuovere il disco USB esterno, in questa maniera Linux non avrebbe più bisogno di riservare buona parte della memoria disponibile per usarla
come memoria cache del disco per le operazioni di Input/Output, mancando l'unità disco. Questo ovviamente impedisce all'utente di usare uno storage esterno,
l'unica possibilità disponibile in un router - un router non possiede uno storage interno.
Per liberare la memoria cache del disco riservata alle operazioni di Input/Output, si usa il comando Linux "sync; echo 3 > /proc/sys/vm/drop_caches",
questo comando è formato da due diverse istruzioni. La prima istruzione permette di sincronizzare i dati presenti ancora nei buffer del disco e di svuotare il
contenuto della memoria cache del disco. La seconda istruzione permette di liberare tutti i buffer occupati e quindi di liberare la memoria cache del disco
occupata. Questo permette di recuperare tutta la memoria RAM precedentemente occupata dalla memoria cache del disco.
Come detto prima è sconsigliato eseguire frequentemente queste operazioni, ma ancora di più è sconsigliato eseguirle durante le operazioni di Input/Output,
soprattutto se effettuate dai servizi/daemon di Linux - una soluzione sarebbe quella di fermare i servizi di Linux avviati dall'utente, eseguire le suddette
operazioni e solo dopo riavviare i servizi precedentemente fermati. L'esecuzione del suddetto comando Linux durante le operazioni di Input/Output potrebbe
causare il danneggiamento dei dati, un malfunzionamento del router o peggio il riavvio del router stesso.
Per avere un'idea della memoria cache liberata, si usa il comando Linux "free", prima e dopo l'esecuzione del suddetto comando Linux per liberare la
memoria cache. Un esempio del comando "free" eseguito prima e dopo è il seguente - da notare le colonne "used", "free" e "cached":
total used free shared buffers cached Mem: 440420 411960 28460 828 6584 213140 -/+ buffers/cache: 192236 248184 Swap: 524284 46080 478204 total used free shared buffers cached Mem: 440420 194904 245516 828 136 10892 -/+ buffers/cache: 183876 256544 Swap: 524284 46080 478204
Per liberare la memoria cache del disco, è possibile usare uno script Bash appositamente progettato per scrivere su un file .LOG all'interno del router in modo tale che l'utente possa sapere quando è stata effettuata l'operazione di svuotamento della memoria cache e quanta RAM è stata liberata - questo script può essere usato tramite uno schedule effettuato con il "crontab" di Linux. Esempio di script Bash potrebbe essere:
#!/bin/sh CURRENTDATE="$(date +%Y%m%d_%H%M%S)" NEWLOGFILE="/opt/var/log/drop_caches.log" echo $CURRENTDATE echo $NEWLOGFILE echo "-----------------------------------------" >> $NEWLOGFILE echo $CURRENTDATE >> $NEWLOGFILE echo " " >> $NEWLOGFILE free >> $NEWLOGFILE echo " " >> $NEWLOGFILE sync sync echo 3 > /proc/sys/vm/drop_caches sync free >> $NEWLOGFILE echo "-----------------------------------------" >> $NEWLOGFILE