Бафер асоцијативног превођења

С Википедије, слободне енциклопедије

Бафер асоцијативног превођења (TLB) (енгл. translation lookaside buffer) је кеш меморија која користи MMU да побољша брзину превода виртуелног адресног простора. Сви тренутни десктоп, лаптоп и сервер процесори садрже један или више TLB-а у хардверу за управљање меморијом, и он је скоро увек присутан у било којем хардверу који подржава страничење или сегментацију виртуелне меморије.

TLB је понекад имплементиран као контексно-адресибилна меморија (CAM). Кључ претраге контексно-адресибилне меморије је виртуелна адреса а резултат претраге је физичка адреса. Уколико је тражена адреса присутна у TLB, CAM претрага брзо даје подударање и преузета физичка адреса може да се користи за приступ меморији. Ово се назива TLB погодак. Уколико тражена адреса није у TLB-у, то је промашај, и превод се наставља претрагом табеле страница у процесу који се назива енгл. page walk. Page walk је скуп процес, јер подразумева читање садржаја више меморијских локација и користи их за израчунавање физичке адресе. Након што је утврђена физичка адреса помоћу Page walk-а, виртуелна адреса преко мапирања физичке адресе је унесена у TLB. Операција више заједничких TLB имплементација користи хеш табелу, слично као и имплементација CAM-а.[1]

Преглед[уреди | уреди извор]

Бафер асоцијативног превођења (TLB) има фиксиран број слотова који садрже следеће уносе:[2]

  • табеле страница, које мапирају виртуелне адресе у
  • Сегментне табеле, које мапирају виртуелне адресе у
    • сегментне адресе
    • средње табеле адреса
    • адерсе табела страница.

Виртуелна меморија је простор гледано од стране процесора. Овај простор је често сегментиран у страницама фиксне величине. Табеле страница (обично се чувају у меморији) прате где се складиште виртуалне странице у физичкој меморији. TLB је кеш од табеле станица, то јест, само подскуп садржаја табеле странице је одржан у ТЛБ.[3]

Референцирање на физичке меморијске адресе, TLB се може налазити између CPU-a и кеша процесора, између кеша процесора и главне мемроје, или између више-нивоа кеша. Постављање одређује да ли ће кеш користити физичко или виртуелно адресирање. Ако је кеш виртуелно адресиран, захтев је послат директно од процесора кешу, и TLB је приступљено само на промашају кеша. Ако је кеш физички адресиран, процесор ради проналажење ТЛБ-а на свакој меморијској операцији и резултујућа физичка адреса се шаље кешу.

У Харвардској архитектури, дели виртуелни адресни простор или хардверски приступ меморији може да постоји за инструкције и податке. То може да доведе до различитих бафера асоцијативног превођења за сваку врсту приступам као ITLB и DTLB.

Заједничка оптимизација за физички адресиран кеш је да паралелно обави TLB претрагу са кеш приступом. Битови ниског реда сваке виртуелне меморије (тј. у виртуелној меморији) систем има странице од 4 KB, 12 најижих битова виртуелне меморије) представљају офсет на жељену адресу унутар стране, и на тај начин они се не мењају у преводу витуелно-у-физичко. Током кеш приступа, обављају се два корака: индекс се користи да пронађе ставку у кеш меморији, а затим ознаке за пронађене кеш линије се пореде. Ако је кеш структуиран на такав начин да може бити индексиран користећи само битове који се не мењају у преводу, кеш може да обавља своју "индекс" операцију, док TLB преводи горње битове на адресу. Онда, преведа адреса од TLB -а се пребаци на кеш. Кеш врши поређење ознаке да одреди да ли је овај приступ био погодак или промашај. Могуће је да се изврши TLB проналажење паралелно са кеш приступом чак и ако кеш мора бити индексиран коришћењем неких битова који могу да се мењају на адреси превода; видети секцију адресне промене у кеш чланку за више детаља о виртуелном адресирању које се односи на кеш и TLB.

Последице перформанси[уреди | уреди извор]

CPU мора да приступи главној меморији за:

  • инстукције кеш промашаја
  • податке кеш промашаја
  • TLB промашај

