Bafer asocijativnog prevođenja

S Vikipedije, slobodne enciklopedije

Bafer asocijativnog prevođenja (TLB) (engl. translation lookaside buffer) je keš memorija koja koristi MMU da poboljša brzinu prevoda virtuelnog adresnog prostora. Svi trenutni desktop, laptop i server procesori sadrže jedan ili više TLB-a u hardveru za upravljanje memorijom, i on je skoro uvek prisutan u bilo kojem hardveru koji podržava straničenje ili segmentaciju virtuelne memorije.

TLB je ponekad implementiran kao konteksno-adresibilna memorija (CAM). Ključ pretrage konteksno-adresibilne memorije je virtuelna adresa a rezultat pretrage je fizička adresa. Ukoliko je tražena adresa prisutna u TLB, CAM pretraga brzo daje podudaranje i preuzeta fizička adresa može da se koristi za pristup memoriji. Ovo se naziva TLB pogodak. Ukoliko tražena adresa nije u TLB-u, to je promašaj, i prevod se nastavlja pretragom tabele stranica u procesu koji se naziva engl. page walk. Page walk je skup proces, jer podrazumeva čitanje sadržaja više memorijskih lokacija i koristi ih za izračunavanje fizičke adrese. Nakon što je utvrđena fizička adresa pomoću Page walk-a, virtuelna adresa preko mapiranja fizičke adrese je unesena u TLB. Operacija više zajedničkih TLB implementacija koristi heš tabelu, slično kao i implementacija CAM-a.[1]

Pregled[uredi | uredi izvor]

Bafer asocijativnog prevođenja (TLB) ima fiksiran broj slotova koji sadrže sledeće unose:[2]

  • tabele stranica, koje mapiraju virtuelne adrese u
  • Segmentne tabele, koje mapiraju virtuelne adrese u
    • segmentne adrese
    • srednje tabele adresa
    • aderse tabela stranica.

Virtuelna memorija je prostor gledano od strane procesora. Ovaj prostor je često segmentiran u stranicama fiksne veličine. Tabele stranica (obično se čuvaju u memoriji) prate gde se skladište virtualne stranice u fizičkoj memoriji. TLB je keš od tabele stanica, to jest, samo podskup sadržaja tabele stranice je održan u TLB.[3]

Referenciranje na fizičke memorijske adrese, TLB se može nalaziti između CPU-a i keša procesora, između keša procesora i glavne memroje, ili između više-nivoa keša. Postavljanje određuje da li će keš koristiti fizičko ili virtuelno adresiranje. Ako je keš virtuelno adresiran, zahtev je poslat direktno od procesora kešu, i TLB je pristupljeno samo na promašaju keša. Ako je keš fizički adresiran, procesor radi pronalaženje TLB-a na svakoj memorijskoj operaciji i rezultujuća fizička adresa se šalje kešu.

U Harvardskoj arhitekturi, deli virtuelni adresni prostor ili hardverski pristup memoriji može da postoji za instrukcije i podatke. To može da dovede do različitih bafera asocijativnog prevođenja za svaku vrstu pristupam kao ITLB i DTLB.

Zajednička optimizacija za fizički adresiran keš je da paralelno obavi TLB pretragu sa keš pristupom. Bitovi niskog reda svake virtuelne memorije (tj. u virtuelnoj memoriji) sistem ima stranice od 4 KB, 12 najižih bitova virtuelne memorije) predstavljaju ofset na željenu adresu unutar strane, i na taj način oni se ne menjaju u prevodu vituelno-u-fizičko. Tokom keš pristupa, obavljaju se dva koraka: indeks se koristi da pronađe stavku u keš memoriji, a zatim oznake za pronađene keš linije se porede. Ako je keš struktuiran na takav način da može biti indeksiran koristeći samo bitove koji se ne menjaju u prevodu, keš može da obavlja svoju "indeks" operaciju, dok TLB prevodi gornje bitove na adresu. Onda, preveda adresa od TLB -a se prebaci na keš. Keš vrši poređenje oznake da odredi da li je ovaj pristup bio pogodak ili promašaj. Moguće je da se izvrši TLB pronalaženje paralelno sa keš pristupom čak i ako keš mora biti indeksiran korišćenjem nekih bitova koji mogu da se menjaju na adresi prevoda; videti sekciju adresne promene u keš članku za više detalja o virtuelnom adresiranju koje se odnosi na keš i TLB.

