Capitolo 7. File System
7.1. Considerazioni sul processo di ottimizzazione per i file system
7.1.1. Opzioni di formattazione
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 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.
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
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
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.
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.
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
noatime
abiliterete anche nodiratime
; non vi è alcun bisogno di abilitare sia noatime
che nodiratime
.
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.
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
# blockdev -setra N device
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
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.
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.
-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.
7.1.4. Considerazioni sull'applicazione
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.