Трећи случај (најједноставнији случај), где је жељена информација заправо у кешу, али информација за виртуелно-у-физичко превођење није у TLB. Сви су подједнако спори, па програм "регулише", TLB ће се изводити подједнако лоше као и једна инструкција регулисања или кеш податак. Зато је важно добро функционисање TLB-а.

Вишеструки TLB[уреди | уреди извор]

Слично кешу, TLB може имати више нивоа. CPU може бити (сада је угланом тако) уграђен са вишеструким TLB-ом, на пример мали "L1" TLB (потенцијално потпуно асоцијативан) је екстремно брз, а већи "L2" TLB који је на неки начин спорији. Када се ITLB и DTLB користе, процесор може имати три (ITLB1, DTLB1, TLB2) или четири бафера асоцијативног превођења.

На пример, Интелова Nehalem микроархихектура има четворосмерни скуп асоцијативног L1 DTLB са уносом за 4 KiB стране и 32 уносом за 2/4 MiB стране, L1 ITLB са 128 уносом за 4 KiB стране користе четворосмерну асоцијативност и 14 потпуно асоцијативних уноса за 2/4 MiB стране (оба дела ITLB су подељена статички између две нити) [4] and a unified 512-entry L2 TLB for 4 KiB pages,[5] оба 4-струко асоцијативна.[6]

Неки TLB могу имати одвојене секције за мале и велике странице.

Руковање TLB промашајима[уреди | уреди извор]

Две шеме за руковање TLB промашајима се обично могу наћи у савременим архитектурама:

  • Са хардверским управљањем TLB, процесор аутоматски пролази кроз табеле страница (користећи CR3 регистар на x86) да види да ли има валидног уноса за специфичну виртуелну адресу. Ако унос постоји, доводи се у TLB и приступ TLB-а се поново покушава: овог пута погодиће се приступ, и програм може нормално да се процесира. Ако CPU пронађе не валидан унос за виртуелну адресу у табели страница, он подиже изузетак грешке стране, којим Оперативни систем мора да рукује. Руковање грешкама странице обично подразумева довођење жељеног податка у физичку меморију, постављање улаза табеле страна на мапирану нетачну виртуелну адресу на одговарајућу физичку адресу, и поновно покретање програма. Са хардверским управљањем бафером асоцијативног превођења, формат TLB уноса није видљив софтверу, па се може променити од процесора до процесора без изазивања губитка компатибилности за програме.
  • Са софтверским управљањем TLB-ом, TLB промашај генерише изузетак - "TLB промашај", и код ОС-а је одговоран за претрагу табеле страница и обављање превођења у софтверу. Оперативни систем затим учитава превод у TLB и рестартује програм са изузетком које је изазвао TLB промашај. Као и код хардверског управљања TLB-ом, ако ОС пронађе не валидан превод у табели страница, јавиће се грешка странице, и према томе ОС мора да рукује њом. Скуп инструкција процесора који има софтверско управљање TLB-ом има инструкције које дозвољавају учитавање уноса у било који слот у TLB-у. Формат TLВуноса је дефинисан као део скупа инструкција архитектуре (ISA)[7] MIPS архихектура прецизира софтверско управљање TLB-ом;[8] SPARC V9 архихектура дозвољава имплементацију SPARC V9 да нема MMU, MMU са софтверским управљањем TLB-ом, или MMU са хардверским TLB управљањем,[9] и UltraSPARC архихектура прецизира софтверско TLB управљање;.[10]

Itanium архитектура пружа могућност коришћења софтверског или хардверског управљања бафером асоцијативног превођења.[11]

У Alpha архихектури TLB-ом се управља у PALcode, пре него у ОС-у. PALcode за процесор може бити специфичан за процесор и оперативни систем, ово омогућава да различите верзије PALcode спроведу различите формате табеле страница за различите оперативне системе, без захтева тог TLB формата и упутства за контролу TLB -а.[12]

Типичан TLB[уреди | уреди извор]

Ово су типичне перформансе нивоа TLB-а:[13]

  • величина: 12—4,096 уноса
  • време поготка: 0.5—1 циклус радног такта
  • казна промашаја: 10—100 циклуса радног такта
  • стопа промашаја: 0.01—1%

