Tampon de disc - Disk buffer

Image
Pe această unitate de disc, placa de control conține un circuit integrat RAM utilizat pentru bufferul de disc.
Image
O unitate de hard disk Western Digital de 500 GB cu un buffer de 16 MB

În spațiul de stocare al computerului , tamponul de disc (adesea denumit în mod ambiguu cache de memorie sau memorie de memorie cache ) este memoria încorporată într-un hard disk (HDD) care acționează ca un tampon între restul computerului și platoul de discuri fizic care este utilizat pentru stocare. Unitățile de hard disk moderne vin cu 8 până la 256  MiB de astfel de memorie, iar unitățile SSD au până la 4 GB de memorie cache.

De la sfârșitul anilor 1980, aproape toate discurile vândute au microcontrolere încorporate și o interfață ATA , Serial ATA , SCSI sau Fibre Channel . Circuitul unității are de obicei o cantitate mică de memorie, utilizată pentru a stoca datele care merg și provin de pe platourile de disc.

Memoria tampon de disc este fizic distinctă și este utilizată diferit de memoria cache a paginii păstrată de obicei de sistemul de operare în memoria principală a computerului . Memoria tampon a discului este controlată de microcontrolerul din unitatea de disc, iar memoria cache a paginii este controlată de computerul la care este atașat acel disc. Memoria tampon de disc este de obicei destul de mică, variind între 8 și 256  MiB , iar memoria cache a paginii este în general toată memoria principală neutilizată. În timp ce datele din memoria cache a paginii sunt reutilizate de mai multe ori, datele din memoria tampon de disc sunt rareori reutilizate. În acest sens, termenii cache de disc și buffer de cache sunt denumitori greși; memoria controlerului încorporat se numește mai adecvat tampon de disc .

Rețineți că controlerele de matrice de discuri , spre deosebire de controlerele de discuri , au de obicei o memorie cache normală de aproximativ 0,5-8 GiB.

Utilizări

Citire înainte / citire în spate

Când controlerul unui disc execută o citire fizică, dispozitivul de acționare mută capul de citire / scriere (sau aproape) de cilindrul corect. După o anumită decantare și, eventual, acționare fină, capul de citire începe să preia datele de urmărire și nu mai rămâne decât să așteptați până când rotația platoului aduce datele solicitate.

Datele citite înainte de solicitare în timpul acestei așteptări nu sunt solicitate, dar sunt gratuite, așa că, de obicei, sunt salvate în memoria tampon de disc în cazul în care sunt solicitate ulterior.

În mod similar, datele pot fi citite gratuit în spatele celei solicitate, dacă capul poate rămâne pe drumul cel bun, deoarece nu există o altă citire de executat sau următoarea acționare poate începe mai târziu și se poate finaliza în timp.

Dacă mai multe citiri solicitate sunt pe aceeași pistă (sau în apropiere pe o pistă spirală), cele mai multe date nesolicitate între ele vor fi citite atât în ​​față, cât și în spate.

Potrivirea vitezei

Viteza interfeței I / O a discului către computer nu se potrivește aproape niciodată cu viteza cu care biții sunt transferați către și de pe platoul de pe hard disk . Tamponul de disc este utilizat astfel încât atât interfața I / O cât și capul de citire / scriere a discului să poată funcționa la viteză maximă.

Scrieți accelerația

Microcontrolerul încorporat al discului poate semnala computerului principal că o scriere pe disc este completă imediat după primirea datelor de scriere, înainte ca datele să fie scrise efectiv pe platou. Acest semnal timpuriu permite computerului principal să continue să funcționeze, chiar dacă datele nu au fost scrise încă. Acest lucru poate fi oarecum periculos, deoarece dacă energia se pierde înainte ca datele să fie fixate permanent în mediul magnetic, datele se vor pierde din memoria tampon a discului, iar sistemul de fișiere de pe disc poate fi lăsat într-o stare inconsistentă.

Pe unele discuri, această perioadă vulnerabilă între semnalizarea completă a scrierii și fixarea datelor poate fi în mod arbitrar lungă, întrucât scrierea poate fi amânată la nesfârșit prin cereri nou sosite. Din acest motiv, utilizarea accelerației de scriere poate fi controversată. Cu toate acestea, coerența poate fi menținută prin utilizarea unui sistem de memorie cu baterie pentru stocarea în cache a datelor, deși acest lucru se găsește de obicei numai în controlerele RAID de ultimă generație .

