Puncte:2

lvmcache/dm-cache performanță maximă a memoriei cache de scriere inversă

drapel id

Am un SSD writeback cache în fața unui HDD, configurat prin lvmcache (deci un dm-cache). Când memoria cache LV nu este plină (Date% coloana in Eu versus < 100,00%), scrierile merg pe dispozitivul cache (monitorizat prin dstat). Cu toate acestea, când memoria cache LV este plină (Date% = 100,00%), scrierile merg direct pe HDD, devenind practic un cache de scris. Blocurile nu sunt evacuate din memoria cache SSD, nici măcar după ceva timp, iar performanța scade.Când încerc să citesc datele citite recent din LV stocat în cache, citirile sunt de pe SSD, așa că presupun că întregul SSD a devenit acum un cache de citire. Este acest comportament așteptat pentru memoria cache de scriere a dm-cache, chiar și în modul writeback? Nu există spațiu rezervat pentru scrieri? Acesta pare a fi un design destul de slab, deoarece, în esență, utilizatorii pot scrie doar un singur cache în valoare de date LV înainte ca cache-ul să devină un cache de scriere.

Înțeleg că dm-cache folosește algoritmul de evacuare mq, dar asta se aplică doar pentru citirea în cache și, prin urmare, este irelevant pentru problema de scriere în cache pe care o observ.

Există o modalitate de a rezerva spațiu pentru un cache de scriere sau de a folosi atât un dm-writecache (care am înțeles că nu va face nicio memorie cache de citire) și un dm-cache în același timp?

Puncte:1
drapel ca

dm-cache este un cache „în mișcare lentă”: sunt necesare multe erori de citire/scriere pentru a promova un bloc, mai ales atunci când promovarea unui bloc nou înseamnă retrograda unul deja memorat în cache.

Natura fixă ​​bazată pe blocuri a dm-cache, împreună cu nicio zonă rezervată doar pentru scriere, înseamnă că sunt necesare multe scrieri în aceleași blocuri care nu sunt stocate în cache pentru a declanșa o promovare/înlocuire a blocului.Cu toate acestea, acest lucru implică, de asemenea, că pagina cache a nucleului nu „absoarbe” aceste scrieri multiple lipsă, îmbinându-le într-o singură scriere pe dispozitivele bloc subiacente.

Cu alte cuvinte, probabil că vedeți efectul combinat al cache-ului paginii nucleului (care absoarbe și îmbină scrierile) și reticența de dm-cache pentru a promova primul blocaj ratat.

Dacă doriți să rezervați un anumit dispozitiv/spațiu pentru a scrie doar memoria cache, puteți accesa dm-writecache (și de obicei lvmcache)

Informatii suplimentare:

dm-cache blochează accesul de urmărire la promovare/retrogradare. La început, aveți un cache gol cu ​​toate I/O direcționate către dispozitivul de origine (lent). Deci, atunci când emiteți o citire, să zicem, 4K, aceasta va accesa dispozitivul lent subiacent, cu dm-cache urmărind ratarea. După alte câteva rateuri la același bloc de cache (implicit 32K), atunci întreg blocul cache este copiat pe dispozitivul rapid. Dacă acum scrieți în blocurile din cache, scrierea dvs. va fi stocată în cache. Dacă, totuși, scrisul tău este pentru un bloc necacheat, merge direct la dispozitivul de origine (lent). După alte câteva scrieri necache, dm-cache va aloca în sfârșit întregul bloc de cache (rețineți, 32K în mod implicit) copiend datele originale pe dispozitivul de cache. În acest moment, noi citiri/scrieri pot fi servite din cache. Retrogradarea este simplă: atunci când un bloc nou trebuie promovat, cel mai vechi bloc este aruncat/eliminat.

Cu alte cuvinte, pentru ca scrierea să fie stocată în cache, segmentul cache corespunzător trebuie alocat și datele de rezervă trebuie copiate pe dispozitivul cache (alocare-on-write). Pentru a limita utilizarea lățimii de bandă între dispozitivul de origine și cache, această copiere se face numai după mai multe rateuri (adică: o singură pierdere va nu promovează un bloc). Rețineți că citirea de mai multe ori a aceluiași bloc necache va fi nu funcționează, deoarece pagecache-ul nucleului va furniza pur și simplu blocul stocat în cache.

dm-writecache funcționează diferit, fiind mai asemănător cu un controler tradițional RAID writeback cache. Se păstrează în cache toate scrie, ignorând citirile. Aproape poate fi considerat o „cache de pagini L2 doar pentru scriere”, în care paginile murdare sunt „schimbate” în așteptarea ca dispozitivul lent să ajungă din urmă. Pentru a-l folosi, trebuie să partiționați dispozitivele rapide între dm-cache (care, în acest moment, trebuie să fie rulat ca scrie prin cache) și dm-writecache, sau pentru a le dedica diferite dispozitive. eu nu am încercat să fac asta prin LVM și bănuiesc că instrumentele vă vor împiedica să cuibați/stivuiți două module cache diferite. Cu toate acestea, puteți încerca prin direct dmsetup comenzi.

Albert T avatar
drapel id
„înseamnă că multe scrieri în aceleași blocuri care nu sunt memorate în cache sunt necesare pentru a declanșa o promovare/înlocuire a blocului”. Nu înțeleg conceptul de stocare în cache a unui bloc de scriere și promovare/retrogradare. Scrierile sunt, în esență, tamponate în cache-urile de scriere (cum ar fi dm-writecache) și retrogradează alte blocuri în cache-urile de citire agresive dacă scrierea este socotită ca acces. Ați putea detalia mai multe despre asta? „Dacă doriți să rezervați un anumit dispozitiv/spațiu doar pentru a scrie cache-ul, puteți accesa dm-writecache (și lvmcache-ul obișnuit)” Cum aș face asta? Acest lucru ar presupune să aveți două cache-uri pe un singur LV, nu?
shodanshok avatar
drapel ca
@AlbertT Mi-am editat răspunsul cu informațiile necesare

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.