Tipuri de cache - abstract, pagina 2

Afișarea sectoarelor OP din cache.

Acest tip de afișare este utilizat în toate computerele moderne și faptul că întregul PO este împărțit în sectoare, constând dintr-un număr fix de blocuri consecutive. Cache-ul este, de asemenea, împărțit în sectoare care conțin același număr de rânduri. Localizarea blocurilor din sectorul OP și din sectorul cache este complet identică. Sectorul este mapat în memoria cache într-o manieră asociativă, orice sector din OU poate fi plasat în orice sector al cache-ului. Astfel, în timpul funcționării ALU este desenată în căutarea următoarei instrucțiuni PO, rezultând în cache este încărcat (în absența există un bloc care conține această comandă), un sector de date de la OP, care în conformitate cu principiul localității, obținându-se astfel o semnificativă măriți viteza sistemului.

Modelul cache ierarhic

În mod tipic, memoria cache are o arhitectură pe mai multe niveluri. De exemplu, într-un 32 Kbyte intern (în CPU de bază) și 1 MB extern (la carcasa CPU sau pe placa de sistem) cache mai întâi să fie considerat nivelul cache 1 (L1), iar al doilea - memoria cache 2 (L2). În sistemele moderne de servere, numărul de nivele de memorie cache poate fi de până la patru, deși cea mai comună este o schemă cu două sau trei niveluri.

În unele arhitecturi de procesoare, nivelul cache 1 este împărțit într-un cache de instrucțiuni (Instruction Cache, I-cache) și cache de date (date cache, D-cache), în care, opțional aceeași dimensiune. Din punctul de vedere al design de circuit mai ușor și mai ieftin de a proiecta un I-cache separat și D-cache: preluarea instrucțiunii transporta I-box și regăsirea datelor - E-box și F-box, cu toate că, în ambele cazuri, sunt utilizate A-box și C-box. Toate aceste blocuri sunt mari, iar furnizarea lor simultană și rapidă de acces la o cache este problematică. În plus, acest lucru ar necesita în mod inevitabil o creștere a numărului de porturi de acces, ceea ce complică și sarcina de proiectare.

Din moment ce I-cache-ul și D-cache-ul trebuie să furnizeze întârzieri de acces foarte scăzute (acest lucru este valabil pentru orice cache L1), trebuie să sacrifice volumul lor - de obicei de la 16 la 32 KB. La urma urmei, cu cât dimensiunea cache-ului este mai mică, cu atât este mai ușor să se obțină o latență scăzută în acces.

Nivelul 2 de memorie cache, de regulă, este unificat, adică poate conține atât comenzi, cât și date. În cazul în care este construit în nucleul procesorului, vorbim de S-cache (Cache secundar, cache secundar), în caz contrar - pe B-cache (backup cache, cache conservate). În procesoarele server moderne, cantitatea de S-cache este de la unu la mai multe megabyte, iar B-cache-ul este de până la 64 MB. Dacă designul procesorului furnizează prezența unei memorii cache de nivel 3 încorporat, atunci se numește T-cache (Cache ternar, cache terțiar). De regulă, fiecare nivel ulterior al cache-ului este mai lent, dar mai mare decât cel precedent în funcție de volum. Dacă B-cache-ul este prezent în sistem (ca ultimul nivel al modelului cache), acesta poate fi monitorizat atât de procesor, cât și de setul de logică a sistemului.

Dacă în momentul executării unei anumite comenzi în registre nu există date pentru aceasta, atunci ele vor fi solicitate de la cel mai apropiat nivel al cache-ului, adică din cache-ul D. Dacă acestea lipsesc în D-Cache, cererea este trimisă în S-cache etc. În cel mai rău caz, datele vor fi livrate direct din memorie. Cu toate acestea, este posibilă și chiar mai tristă versiune, când subsistemul de gestionare a memoriei virtuale a sistemului de operare (OS) are timp să-i înlocuiască în fișierul de swap de pe hard disk. În cazul livrării de timp pierderi de memorie obținerea de date relevante pot fi de la zeci la sute de cicluri CPU, iar în cazul constatării datelor de pe hard disk este în căutarea pentru milioane de cicluri.

