Ce este un cache?

click fraud protection

Când solicitați date din orice sursă, există întotdeauna o anumită întârziere. Ping-ul către serverele web este măsurat în milisecunde, timpul de acces la stocare poate avea latențe în microsecunde, în timp ce latența RAM este măsurată în cicluri de ceas al CPU. Desigur, astfel de viteze ar fi fost de neconceput cu doar câteva decenii în urmă, dar în prezent, nu sunt niciodată suficient de rapide. Viteza de acces este în mod regulat o formă de blocaj în performanță. Unul dintre modalitățile prin care acest lucru poate fi rezolvat este memorarea în cache.

Memorarea în cache este un proces de stocare a unei copii temporare a unei resurse într-un mod în care aceasta poate fi accesată mai repede decât ar putea fi în mod normal. Există o gamă largă de implementări atât în ​​software, cât și în hardware. Cache-urile pot acționa ca cache de citire, cache de scriere sau ambele.

Citiți cache-urile

Într-o memorie cache de citire, datele care au fost solicitate anterior sunt stocate într-un cache pentru un acces mai rapid. În unele scenarii, memoria cache poate fi chiar încărcată preventiv cu date, permițând ca prima cerere să fie servită din cache, mai degrabă decât cererile ulterioare.

Cache-ul de citire cu care este cel mai probabil să fiți familiarizat este memoria cache a browserului. Aici browserul stochează o copie locală a resurselor solicitate. Aceasta înseamnă că, dacă și atunci când pagina web este reîncărcată sau se încarcă o pagină similară care utilizează o mare parte din același conținut, acel conținut poate fi servit din cache și nu de serverul web. Acest lucru nu înseamnă doar că pagina web se poate încărca mai repede, dar reduce și încărcarea pe web server și reduce cantitatea de date pe care utilizatorul trebuie să le descarce, ceea ce poate fi important pe măsurat conexiuni.

RAM în sine acționează și ca cache de citire pentru datele de pe hard disk. În acest caz, datele pentru un program care rulează sunt încărcate preventiv în RAM, astfel încât CPU-ul să le poată accesa mai repede. Datele din RAM sunt apoi stocate în cache în memoria cache a CPU, deși procesul pentru aceasta este mult mai complex, deoarece memoria cache a CPU este măsurată în megaocteți, nu în gigaocteți.

Scrieți cache-uri

Un cache de scriere este un cache care poate absorbi datele scrise pe un dispozitiv mai lent. Un exemplu comun în acest sens ar fi cache-ul SLC în SSD-urile moderne. Acest cache nu permite citirea mai rapidă a datelor, cu toate acestea, este mult mai rapid să scrieți decât să scrieți pe flash-ul TLC sau QLC care formează restul SSD-ului. Cache-ul SLC poate absorbi operațiuni de scriere de mare viteză și apoi descarcă acele date de îndată ce poate în flash-ul TLC, care oferă o densitate de stocare mult mai bună, dar este și mult mai lent pentru a scrie. Utilizarea memoriei flash în acest fel o optimizează atât pentru viteze mari de scriere, cât și pentru o densitate mare de stocare.

Cache-uri hibride

Există multe moduri de a gestiona cache-urile care le pot permite să acționeze atât ca cache de citire, cât și de scriere. Fiecare dintre aceste metode gestionează operațiunile de scriere în mod diferit și are avantaje și dezavantaje. Cele trei opțiuni sunt write-around, write-through și write-back. Un cache de scriere omite complet memoria cache la scriere, cache-ul de scriere scrie în cache, dar consideră că operația este finalizată numai atunci când a fost scrisă în stocare. Cache-ul de scriere înapoi scrie în cache și apoi consideră operația finalizată, bazându-se pe cache pentru a-l transfera în stocare dacă este necesar.

