I dischi SATA che gestiscono correttamente la memorizzazione nella cache di scrittura?


15

È abbastanza comune consultare i consigli per disabilitare la cache di scrittura sui singoli dischi utilizzati per i database perché in caso contrario alcuni dischi riconosceranno le scritture che non sono ancora arrivate sulla superficie del disco.

Ciò implica che alcuni dischi non riconoscono le scritture fino a quando non sono arrivati ​​alla superficie del disco (Aggiornamento: o che riportano accuratamente quando viene richiesto di svuotare la cache. Dove posso trovare tali dischi o dove posso cercare informazioni autorevoli su dove trovare tali dischi?

Sto configurando alcuni server DB che trarrebbero davvero beneficio dall'uso della cache in scrittura, ma l'applicazione è sensibile al prezzo e preferirei non raddoppiare il costo del mio sottosistema del disco per alcuni controller RAID nella cache perché non ho abbastanza informazioni per sapere se posso fidarmi della cache in ogni unità.


Linux consente di disabilitare la cache di scrittura su un'unità per unità tramite hdparam. Per le unità SATA, credo che questo debba essere programmato per essere riapplicato ad ogni riavvio. Potrei andare così se riesco ancora a soddisfare i nostri requisiti perf senza utilizzare un controller raid alimentato a batteria. Preferisco usare il software RAID quando possibile poiché è più semplice ed economico. Ad ogni modo, avrò sicuramente un UPS.
eas

Risposte:


15

In generale, in risposta diretta alla tua domanda, non sono a conoscenza delle principali marche di unità SATA che l'unità stessa ha avuto bug relativi al corretto funzionamento con la cache in scrittura abilitata. Cioè, solo dal punto di vista dell'unità, l'unità fa quello che dovrebbe fare dalla prospettiva della cache. Vorrei anche notare che anche quando la cache di scrittura è abilitata, il ritardo da una scrittura del disco sul cavo SATA al supporto rotante che viene fisicamente aggiornato è ancora molto breve (in genere da ~ 50 a 100ms). Non è che i dati della cache sporca rimarranno lì per pochi secondi alla volta ..... l'unità cerca continuamente di ottenere dati sporchi dalla cachesui supporti fisici non appena possibile. Questa non è solo una questione di sicurezza dei dati, ma di essere pronti ad accettare scritture future senza alcun ritardo (es. Scrivere posting).

Il problema che si presenta quando la memorizzazione nella cache è abilitata è che l'ordine di scrittura sull'unità tramite il cavo SATA e l'ordine di scrittura sul supporto rotante non è lo stesso. Ciò non può mai causare un problema A MENO CHE non si abbia una perdita di potenza o un arresto anomalo del sistema prima che tutto il contenuto della cache arrivi al disco. Perché? ->

Il problema che può sorgere qui è relativo alla solidità della transazione del file system e / o del contenuto del file di database a questi scritti fuori uso persi. In effetti, quelle scritture potenzialmente perse fuori servizio possono teoricamente corrompere l'integrità della logica di transazione che altrimenti sarebbe stata garantita dalle scritture su disco avvenute in un ordine molto specifico per il supporto.

Ora, naturalmente, i progettisti del file system, dei database, dei controller RAID, ecc. Sono a conoscenza (o certamente dovrebbero essere a conoscenza) di questo fenomeno relativo alla scrittura nella cache. La memorizzazione nella cache di scrittura è estremamente desiderabile dal punto di vista delle prestazioni nella maggior parte degli scenari di I / O di tipo casuale. In effetti, la disponibilità della memorizzazione nella cache di scrittura è un elemento chiave per poter avere un reale vantaggio per il più avanzato Accodamento comandi nativo ( NCQ) supportato su SATA più recenti e sulle ultime generazioni di implementazioni PATA. Pertanto, per garantire l'ordine al supporto fisico in determinati momenti critici, il file system e / o l'applicazione, ecc. Possono richiedere in modo specifico un flush delle cache di scrittura sul supporto. Al completamento di questa richiesta di sincronizzazione, tutto ciò che è in sospeso da (potenzialmente) buffer di file, memorizzazione nella cache del disco del sistema operativo, memorizzazione nella cache del disco fisico ecc. È effettivamente disponibile sul supporto per la progettazione del sistema di transazione nelle giuste operazioni critiche. Cioè, ciò accade correttamente se i programmatori effettuano le chiamate giuste nella parte superiore E ogni elemento di questa catena di livelli software e hardware ha svolto correttamente il proprio lavoro. vale a dire: non ci sono bug a questo proposito nell'unità, nei controller RAID, nei driver del disco, nelle cache del sistema operativo, nel file system, nel motore di database, ecc. Questo è un sacco di software che tutto deve funzionare esattamente bene. Inoltre, verificare la correttezza in questo senso è molto difficile perché in quasi tutte le situazioni normalmente l'ordine di scrittura non ha alcuna importanza .... e gli scenari di interruzione dell'alimentazione e crash sono test difficili da costruire. Quindi, alla fine, "disattivare la memorizzazione nella cache di scrittura" in uno o più dei vari livelli e / o significati di questo termine ... ha la reputazione di "risolvere" determinati tipi di problemi. In effetti, la disattivazione dei comportamenti di memorizzazione nella cache di scrittura del controller RAID o delle cache del disco del sistema operativo o dell'unità, ecc. Sta evitando uno o più bug nel sistema ..... e la fonte di tale tradizione. e le interruzioni di corrente e gli scenari di crash sono test difficili da costruire. Quindi, alla fine, "disattivare la memorizzazione nella cache di scrittura" in uno o più dei vari livelli e / o significati di questo termine ... ha la reputazione di "risolvere" determinati tipi di problemi. In effetti, la disattivazione dei comportamenti di memorizzazione nella cache di scrittura del controller RAID o delle cache del disco del sistema operativo o dell'unità, ecc. Sta evitando uno o più bug nel sistema ..... e la fonte di tale tradizione. e le interruzioni di corrente e gli scenari di crash sono test difficili da costruire. Quindi, alla fine, "disattivare la memorizzazione nella cache di scrittura" in uno o più dei vari livelli e / o significati di questo termine ... ha la reputazione di "risolvere" determinati tipi di problemi. In effetti, la disattivazione dei comportamenti di memorizzazione nella cache di scrittura del controller RAID o delle cache del disco del sistema operativo o dell'unità, ecc. Sta evitando uno o più bug nel sistema ..... e la fonte di tale tradizione.

In ogni caso, tornando al nocciolo della domanda: in SATA, la gestione specifica di tutti i comandi di lettura / scrittura del disco e i comandi flush cache sono ben definiti dalle specifiche SATA . Inoltre, i produttori di unità dovrebbero disporre di una documentazione dettagliata per ciascun modello di unità o famiglia di unità che descriva la loro implementazione e conformità a queste regole come questo esempio per le unità Barracuda di Seagate . In particolare, vedere i dettagli delle FUNZIONI DEL SET SATAIl comando che controlla la modalità operativa dell'unità e in particolare l'opzione 82h può essere utilizzato per disabilitare la memorizzazione nella cache del disco a livello di unità poiché l'impostazione predefinita è sicuramente la cache di scrittura abilitata su tutte le unità di cui sono a conoscenza. Se si desidera veramente disabilitare la cache, questo comando deve essere eseguito all'avvio di ogni reimpostazione o accensione di un'unità ed è generalmente sotto il controllo dei driver del disco per il proprio sistema operativo. Potresti essere in grado di incoraggiare il tuo driver del sistema operativo a impostare questa modalità tramite un tipo di IOCTL e / o impostazioni del Registro di sistema, ma questo varia notevolmente.


5
Una nota editoriale per la mia risposta: i controller RAID hardware sono notoriamente buggy rispetto a molti problemi tra cui quelli relativi all'implementazione interna della cache di scrittura. Non ho idea del perché, ma i controller RAID che parlano aneddoticamente sembrano essere alcuni dei software più buggy mai scritti in termini di qualcosa che ha un uso così diffuso. Vale sicuramente la pena usare hardware RAID molto diffuso, consolidato e ampiamente distribuito da fornitori di grande reputazione ..... e anche allora le patch a problemi non banali sembrano fin troppo frequenti!
Tall Jeff,

Grazie Jeff. Ho letto molte cose in questo, e sono quasi confuso come non lo sono mai stato. Penso che il problema con cui sto lottando ora abbia a che fare con le "barriere di scrittura" che consentono alle applicazioni e ai filesystem di istruire il layer a blocchi per garantire un corretto ordinamento della scrittura usando i vari meccanismi disponibili. Sfortunatamente, ci sono tutti i tipi di problemi con l'implementazione di barriere. LVM, per prima cosa, apparentemente non li supporta, anche se i dispositivi sottostanti lo fanno. Inoltre, mi sembra che gli amministratori di sistema dovrebbero avere la possibilità di avere fsync forzare un flush della cache dell'unità
eas

@eas - Il termine "scrivere barriere" a cui ti riferisci presumo sia lo stesso meccanismo di base che ho chiamato "sincronizzazione" o "flush" delle cache nella mia risposta sopra. A tuo avviso, questo può essere avviato a vari livelli nella "pila" di accesso ai file. Per costruire una vera barriera di scrittura, deve avere effetto su tutti i livelli che hanno dati di scrittura in sospeso (vale a dire: cache sporche o buffer di riscrittura) fino al supporto fisico per funzionare effettivamente come previsto. Qualsiasi collegamento disconnesso in quella catena è ciò che introduce potenziali problemi quando le scritture vengono riordinate.
Tall Jeff

I dischi possono ritardare le scritture sul supporto di alcuni secondi, ovviamente se ci sono molte altre scritture che traboccano la cache del disco, forzerà una scrittura sul supporto. NCQ non ha strettamente bisogno della cache di scrittura, può ancora avere molti comandi di scrittura e lettura in sospeso ed emetterli nell'ordine in cui il disco pensa otterrà le migliori prestazioni, inoltre con NCQ non c'è alcun significato nell'ordine delle scritture che rende filesystem e database devono usare barriere IO.
Baruch anche il

3

È stata la mia esperienza che un controller del disco di cache con batteria tampone disabiliterà la cache sull'unità. In caso contrario, non sono a conoscenza di un modo per disabilitare la cache su disco. Anche se è possibile disabilitare la cache su disco, le prestazioni ne risentirebbero notevolmente.

Per un optoin a basso costo, è possibile utilizzare un UPS economico in grado di segnalare al sistema un arresto ordinato.


Il mio commento sopra avrebbe dovuto essere aggiunto qui. Sto ancora imparando questo sito.
eas

Alcuni controller RAID disabilitano continuamente la cache su disco, altri no e alcuni hanno un'impostazione. Questo comportamento dipende fondamentalmente dall'implementazione della strategia di memorizzazione nella cache del controller RAID. In alcune implementazioni, vogliono davvero controllare l'ordine di scrittura su disco .... e in altre è meno importante. Alludo ad alcuni dei problemi qui nella mia risposta.
Tall Jeff,

Nel mio piccolo set di test (controller RAID LSI 9261, unità SATA, NL SAS e SAS), ho scoperto che l'abilitazione della cache di scrittura dell'unità quando l'unità era connessa a un controller RAID con cache supportata da pastella / capacità, non faceva differenza per prestazioni oltre a disporre solo della cache del controller RAID. Non direi ancora che questa è una regola dura e veloce, ma per me è sicuramente chiaro che il controller RAID che disabilita la cache dell'unità non è necessariamente un problema.
Daniel Lawson,

2

Uso un sistema RAID con un supercondensatore anziché una batteria per mantenere la cache. Le batterie si consumano, devono essere monitorate, devono essere sostituite e rappresentano un potenziale punto di guasto sotto questi aspetti. Un condensatore si carica all'avvio, svuota la cache quando l'alimentazione dall'UPS si interrompe, dura praticamente per sempre, non richiede monitoraggio, ecc. Tuttavia, a meno che non si stia conducendo un'azienda sulla soglia di povertà (non insolito in questi giorni) si dovrebbe avere un UPS e software che arresta il sistema in modo pulito in caso di guasto - di solito gli concedo 5-15 minuti (a seconda del carico dell'UPS e quindi della batteria disponibile) prima dello spegnimento in caso di ripristino dell'alimentazione.

Durante un temporale potresti (o potresti avere - i sistemi di alimentazione stanno migliorando) vedere lo sfarfallio delle luci, a volte appena prima che si spengano. Questo è un dispositivo chiamato richiuso. È un interruttore che, quando scattato, cerca di chiudere l'interruttore aperto nel caso in cui il sovraccarico fosse transitorio, cosa che la maggior parte lo è. Se dopo non riesce a rimanere chiuso, diciamo tre tentativi, rimane aperto. Il poveretto deve uscire sotto la pioggia e affrontarlo. Non sentirti troppo dispiaciuto per lui, mentre fai solo il doppio di quello che tu e io facciamo e il doppio che se è straordinario, è un lavoro pericoloso.


2

Uno dei malintesi se le cache di riscrittura del disco è che perdono solo i dati in caso di interruzione dell'alimentazione. Questo non è sempre il caso, specialmente sui dispositivi SATA. Se un dispositivo sATA presenta un errore (come un bug FW del caso d'angolo o un bug del controller) e si ripristina o viene reimpostato esternamente, non è garantito che i dati nella cache di riscrittura siano ancora disponibili dopo il blocco.

Questo può portare a scenari in cui un dispositivo ha un errore temporaneo, viene ripristinato, la perdita di dati si verifica nella perdita di qualsiasi cache sporca e questo è silenzioso sopra il livello di blocco dei driver.

Peggio ancora, la disabilitazione della cache dell'unità tramite gli strumenti del sistema operativo verrà persa anche sui ripristini del dispositivo, quindi anche se un dispositivo ha la cache disabilitata all'inizio del giorno, se il dispositivo viene ripristinato, riattiverà la cache di riscrittura. Ad un altro ripristino, il dispositivo perderà quindi i dati.

Le unità SCSI / SAS e alcune unità sATA hanno la possibilità di salvare lo stato del profilo di riscrittura per garantire che non si perda la proprietà attraverso i ripristini, ma in pratica viene raramente utilizzata.

I controller RAID che integrano il layer a blocchi nei layer superiori possono notare i reset delle unità e disabilitare nuovamente la cache di write-back, ma i controller standard SATA e SAS non lo faranno.

Questa limitazione vale anche per altri SET FEATURE e parametri simili configurati per prestazioni e affidabilità.


1

Come dici tu, un controller RAID con batteria adeguata sarà costoso, ma puoi trovare i controller Dell Perc5 / i su eBay per £ 100 ($ 150) e soprattutto con RAID5 la velocità di un controller come Perc5 / i ti stupirà. Ho diversi server con Perc5 / is e sei array RAID5 su disco, e sono tra i dischi più veloci che abbia mai visto. Soprattutto per le applicazioni di database, i dischi veloci miglioreranno davvero le prestazioni.

Vorrei mordere il proiettile e comprare un controller RAID.

JR


1

Per quanto ho capito, fsync () faking è una proprietà dei controller RAID con batteria, non delle unità. Il controller RAID contiene una batteria che può alimentare la sua cache di scrittura fino a quando l'alimentazione non viene ripristinata sull'unità e la scrittura può essere impegnata in modo sicuro sul disco. Ciò consente al controller di tornare immediatamente al sistema operativo, in quanto garantisce un certo livello di scrittura della scrittura sul disco.

Va notato che se la cache di writeback delle unità si riempie, le scritture si bloccano fino a quando la cache non viene riscritta sull'unità. Ciò significa che la cache non è generalmente efficace con le scritture sostenute.

Di quanti IOPS è richiesta l'applicazione? Sei sicuro di essere limitato dalla cache di scrittura delle unità o che una piccola (rispetto alla memoria del tuo server) sull'unità sarà di beneficio?


Il test che sto facendo ora è determinare la gamma di prestazioni della nostra applicazione in modo da poter capire come scalare e scalare al meglio. La cache dell'unità può essere relativamente piccola, ma con la cache di scrittura su di essa offre all'unità la possibilità di riordinare le scritture (quando appropriato), il che sembra che possa raddoppiare la velocità di scrittura sostenuta.
eas
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.