Dimensiunea liniei de cache și eticheta

Dimensiunea etichetei cache depinde de trei factori principali: cantitatea de memorie cache, suma maximă stocată în memorie RAM și asocierea cache-ului. Din punct de vedere matematic, această dimensiune este calculată prin formula:

unde Stag este dimensiunea unei etichete cache, în biți; Smem - suma maximă memorată RAM, în octeți; Scache - cantitatea de memorie cache, în octeți; A - asociativitatea memoriei cache, în canale.

Rezultă că pentru un sistem cu 1 GB de memorie RAM și 1 MB de memorie cache cu asociere cu două canale, sunt necesare 11 biți pentru fiecare etichetă. Este demn de remarcat faptul că dimensiunea reală a liniei de cache nu afectează dimensiunea etichetei în nici un fel, dar afectează invers numărul de etichete. Trebuie să se înțeleagă că dimensiunea liniei cache nu este semnificativ pentru a face mai mici de magistrala de date sistem de biți, dar creșterea repetată în mărime va cauza colmatarea cache de informații inutile excesive și inutile pe sarcină magistrala de sistem și de autobuz de memorie. În plus, suma maximă cache a cache-ului nu trebuie să corespundă cu cantitatea maximă posibilă de memorie RAM instalată în sistem. Dacă există o situație în care există mai multă memorie RAM decât cea care poate fi stocată în memoria cache, atunci memoria cache va conține numai informații din segmentul inferior al memoriei RAM. Aceasta a fost situația cu platforma Socket7 / Super7. chipset-uri pentru această platformă permite utilizarea unor cantități mari de RAM (256 MB la 1 GB), în timp ce volumul din cache a fost adesea limitată la primele 64 MB (este un B-cache, care este situat pe placa de bază), datorită utilizării ieftine 8 microcipuri de tip "bit", etichetate cu SRAM (2 biți din care au fost rezervate pentru indicatorii valabilității și variației liniei). Acest lucru a dus la o scădere semnificativă a productivității.

Să luăm în considerare mecanismul de funcționare a memoriei cache a diferitelor tipuri de asociativitate. Să presupunem că există un model abstract cu opt linii de cache și 64 de linii echivalente de memorie RAM. Este necesar să introduceți linia cache 9 a RAM (rețineți că toate liniile sunt numerotate de la zero și de la creșterea). Într-un model cu mapare directă, acest șir poate avea loc doar un singur: .. 9 mod 8 = 1 (calculul restului diviziunii întreg), m th rând 1. Dacă luăm în considerare modelul cu un set asociativ cu două canale, linia poate lua una din cele două locuri : 9 mod 4 = 1, adică, linia 1 a oricărui canal (segment). Un model complet asociativ oferă libertate pentru plasare, iar această linie poate înlocui oricare dintre cele opt disponibile. Cu alte cuvinte, de fapt, există 8 canale, fiecare dintre acestea fiind alcătuită dintr-o singură linie.

Nici unul dintre modelele de mai sus nu va permite, desigur, să cache mai multe linii decât el este fizic capabil de a găzdui, ele oferă doar o varietate de opțiuni, diferite utilizarea eficientă a balanței de memorie cache și viteza de acces la acesta.

Tipuri de conexiuni cache

Numărul de porturi de citire / scriere din memoria cache reprezintă un indicator al numărului de operații simultane de citire / scriere care pot fi procesate. Deși nu există cerințe stricte, ar trebui să fie urmărită o anumită corespondență cu setul de dispozitive funcționale ale procesorului, deoarece absența unui port liber în timpul executării comenzii va conduce la perioade de forțare forțate.