Ако TLB погодак узме 1 циклус радног такта, промашај узме 30 циклуса радног такта, и стопа промашаја је 1%, ефективна стопа меморијског циклуса је просек од 1 × 0.99 + (1 + 30) × 0.01 = 1.30 (1.30 циклуса радног такта по меморијском приступу).

Контексни прекидач[уреди | уреди извор]

На контексном прекидачу, неки TLB уноси могу постати неважећи, јер је виртуелно-у-физичко мапирање другачије. најједноставнија стратегија да се ово реши је да се потпуно испразни TLB. Новији процесори користе боље стртегије маркирајући који процес уноса је за. То значи да ако други процес траје само кратко време и скочи назад на први процес, ипак може имати валидне ставке, тиме штедећи време да их поново учита.

На пример у Alpha 21264, сваки TLB унос је означен са "бројем адресног простора" (ASN), и само TLB уноси са ASN подударањем тренутног задатка се сматрају важећим. Други пример је Intel Pentium Pro, PGE заставица у регистру CR4 и G заставица странице-директоријума или странице-табеле уноса може да се користи за спречавање да често коришћене странице буду аутоматски поништене у TLB-у на замену таскова или учитавање регистра CR3.

Док је селективно пражњење TLB-а опција у софтверском управљању TLB-ом, једина опција у неким хардверским TLB-а (на пример, TLB у Intel 80386)) је комплетно пражњење TLB на контексном прекидачу. Други хардверски бафери асоцијативног превођења (нпр, TLB у Intel 80486 и касније x86 процесори, и TLB уARM процесорима) омогућавају пражњење појединих ставки из индексираних TLB од стане виртуелне адресе.

Виртуелизација и x86 TLB[уреди | уреди извор]

Са појавом виртуализације за консолидацију сервера, много труда је отишло чинећи x86 архитектуру лакшом за виртуелизацију и да се обезбеде боље перформансе виртуелних машина на x86 хардверу.[14][15] На дугој листи таквих промена x86 архитектуре, TLB је последња.

Нормално, уноси у x86 TLB нису повезани са било којим адресним простором. Дакле, сваки пут када се врши промена у адресном простору, као што је контекстни прекидач, цео TLB мора да се испразни. Одржавање ознаке која ће повезивати сваки TLB унос са адресним простором у софтверу и упоређујући ову ознаку током TLB претраге и TLB пражњења је веома скупо, посебно јер је x86 TLB дизајниран да ради са веома малим кашњењем и потпуно у хардверу. Године 2008., и Intel (Nehalem)[16] и AMD (SVM)[17] су увели ознаке као део TLB уласка и наменски хардвер који проверава ознаке током претраживања. Иако нису у потпуности искоришћени, предвиђено је да у будућности, ове ознаке ће идентификовати адресни простор на коме сваки TLB унос припада. Стога контексни прекидач неће резултовати у TLB пражњењу; него само мења ознаку текућег адресног простора на ознаку адресног простора новог задатка.

Види још[уреди | уреди извор]

Референце[уреди | уреди извор]

  1. ^ Dougan, Cort (4. 1. 1999). „A Quick Introduction to the PPC Memory Management System”. usenix.org. Приступљено 11. 12. 2013. 
  2. ^ „Operating Systems: Paging” (PPT). dcs.ed.ac.uk. Приступљено 11. 12. 2013. 
  3. ^ Frank
 Uyeda (2009). „Lecture
 7: 
Memory 
Management” (PDF). CSE
120:
 Principles
 of 
Operating 
Systems. UC San Diego. Приступљено 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. Приступљено 24. 11. 2010. 
  6. ^ „Inside Nehalem: Intel's Future Processor and System”. Real World Technologies. Приступљено 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”. Архивирано из оригинала 14. 10. 2008. г. Приступљено 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. Архивирано из оригинала (PDF) 18. 1. 2012. г. Приступљено 18. 12. 2013. 
  10. ^ Microsystems, Sun. UltraSPARC Architecture 2005 (PDF). Draft D0.9.2, 19 Jun 2008. Sun Microsystems. Архивирано из оригинала (PDF) 19. 2. 2009. г. Приступљено 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. Архивирано из оригинала (PDF) 9. 10. 2014. г. Приступљено 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. стр. 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.

Литература[уреди | уреди извор]

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