Scrierea poate fi utilă dacă vă așteptați la un volum mare de scrieri, deoarece minimizează pierderea memoriei cache. Totuși, înseamnă că o operațiune care citește apoi oricare dintre acele date scrise se va confrunta cu cel puțin o pierdere a memoriei cache prima dată. Cache-urile de scriere memorează imediat în cache operațiile de scriere, ceea ce înseamnă că rezultatul poate fi servit din cache de prima dată când este solicitat. Pentru a fi considerată completă, o operație de scriere trebuie să scrie și datele pe disc, ceea ce adaugă latență. O memorie cache de scriere înapoi are același beneficiu ca și o redare de scriere, permițând ca datele scrise să fie imediat servite din cache. Totuși, nu necesită operațiuni de scriere pentru a scrie pe disc pentru a fi considerat finalizat. Acest lucru reduce latența de scriere, dar vine cu riscul de pierdere a datelor dacă memoria cache este volatilă și nu termină scrierea datelor înapoi în stocare înainte de pierderea alimentării.

Cum să elimini datele din cache?

Unul dintre factorii limitatori ai oricărui cache este capacitatea. Căutarea unui cache mare necesită mult timp, anulând o bună parte din avantajul utilizării unui cache în primul rând. Tehnologiile de memorie utilizate pentru stocarea în cache tind, de asemenea, să fie mai scumpe decât memoria din care sunt stocate în cache. Dacă nu ar fi fost cazul, este probabil ca acel nivel de memorie să fi schimbat tehnologiile de memorie pentru a îmbunătăți performanța. Ambii acești factori înseamnă că cache-urile tind să fie relativ mici, mai ales în comparație cu mediul de stocare de pe care sunt stocate în cache. RAM are o capacitate mai mică decât stocarea, iar memoria cache a procesorului are o capacitate mai mică decât RAM. Cache-ul SLC are o capacitate mai mică decât memoria TLC.

Toate acestea înseamnă că este adesea necesar să ciclați datele din cache pentru a elibera spațiu pentru date noi care trebuie să fie stocate în cache. Există o serie de abordări diferite în acest sens. „Utilizat cel mai puțin frecvent”, preferă să elimine intrările din cache care au cel mai mic număr de acces. Acest lucru poate fi util pentru a estima ce intrări vor avea cel mai mic efect asupra ratelor viitoare de cache, dar ar considera, de asemenea, intrările adăugate foarte recent ca având un număr redus de accesări, ceea ce poate duce la cache putinei.

„Utilizat cel mai puțin recent” preferă să elimine intrările din cache care nu au fost folosite de ceva vreme. Aceasta presupune că acestea nu sunt utilizate în prezent, dar nu ia în considerare dacă au fost utilizate intens cu ceva timp în urmă. „Utilizat cel mai recent” preferă să elimine cele mai recente intrări din cache utilizate, presupunând că acestea au fost folosite și nu vor mai fi folosite din nou. Cea mai bună abordare este, în general, o combinație a tuturor celor trei, informată de statisticile de utilizare.

Informații învechite și riscuri de securitate

Principalul risc al cache-urilor este ca informațiile pe care le conțin pot deveni învechite. O intrare în cache este considerată cave atunci când datele originale au fost actualizate, lăsând intrarea în cache neactualizată. Este important să verificați în mod regulat dacă copia live difuzată se potrivește în continuare cu copia stocată în cache.

În special pentru site-uri web, este, de asemenea, extrem de important să identificați ce date pot și nu pot fi stocate în cache. De exemplu, este perfect ca un fișier JavaScript mare neschimbat să fie stocat în cache. Acest lucru scutește utilizatorul de a-l descărca de fiecare dată și poate beneficia chiar și de alți utilizatori deserviți de aceeași memorie cache. Totuși, nu puteți stoca în cache datele specifice sesiunii. Imaginează-ți ce s-ar întâmpla dacă ai naviga la o aplicație de mesagerie în timp ce te-ai conectat ca tine, doar pentru a descoperi că ai primit o versiune în cache a mesajelor altui utilizator. Din fericire, serverele web pot specifica ce resurse pot și nu pot fi stocate în cache, iar aceste probleme sunt în general bine cunoscute, așa că există puține probleme ca aceasta.

Concluzie

Un cache este o porțiune de memorie care poate stoca unele date utilizate recent într-o metodă de stocare care este mai rapid de accesat decât ar fi pentru a finaliza din nou procesul normal de acces la date. Un cache este de obicei limitat în capacitate, ceea ce înseamnă că trebuie să elimine intrările odată ce este plin. Cache-urile sunt în general transparente pentru utilizator, ceea ce înseamnă că latența este singurul indiciu că rezultatul a fost difuzat printr-un cache.