Există două modalități principale de a conecta memoria cache la CPU pentru citire: prin și prin (Look-Through și Look-Aside). Esența primul în care, dacă este necesar, datele sunt mai întâi solicitată de la controlerul de cache de cel mai înalt nivel, care verifică starea de tag-uri conectate, și returnează orice informații necesare sau un răspuns negativ și, în acest caz, cererea este redirecționat către inferior ierarhia cache de nivel sau în memoria operativă. Când se implementează a doua metodă de citire, cererea este trimisă simultan atât la controlerul de cache de la cel mai înalt nivel, cât și la controalele de memorie cache rămase și la controlerul de memorie. Dezavantajul primei metode este evident: în absența informațiilor din cache-ul la nivel înalt, cererea trebuie repetată, iar timpul de inactivitate al procesorului crește. Un dezavantaj al doua abordare - operațiunile de înaltă redundanță și, în consecință, „înfundarea“ autobuz CPU interne și un autobuz sistem de informații inutile. Este logic să presupunem că în cazul în care memoria cache L1 este schema optima de trecere, pentru T-cache sau schema B-colaterală cache poate fi mai profitabile. Pentru S-cache, alegerea este ambiguă.

Există și cache-uri locale și la distanță. Numele local este o memorie cache situată fie în nucleul procesorului, fie pe același substrat de siliciu sau în cazul procesorului, aflat la distanță - aflat pe placa sistem. În consecință, cache-ul local este controlat de controlerul din centrul procesorului, iar cel de la distanță - de către NMS-ul plăcii de bază. Cache-ul local este preferabil din punct de vedere al performanței, deoarece interfața cu cache-ul de la distanță este de obicei multiplexată cu magistrala de sistem. Pe de o parte, când un alt procesor captează autobuzul sistem comun sau orice controler periferic accesează direct memoria, memoria cache-ului la distanță poate fi temporar indisponibilă. Pe de altă parte, acest cache este mai ușor de utilizat în sistemele multiprocesor.

Există două modalități obișnuite de a scrie în memoria cache: write-through și write-back. În primul caz, informațiile sunt stocate simultan atât în ​​nivelul curent, cât și în cel inferior al ierarhiei memoriei cache (sau direct în memoria RAM, în absența acesteia). În al doilea - datele sunt stocate numai în nivelul actual al cache, în timp ce o situație apare atunci când informațiile din memoria cache și memoria principală sunt diferite, acestea din urmă devine caducă. Pentru ca informațiile să fie pierdute ireversibil când se resetează cache-ul, se adaugă câte un "bit murdar" (altfel cunoscut sub numele de modificare) în fiecare linie cache. Este necesar să se indice dacă informațiile din memoria cache se află în memoria RAM și dacă aceasta ar trebui să fie scrisă în memorie atunci când memoria cache se resetează.

De asemenea, ar trebui să se menționeze metoda de alocare de scriere. Când scrieți date în memoria RAM, există adesea o situație în care datele înregistrate pot fi necesare în curând, iar apoi acestea trebuie să fie descărcate pentru o perioadă destul de lungă. Rezistența unei înregistrări vă permite să rezolvați parțial această problemă: datele sunt scrise nu în memoria RAM, ci în memoria cache. Linia cache, în locul căreia sunt scrise datele, este complet descărcată în memoria principală. Din moment ce datele nou înregistrate nu sunt, de obicei, suficiente pentru a forma o linie completă de cache, informația lipsă este solicitată din memoria RAM. Când este primit, se scrie o nouă linie și eticheta este actualizată. Există câteva avantaje sau dezavantaje ale acestei abordări - uneori acest lucru poate genera o ușoară creștere a performanței, dar poate duce la blocarea cache-ului cu informații inutile.

Creșterea cache-ului și testareaINELAMD