Posledice performansi[uredi | uredi izvor]

CPU mora da pristupi glavnoj memoriji za:

  • instukcije keš promašaja
  • podatke keš promašaja
  • TLB promašaj

Treći slučaj (najjednostavniji slučaj), gde je željena informacija zapravo u kešu, ali informacija za virtuelno-u-fizičko prevođenje nije u TLB. Svi su podjednako spori, pa program "reguliše", TLB će se izvoditi podjednako loše kao i jedna instrukcija regulisanja ili keš podatak. Zato je važno dobro funkcionisanje TLB-a.

Višestruki TLB[uredi | uredi izvor]

Slično kešu, TLB može imati više nivoa. CPU može biti (sada je uglanom tako) ugrađen sa višestrukim TLB-om, na primer mali "L1" TLB (potencijalno potpuno asocijativan) je ekstremno brz, a veći "L2" TLB koji je na neki način sporiji. Kada se ITLB i DTLB koriste, procesor može imati tri (ITLB1, DTLB1, TLB2) ili četiri bafera asocijativnog prevođenja.

Na primer, Intelova Nehalem mikroarhihektura ima četvorosmerni skup asocijativnog L1 DTLB sa unosom za 4 KiB strane i 32 unosom za 2/4 MiB strane, L1 ITLB sa 128 unosom za 4 KiB strane koriste četvorosmernu asocijativnost i 14 potpuno asocijativnih unosa za 2/4 MiB strane (oba dela ITLB su podeljena statički između dve niti) [4] and a unified 512-entry L2 TLB for 4 KiB pages,[5] oba 4-struko asocijativna.[6]

Neki TLB mogu imati odvojene sekcije za male i velike stranice.

Rukovanje TLB promašajima[uredi | uredi izvor]

Dve šeme za rukovanje TLB promašajima se obično mogu naći u savremenim arhitekturama:

  • Sa hardverskim upravljanjem TLB, procesor automatski prolazi kroz tabele stranica (koristeći CR3 registar na x86) da vidi da li ima validnog unosa za specifičnu virtuelnu adresu. Ako unos postoji, dovodi se u TLB i pristup TLB-a se ponovo pokušava: ovog puta pogodiće se pristup, i program može normalno da se procesira. Ako CPU pronađe ne validan unos za virtuelnu adresu u tabeli stranica, on podiže izuzetak greške strane, kojim Operativni sistem mora da rukuje. Rukovanje greškama stranice obično podrazumeva dovođenje željenog podatka u fizičku memoriju, postavljanje ulaza tabele strana na mapiranu netačnu virtuelnu adresu na odgovarajuću fizičku adresu, i ponovno pokretanje programa. Sa hardverskim upravljanjem baferom asocijativnog prevođenja, format TLB unosa nije vidljiv softveru, pa se može promeniti od procesora do procesora bez izazivanja gubitka kompatibilnosti za programe.
  • Sa softverskim upravljanjem TLB-om, TLB promašaj generiše izuzetak - "TLB promašaj", i kod OS-a je odgovoran za pretragu tabele stranica i obavljanje prevođenja u softveru. Operativni sistem zatim učitava prevod u TLB i restartuje program sa izuzetkom koje je izazvao TLB promašaj. Kao i kod hardverskog upravljanja TLB-om, ako OS pronađe ne validan prevod u tabeli stranica, javiće se greška stranice, i prema tome OS mora da rukuje njom. Skup instrukcija procesora koji ima softversko upravljanje TLB-om ima instrukcije koje dozvoljavaju učitavanje unosa u bilo koji slot u TLB-u. Format TLVunosa je definisan kao deo skupa instrukcija arhitekture (ISA)[7] MIPS arhihektura precizira softversko upravljanje TLB-om;[8] SPARC V9 arhihektura dozvoljava implementaciju SPARC V9 da nema MMU, MMU sa softverskim upravljanjem TLB-om, ili MMU sa hardverskim TLB upravljanjem,[9] i UltraSPARC arhihektura precizira softversko TLB upravljanje;.[10]

