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.