Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

Capitolo 7. File System

Consultare questo capitolo per una panoramica sui file system supportati con Red Hat Enterprise Linux e su come ottimizzarne le loro prestazioni.

7.1. Considerazioni sul processo di ottimizzazione per i file system

Sono presenti diversi fattori comuni a tutti i file system da considerare: opzioni di montaggio e formattazione selezionati e azioni disponibili alle applicazioni in grado di migliorare le prestazioni di un dato sistema.

7.1.1. Opzioni di formattazione

Dimensione blocco del file system

La dimensione dei blocchi può essere selezionata al momento del mkfs. La gamma delle dimensioni disponibili dipende dal sistema: il limite più alto è la dimensione massima della pagina del sistema host, mentre il limite più basso dipende dal file system usato. La dimensione del blocco predefinita è appropriata per la maggior parte dei casi.

Se desiderate creare numerosi file più piccoli rispetto alla dimensione del blocco predefinito, sarà possibile impostare una dimensione del blocco più piccolo per minimizzare la quantità di spazio usato sul disco. Da notare tuttavia che l'impostazione di una dimensione più piccola potrebbe limitare la dimensione massima del file system, e generare così un sovraccarico aggiuntivo, in particolare per i file più grandi, rispetto alla dimensione del blocco selezionato.
Geometria del file systema