Itanium arhitektura pruža mogućnost korišćenja softverskog ili hardverskog upravljanja baferom asocijativnog prevođenja.[11]

U Alpha arhihekturi TLB-om se upravlja u PALcode, pre nego u OS-u. PALcode za procesor može biti specifičan za procesor i operativni sistem, ovo omogućava da različite verzije PALcode sprovedu različite formate tabele stranica za različite operativne sisteme, bez zahteva tog TLB formata i uputstva za kontrolu TLB -a.[12]

Tipičan TLB[uredi | uredi izvor]

Ovo su tipične performanse nivoa TLB-a:[13]

  • veličina: 12—4,096 unosa
  • vreme pogotka: 0.5—1 ciklus radnog takta
  • kazna promašaja: 10—100 ciklusa radnog takta
  • stopa promašaja: 0.01—1%

Ako TLB pogodak uzme 1 ciklus radnog takta, promašaj uzme 30 ciklusa radnog takta, i stopa promašaja je 1%, efektivna stopa memorijskog ciklusa je prosek od 1 × 0.99 + (1 + 30) × 0.01 = 1.30 (1.30 ciklusa radnog takta po memorijskom pristupu).

Konteksni prekidač[uredi | uredi izvor]

Na konteksnom prekidaču, neki TLB unosi mogu postati nevažeći, jer je virtuelno-u-fizičko mapiranje drugačije. najjednostavnija strategija da se ovo reši je da se potpuno isprazni TLB. Noviji procesori koriste bolje strtegije markirajući koji proces unosa je za. To znači da ako drugi proces traje samo kratko vreme i skoči nazad na prvi proces, ipak može imati validne stavke, time štedeći vreme da ih ponovo učita.

Na primer u Alpha 21264, svaki TLB unos je označen sa "brojem adresnog prostora" (ASN), i samo TLB unosi sa ASN podudaranjem trenutnog zadatka se smatraju važećim. Drugi primer je Intel Pentium Pro, PGE zastavica u registru CR4 i G zastavica stranice-direktorijuma ili stranice-tabele unosa može da se koristi za sprečavanje da često korišćene stranice budu automatski poništene u TLB-u na zamenu taskova ili učitavanje registra CR3.

Dok je selektivno pražnjenje TLB-a opcija u softverskom upravljanju TLB-om, jedina opcija u nekim hardverskim TLB-a (na primer, TLB u Intel 80386)) je kompletno pražnjenje TLB na konteksnom prekidaču. Drugi hardverski baferi asocijativnog prevođenja (npr, TLB u Intel 80486 i kasnije x86 procesori, i TLB uARM procesorima) omogućavaju pražnjenje pojedinih stavki iz indeksiranih TLB od stane virtuelne adrese.

Virtuelizacija i x86 TLB[uredi | uredi izvor]

Sa pojavom virtualizacije za konsolidaciju servera, mnogo truda je otišlo čineći x86 arhitekturu lakšom za virtuelizaciju i da se obezbede bolje performanse virtuelnih mašina na x86 hardveru.[14][15] Na dugoj listi takvih promena x86 arhitekture, TLB je poslednja.