Alternativ, cache-ul poate fi pur și simplu dezactivat atunci când integritatea datelor este considerată mai importantă decât performanța la scriere. O altă opțiune este de a trimite date pe disc într-o ordine gestionată cu atenție și de a emite comenzi de „cache flush” în locurile potrivite, care este denumită de obicei implementarea barierelor de scriere .

Comandă în așteptare

SATA mai noi și majoritatea discurilor SCSI pot accepta mai multe comenzi în timp ce oricare comandă este în funcțiune prin „comanda în așteptare” (vezi NCQ și TCQ ). Aceste comenzi sunt stocate de controlerul încorporat al discului până când sunt finalizate. Un avantaj este că comenzile pot fi reordonate pentru a fi procesate mai eficient, astfel încât comenzile care afectează aceeași zonă a unui disc să fie grupate împreună. Dacă o citire face referire la datele la destinația unei scrieri în coadă, datele care urmează să fie scrise vor fi returnate.

NCQ este de obicei utilizat în combinație cu tampon de scriere activat. În cazul unei comenzi FPDMA de citire / scriere cu bitul de acces la forță (FUA) setat la 0 și tampon de scriere activat, un sistem de operare poate vedea operațiunea de scriere terminată înainte ca datele să fie scrise fizic pe suport. În cazul în care bitul FUA este setat la 1 și este activat bufferul de scriere, operația de scriere revine numai după ce datele sunt scrise fizic pe suport.

Controlul cache-ului de la gazdă

Spălarea memoriei cache

Datele care au fost acceptate în memoria cache a unui dispozitiv de disc vor fi în cele din urmă scrise pe platourile de disc, cu condiția să nu apară nicio condiție de înfometare ca urmare a unei defecțiuni a firmware-ului și că sursa de alimentare a discului să nu fie întreruptă înainte ca scrierile memorate în cache să fie forțate să platească pe disc. Pentru a controla cache-ul de scriere, specificațiile ATA includeau comenzile FLUSH CACHE (E7h) și FLUSH CACHE EXT (EAh). Aceste comenzi determină discul să completeze scrierea datelor din memoria cache, iar discul va reveni la o stare bună după ce datele din memoria cache de scriere sunt scrise pe suportul discului. În plus, spălarea cache-ului poate fi inițiată cel puțin pe unele discuri, prin emiterea comenzii Soft reset sau Standby (Imediat).

Curățarea obligatorie a cache-ului este utilizată în Linux pentru implementarea barierelor de scriere în unele sisteme de fișiere (de exemplu, ext4 ), împreună cu comanda de scriere Force Unit Access pentru blocurile de comitere jurnal .

Acces la unitatea de forță (FUA)

Accesul la forță (FUA) este o opțiune de comandă de scriere I / O care forțează datele scrise până la stocarea stabilă. Comenzile de scriere FUA (WRITE DMA FUA EXT - 3Dh, WRITE DMA QUEUED FUA EXT - 3Eh, WRITE MULTIPLE FUA EXT - CEh), spre deosebire de comenzile corespunzătoare fără FUA, scriu date direct pe suport, indiferent dacă scrierea în cache a dispozitivului este activat sau nu. Comanda de scriere FUA nu va reveni până când datele nu sunt scrise pe suport, astfel datele scrise de o comandă de scriere FUA finalizată sunt pe suport permanent chiar dacă dispozitivul este oprit înainte de a emite o comandă FLUSH CACHE.

FUA a apărut în setul de comenzi SCSI și a fost adoptat ulterior de SATA cu NCQ . FUA are o granulație mai fină, deoarece permite forțarea unei singure operații de scriere la mediul stabil și, prin urmare, are un impact general mai mic asupra performanței în comparație cu comenzile care spală întreaga memorie cache a discului, cum ar fi familia de comenzi ATA FLUSH CACHE.

Windows (Vista și versiunile ulterioare) acceptă FUA ca parte a tranzacționalului NTFS , dar numai pentru discurile SCSI sau Fibre Channel unde suportul pentru FUA este comun. Nu se știe dacă o unitate SATA care acceptă comenzi de scriere FUA va respecta de fapt comanda și va scrie date pe platourile de disc conform instrucțiunilor; astfel, Windows 8 și Windows Server 2012 trimit în schimb comenzi pentru a spăla memoria cache de scriere după anumite operații de scriere.

Deși nucleul Linux a câștigat suport pentru NCQ în jurul anului 2007, SATA FUA rămâne dezactivat în mod implicit din cauza regresiilor care au fost găsite în 2012 când a fost testat suportul nucleului pentru FUA. Kernel-ul Linux acceptă FUA la nivelul stratului de bloc.

Vezi si

Referințe