Se il sistema utilizza uno storage segmentato, ad esempio RAID5, sarà possibile migliorare le prestazioni allineando i dati e i metadati con la geometria dello storage sottostante al momento del mkfs. Per RAID software ((LVM o MD) ed alcuni storage hardware di livello enterprise, queste informazioni vengono richieste ed impostate automaticamente, ma in numerosi casi l'amministratore dovrà specificare la geometria manualmente con mkfs sulla linea di comando.

Consultate la Storage Administration Guide per maggiori informazioni sulla creazione e la gestione dei file system.
Journal esterni

Con carichi di lavoro dei metadati-intensivi la sezione dei log di un file system con journal (come ad esempio ext4 e XFS) viene aggiornata molto spesso. Per minimizzare il tempo di ricerca "seek time" dal file system al journal, posizionare il journal su uno storage apposito. Da notare tuttavia che il posizionamento del journal su uno storage esterno più lento del file system primario, potrebbe annullare qualsiasi vantaggio associato con l'uso di uno storage di questo tipo.

Avvertimento

Assicuratevi che il journal esterno sia affidabile. La perdita di un dispositivo journal esterno causerà la corruzione del file system.
I journal esterni vengono creati al momento del mkfs, specificando i dispositivi journal al momento del montaggio. Consultate le pagine man di mke2fs(8), mkfs.xfs(8) e mount(8) per maggiori informazioni.

7.1.2. Opzioni di montaggio

Barrier

Un write barrier è un meccanismo del kernel usato per assicurare la scrittura corretta e ordinata sullo storage persistente dei metadati del file system, anche quando dispositivi di storage con cache di scrittura volatile perdono alimentazione. I file system con write barrier abilitato assicurano che qualsiasi dato trasmesso tramite fsync(), non venga perso in presenza di un perdita di alimentazione. Red Hat Enterprise Linux abilita per impostazione predefinita un barrier su tutti gli hardware che supportano questa operazione.

Tuttavia abilitando i write barrier rallenterete in modo significativo alcune applicazioni; in particolare le applicazioni che utilizzano spesso fsync(), o creano e rimuovono numerosi file di piccole dimensioni. Per storage con nessun cache di scrittura volatile, o in casi rari dove è accettabile avere inconsistenze del file system e perdite di dati dopo una perdita di alimentazione, è possibile disabilitare i barrier usando l'opzione di montaggio nobarrier. Per maggiori informazioni consultare la Storage Administration Guide.
Tempo di accesso (noatime)

Storicamente quando un file viene letto il tempo di accesso (atime) per quel file deve essere aggiornato nei metadati dell'inode, tale processo richiede una scrittura I/O aggiuntiva. Se non sono necessari metadati atime accurati, montate il file system con l'opzione noatime per eliminare gli aggiornamenti dei metadati. Tuttavia nella maggior parte dei casi, atime non risulta essere un problema molto grande a causa del comportamento del relative atime predefinito (o relatime) nel kernel di Red Hat Enterprise Linux 6. relatime aggiorna solo atime se l'atime precedente è più vecchio rispetto al tempo di modifica o "modification time" (mtime) o allo stato di change time (ctime).

Nota

Abilitando l'opzione noatime abiliterete anche nodiratime; non vi è alcun bisogno di abilitare sia noatime che nodiratime.
Supporto read-ahead migliorato

Read-ahead velocizza l'accesso dei file tramite il ripristino dei dati ed il loro caricamento sulla cache della pagina, così facendo essi saranno disponibili nella memoria e non sul disco. Alcuni carichi di lavoro, come ad esempio quelli con uno streaming I/O sequenziale, traggono beneficio dai valori elevati di read-ahead.

Il tool tuned e l'uso della segmentazione LVM possono elevare il valore di read-ahead. Talvolta ciò non è sempre sufficiente con alcuni carichi di lavoro. Altresì Red Hat Enterprise Linux non è sempre in grado di impostare un valore read-ahead appropriato in base ai parametri rilevati del file system. Per esempio, se uno storage array molto potente si presenta a Red Hat Enterprise Linux come un LUN singolo molto potente, il sistema operativo non lo riconoscerà come un array LUN potente e, per impostazione predefinita, non utilizzerà tutti i possibili vantaggi disponibili allo storage con read-ahead.
Usare il comando blockdev per visualizzare e modificare il valore di read-ahead. Per visualizzare il valore corrente di read-ahead per un dispositivo a blocchi particolare eseguire:
# blockdev -getra device
Per modificare il valore di read-ahead per il dispositivo a blocchi in questione eseguire il seguente comando. N rappresenta il numero di settori a 512-byte.
# blockdev -setra N device
Da notare che il valore selezionato con il comando blockdev non sarà persistente dopo il riavvio. È consigliato creare uno script init.d del run level per impostare questo valore durante l'avvio.

7.1.3. Gestione del file system

Rimuovere i blocchi non utilizzati

Le operazioni di Batch discard e Online discard sono funzioni dei file system montati, attraverso le quali è possibile rimuovere i blocchi non usati dal file system. Queste operazioni sono utili sia per unità solid-state che per storage thinly-provisioned.

Le operazioni di Batch discard vengono eseguite dall'utente con il comando fstrim. Questo comando rimuove i blocchi non utilizzati che soddisfano i criteri di ricerca impostati dall'utente. Entrambe le operazioni sono supportate e possono essere utilizzate con file system XFS e ext4 in Red Hat Enterprise Linux 6.2 e versioni più recenti, solo se il dispositivo a blocchi sottostante al file system supporta operazioni di rimozione fisiche. Queste operazioni sono supportate se il valore di /sys/block/device/queue/discard_max_bytes non è zero.
Le operazioni Online discard sono operazioni specificate al momento del montaggio tramite l'opzione -o discard (in /etc/fstab o come parte del comando mount), ed eseguite in tempo reale senza alcun intervento dell'utente. Queste operazioni rimuovono solo blocchi in transizione con uno stato di usato ad uno disponibile. Tali operazioni sono supportate sui file system ext4 in Red Hat Enterprise Linux 6.2 e versioni più recenti e su file system XFS in Red Hat Enterprise Linux 6.4 e versioni più recenti.
Red Hat consiglia l'uso di operazioni Batch discard se il carico di lavoro del sistema lo consente. Per mantenere le prestazioni desiderate eseguire operazioni Online discard.

7.1.4. Considerazioni sull'applicazione

Pre-assegnazione

I file system ext4, XFS e GFS2 supportano una pre-assegnazione efficiente dello spazio tramite l'invocazione glibc fallocate(2). In casi in cui i file possono essere segmentati incorrettamente a causa dei percorsi di scrittura, causando il deterioramento dei processi di lettura, questa tecnica può essere molto utile. Il processo di Pre-assegnazione contrassegna lo spazio del disco come se fosse stato assegnato ad un file, senza scrivere però alcun dato nello spazio in questione. Fino a quando non verranno scritti dati veri e propri all'interno del blocco pre-assegnato, le operazioni di lettura ritorneranno valori pari a zero.