Ottimizzare la cache del filesystem su Linux con fscache e caching dei metadati

fscache non è un servizio che si accende e si configura da solo: è un framework del kernel che ha bisogno di un demone userspace, cachefilesd, per gestire davvero lo storage della cache su disco. Il file di configurazione giusto è /etc/cachefilesd.conf, non un ipotetico /etc/fscache.conf che in molte distribuzioni non esiste nemmeno — un dettaglio che vale la pena verificare prima di cercarlo a vuoto sul proprio sistema.
Il caso d'uso reale di fscache è specifico: filesystem di rete come NFS o AFS, dove ogni accesso a un file altrimenti richiederebbe un round-trip di rete. Con fscache attivo, i dati letti vengono mantenuti in una cache locale su disco, e le richieste successive per lo stesso file arrivano dalla cache locale invece che dal server remoto — utile soprattutto su reti lente o con latenza alta, meno utile se la rete locale è già velocissima.
L'algoritmo di rimpiazzo è LRU (Least Recently Used): quando la cache si riempie, i file meno usati di recente vengono i primi a essere scartati per fare spazio a dati più richiesti. È lo stesso principio che si trova in praticamente ogni sistema di cache, dal browser al database. Una delle caratteristiche che rende Linux così potente è la sua capacità di gestire in modo efficiente le risorse del sistema, tra cui la memoria e la cache del filesystem.
In questo articolo, esploreremo come ottimizzare la cache del filesystem su Linux utilizzando fscache e il caching dei metadati, due tecniche che possono migliorare significativamente le prestazioni del sistema.
I metadati sono informazioni sui file e le directory, come le dimensioni, la data di creazione, il proprietario e i permessi. Quando un file viene aperto o chiuso, il sistema operativo deve accedere ai metadati per eseguire l'operazione. Tuttavia, l'accesso ai metadati può essere lento, soprattutto se si utilizzano dischi rigidi meccanici.
Per migliorare le prestazioni del sistema, Linux utilizza il caching dei metadati, che consiste nel memorizzare i metadati dei file e delle directory in memoria. In questo modo, quando un file viene aperto o chiuso, il sistema operativo può accedere ai metadati dalla memoria piuttosto che dal disco rigido, riducendo così il tempo di accesso.
Introduzione a fscache
fscache è un'utilità del kernel di Linux che consente di memorizzare nella cache i dati dei file e delle directory in memoria. fscache funziona in modo simile al caching dei metadati, ma memorizza i dati dei file anziché i metadati.
fscache è particolarmente utile per i sistemi con una grande quantità di dati, come i server di file o i server di database, in cui il tempo di accesso ai dati può essere significativo.
Come funziona fscache
Quando viene richiesto un file, il sistema operativo cerca prima nella cache di fscache per vedere se è presente una copia del file. Se il file è presente nella cache, il sistema operativo restituisce il file dalla cache anziché dal disco rigido. Se il file non è presente nella cache, il sistema operativo legge il file dal disco rigido e lo memorizza nella cache di fscache.
fscache utilizza un algoritmo di sostituzione della cache, noto come algoritmo di sostituzione LRU (Least Recently Used), che sostituisce i file meno recentemente utilizzati nella cache quando la memoria disponibile inizia a esaurirsi.
Prima di attivare fscache su un sistema di produzione, vale la pena sapere che aggiunge un consumo di memoria e I/O su disco locale per gestire la cache stessa — non è mai gratis. Su un server con NFS montato ma poco traffico ripetuto sugli stessi file, il costo di gestione della cache può superare il beneficio, ed è meglio verificarlo con un benchmark reale prima di attivarlo di default. Il file di configurazione di fscache contiene una serie di parametri che possono essere modificati per ottimizzare le prestazioni del sistema.
Uno dei parametri più importanti da configurare è la quantità di memoria utilizzata per la cache di fscache. La quantità di memoria utilizzata per la cache può essere configurata utilizzando il parametro cache_size. Ad esempio, per impostare la dimensione della cache su 1 GB, si può utilizzare la seguente linea di configurazione:
cache_size = 1048576È inoltre possibile configurare il numero di file che possono essere memorizzati nella cache utilizzando il parametro max_files. Ad esempio, per impostare il numero massimo di file nella cache su 1000, si può utilizzare la seguente linea di configurazione:
max_files = 1000Per utilizzare fscache, è necessario montare il filesystem utilizzando l'opzione fscache. Ad esempio, per montare il filesystem /dev/sda1 utilizzando fscache, si può utilizzare il seguente comando:
mount -t ext4 -o fscache /dev/sda1 /mntÈ inoltre possibile utilizzare fscache con NFS (Network File System), che consente di memorizzare nella cache i dati dei file su una rete. Per utilizzare fscache con NFS, è necessario utilizzare l'opzione fscache quando si monta il filesystem NFS. Ad esempio, per montare il filesystem NFS /nfs/server utilizzando fscache, si può utilizzare il seguente comando:
mount -t nfs -o fscache server:/nfs /mntConclusioni
fscache e il caching dei metadati sono due tecniche che possono migliorare significativamente le prestazioni del sistema su Linux. La memorizzazione nella cache dei dati dei file e dei metadati può ridurre il tempo di accesso ai file e alle directory, migliorando così le prestazioni del sistema.
Per configurare fscache, è necessario modificare il file di configurazione di fscache e impostare la dimensione della cache e il numero massimo di file. Per utilizzare fscache, è necessario montare il filesystem utilizzando l'opzione fscache.
Inoltre, è importante tenere presente che l'utilizzo di fscache e del caching dei metadati può richiedere una quantità significativa di memoria, pertanto è necessario assicurarsi che il sistema disponga di una quantità adeguata di memoria per supportare queste tecniche.