Motivul principal pentru creșterea mărimii cache-ului încorporat poate fi acela că memoria cache din procesoarele moderne rulează la aceeași viteză ca și procesorul propriu-zis. Frecvența procesorului în acest caz nu este mai mică de 3200 MHz. O memorie cache mai mare permite procesorului să păstreze piese mari ale codului gata de executat. Această arhitectură a procesoarelor se concentrează pe reducerea întârzierilor asociate cu perioada de nefuncționare a procesorului în anticiparea datelor. Programele moderne, inclusiv jocurile, utilizează părți importante ale codului, care trebuie extrase din memoria sistemului la prima solicitare a procesorului. Reducerea timpului petrecut pentru transferul datelor din memorie către procesor este o metodă sigură de creștere a performanței aplicațiilor care necesită o interacțiune intensă cu memoria. Cache-ul L3 are o latență ușor mai mare decât L 1 și 2, ceea ce este destul de natural. Deși este mai lent, este încă mult mai rapid decât memoria regulată. Nu toate aplicațiile beneficiază de creșterea volumului sau vitezei cache-ului. Depinde foarte mult de natura aplicației.

Dacă o cantitate mare de cache-uri încorporate este bună, atunci ce a ținut Intel și AMD din această strategie mai devreme? Răspunsul simplu este costul ridicat al unei astfel de soluții. Rezervarea spațiului pentru cache este foarte costisitoare. Standardul Northwood de 3.2GHz conține 55 de milioane de tranzistoare. Adăugând 2048 KB de cache L3, Intel va crește numărul de tranzistori la 167 milioane. Un calcul matematic simplu ne va arăta că EE este unul dintre procesoarele cele mai scumpe.

Site-ul AnandTech a efectuat teste comparative a două sisteme, fiecare dintre acestea conținând două procesoare - Intel Xeon 3,6 GHz într-un singur caz și AMD Opteron 250 (2,4 GHz) - în cealaltă. Testarea a fost efectuată pentru aplicațiile ColdFusion MX 6.1, PHP 4.3.9 și Microsoft .NET 1.1. Configurațiile au fost după cum urmează:

- Dual Opteron 250;

- 2 GB DDR PC3200 (Kingston KRX3200AK2);

- placa de baza Tyan K8W;

- 1 hard IDE 40 GB 7200 rpm, cache 8 MB

- Dual Xeon 3,6 GHz;

- placa de baza Intel SE7520AF2;

- 1 hard IDE 40 GB 7200 rpm, cache 8 MB

Pe aplicatii ColdFusion si PHP nu sunt optimizate pentru o anumită arhitectură, un pic mai repede (2,5-3%) au fost Opteron'y, dar testul cu .NET a demonstrat un angajament coerent pentru platforma Microsoft Intel, care a permis perechea de a trage înainte pe Xeon'ov 8%. Concluzia este evidentă: folosind software-ul Microsoft pentru aplicații web, este logic să aleagă procesoare Intel, în alte cazuri, cea mai bună alegere multiplă este AMD.

Analiza materialului de mai sus ne permite să tragem concluzia că, în conformitate cu teoriile canonice producătorii moderne utilizează pe scară largă a memoriei cache în construcția de noi procesoare. În multe privințe, performanțele lor superioare în viteză se realizează prin utilizarea cache-ului în al doilea și chiar al treilea nivel. Acest lucru confirmă calculele teoretice ale Universitatea Harvard, care, având în vedere principiul informațiilor locale din computerele moderne folosesc un tip mixt de memorie cache permite pentru a obține rezultate excelente în performanța procesorului și reduce frecvența de a avea pentru a merge în memoria principală.

Există perspective largi pentru cache în continuare aplicarea într-o nouă generație de mașini, dar problemele existente imposibilitatea unei creșteri infinite în cache, precum și costul ridicat de producție a memoriei cache pe un singur cip cu procesorul stabilește întrebările designeri cu privire la o calitate mai degrabă decât o modificare cantitativă, sau să sară în principiile, sau procesoare cache ogranizatsii ale viitorului.

Următoarele materiale au fost utilizate pentru această lucrare:

---- 9. Prelegere: Organizarea memoriei sistemului informatic

Articole similare