Normalno, unosi u x86 TLB nisu povezani sa bilo kojim adresnim prostorom. Dakle, svaki put kada se vrši promena u adresnom prostoru, kao što je kontekstni prekidač, ceo TLB mora da se isprazni. Održavanje oznake koja će povezivati svaki TLB unos sa adresnim prostorom u softveru i upoređujući ovu oznaku tokom TLB pretrage i TLB pražnjenja je veoma skupo, posebno jer je x86 TLB dizajniran da radi sa veoma malim kašnjenjem i potpuno u hardveru. Godine 2008., i Intel (Nehalem)[16] i AMD (SVM)[17] su uveli oznake kao deo TLB ulaska i namenski hardver koji proverava oznake tokom pretraživanja. Iako nisu u potpunosti iskorišćeni, predviđeno je da u budućnosti, ove oznake će identifikovati adresni prostor na kome svaki TLB unos pripada. Stoga konteksni prekidač neće rezultovati u TLB pražnjenju; nego samo menja oznaku tekućeg adresnog prostora na oznaku adresnog prostora novog zadatka.

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ Dougan, Cort (4. 1. 1999). „A Quick Introduction to the PPC Memory Management System”. usenix.org. Pristupljeno 11. 12. 2013. 
  2. ^ „Operating Systems: Paging” (PPT). dcs.ed.ac.uk. Pristupljeno 11. 12. 2013. 
  3. ^ Frank
 Uyeda (2009). „Lecture
 7: 
Memory 
Management” (PDF). CSE
120:
 Principles
 of 
Operating 
Systems. UC San Diego. Pristupljeno 4. 12. 2013. 
  4. ^ „Inside Nehalem: Intel's Future Processor and System”. Real World Technologies. 
  5. ^ „Intel Core i7 (Nehalem): Architecture By AMD?”. Tom's Hardware. Pristupljeno 24. 11. 2010. 
  6. ^ „Inside Nehalem: Intel's Future Processor and System”. Real World Technologies. Pristupljeno 24. 11. 2010. 
  7. ^ J. Smith and R. Nair. Virtual Machines: Versatile Platforms for Systems and Processes (The Morgan Kaufmann Series in Computer Architecture and Design). Morgan Kaufmann Publishers Inc., 2005.
  8. ^ Welsh, Matt. „MIPS r2000/r3000 Architecture”. Arhivirano iz originala 14. 10. 2008. g. Pristupljeno 16. 11. 2008. „If no matching TLB entry is found, a TLB miss exception occurs 
  9. ^ SPARC International, Inc. The SPARC Architecture Manual, Version 9 (PDF). PTR Prentice Hall. Arhivirano iz originala (PDF) 18. 1. 2012. g. Pristupljeno 18. 12. 2013. 
  10. ^ Microsystems, Sun. UltraSPARC Architecture 2005 (PDF). Draft D0.9.2, 19 Jun 2008. Sun Microsystems. Arhivirano iz originala (PDF) 19. 2. 2009. g. Pristupljeno 18. 12. 2013. 
  11. ^ Virtual Memory in the IA-64 Kernel > Translation Lookaside Buffer
  12. ^ Compaq Computer Corporation. Alpha Architecture Handbook (PDF). Version 4. Compaq Computer Corporation. Arhivirano iz originala (PDF) 9. 10. 2014. g. Pristupljeno 18. 12. 2013. 
  13. ^ Patterson, David A. (2009). Computer Organization And Design. Hardware/Software interface. 4th edition. John L. Hennessy. Burlington, MA 01803, USA: Morgan Kaufmann Publishers. str. 503. ISBN 978-0-12-374493-7. 
  14. ^ D. Abramson, J. Jackson, S. Muthrasanallur, G. Neiger, G. Regnier, R. Sankaran, I. Schoinas, R. Uhlig, B. Vembu, and J. Wiegert. Intel Virtualization Technology for Directed I/O. Intel Technology Journal, 10(03):179–192.
  15. ^ Advanced Micro Devices. AMD Secure Virtual Machine Architecture Reference Manual. Advanced Micro Devices, 2008.
  16. ^ G. Neiger, A. Santoni, F. Leung, D. Rodgers, and R. Uhlig. Intel Virtualization Technology: Hardware Support for Efficient Processor Virtualization. Intel Technology Journal, 10(3).
  17. ^ Advanced Micro Devices. AMD Secure Virtual Machine Architecture Reference Manual. Advanced Micro Devices, 2008.

Literatura[uredi | uredi izvor]

  • Patterson, David A. (2009). Computer Organization And Design. Hardware/Software interface. John L. Hennessy (4th izd.). Burlington, MA 01803, USA: Morgan Kaufmann Publishers. str. 503. ISBN 978-0-12-374493-7.