Cosa significa il flag di montaggio 'barrier' in Linux?


20

Il manuale per l'opzione di montaggio 'barriera' è:

barriera = 0 / barriera = 1

Questo disabilita / abilita l'uso delle barriere di scrittura in jbd code.barrier = 0 disabilita, barrier = 1 abilita (impostazione predefinita). Ciò richiede anche uno stack IO in grado di supportare le barriere e se jbd riceve un errore durante la scrittura di una barriera, disabiliterà nuovamente le barriere con un avviso. Le barriere di scrittura impongono il corretto ordinamento su disco dei commit dei journal, rendendo sicure le cache di scrittura su disco volatili da usare, con una certa penalità delle prestazioni. Se i dischi sono supportati da una batteria in un modo o nell'altro, disabilitare le barriere può migliorare le prestazioni in modo sicuro.

Ma non so che cosa significhi la frase " ordinamento su disco del journal ".

Supponiamo che l'ordine normale - giornale 1, dati 1; journal 2, data 2.
Quali dei seguenti risultati di ordinazione accadranno se imposto barrier=0?

  1. giornale 2, dati 2; giornale 1, dati 1;
  2. dati 1, giornale 1; dati 2, giornale 2.


1
Se leggi i file system di journaling, ti renderai conto che è importante scrivere prima il journal, quindi eseguire il journal scrivendo così i dati reali sul disco. La barriera garantisce che il giornale sia scritto prima che venga eseguito. Altrimenti il ​​diario è inutile.
ctrl-alt-delor,

@richard Quando si usa il flag "nobarrier" nel raid hard BBWC, allora il disco non può garantire che il journal sia scritto prima che i suoi dati vengano eseguiti, questa condizione non ha importanza?
leafonsword,

Non so abbastanza per sapere se è importante. Penserei che nel peggiore dei casi è tanto grave quanto nessun diario, ma ciò che ho letto non sembra così male, tuttavia non riesco a discernere le sottigliezze. L'ho fatto barrier=1e funziona abbastanza veloce per me. A meno che tu non stia facendo cose davvero pesanti, le lascerei perdere. Hai buffer di RAM, quindi le cose verranno scritte quando possibile, senza rallentamento delle applicazioni. E pochissimo ritardo nella scrittura su disco. Se vuoi vedere quanto i buffer di RAM accelerano le cose, aggiungi sync = 1 alla tua home directory e prova a usare il tuo sistema per un giorno o due.
ctrl-alt-delor,

Risposte:


15

La maggior parte dei file system moderni sono i file system di journaling, il che significa che tengono traccia delle modifiche che non sono ancora state scritte su disco in una struttura di dati interna chiamata journal. In caso di crash, questo diario verrà riprodotto per assicurarsi che tutte le scritture siano state eseguite correttamente, prevenendo il danneggiamento dei file.

Quando si scrivono effettivamente i dati sul disco, la cache di scrittura riordinerà le scritture per tentare di massimizzare il throughput, ma deve assicurarsi che i dati del file effettivo vengano scritti sul disco prima dei metadati, per assicurarsi che se si verifica un arresto anomalo si verifica che i metadati non saranno obsoleti con i dati.

Il problema è che molti dischi hanno cache proprie che potrebbero riordinare anche le scritture. Alcuni file system supporranno che ciò accada e costringono il disco a svuotare la cache in determinati punti per impedirlo, e viene chiamato write barriersad esempio ext4 e Linux in generale.

Per i dischi moderni, tuttavia, il sacrificio delle prestazioni è trascurabile e non è necessario disabilitare le barriere di scrittura a meno che non sia assolutamente necessario.


1

Da questo articolo LWN :

Il codice del filesystem deve, prima di scrivere il record di commit [journaling], essere assolutamente sicuro che tutte le informazioni della transazione siano state inserite nel journal. Il solo fatto di scrivere nell'ordine corretto non è sufficiente; unità contemporanee mantengono grandi cache interne e riordineranno le operazioni per prestazioni migliori. Quindi il filesystem deve indicare esplicitamente al disco di ottenere tutti i dati del journal sul supporto prima di scrivere il record di commit; se il record di commit viene scritto per primo, il journal potrebbe essere danneggiato. Il sottosistema I / O a blocchi del kernel rende disponibile questa funzionalità mediante l'uso di barriere; in sostanza, una barriera proibisce la scrittura di tutti i blocchi dopo la barriera fino a quando tutti i blocchi scritti prima della barriera non vengono assegnati ai media. Usando le barriere,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.