CPU ir neticami sarežģīti zvēri. Ir milzīgs skaits savstarpēji savienotu detaļu, kurām visām ir jāstrādā ideālā saskaņotībā, lai sasniegtu mūsu redzamo veiktspējas līmeni. Atmiņas veiktspēja ir galvenais mūsdienu CPU veiktspējas faktors, jo īpaši kā ierobežojošs faktors.
Kāpēc atmiņas ātrums ir tik svarīgs?
CPU ir neticami ātri, un jaunākās paaudzes darbojas ar 5,7 GHz frekvenci, ja tie ir pienācīgi atdzesēti. Tas ļauj viņiem katru sekundi veikt 5,7 miljardus operāciju. Daudzas no šīm darbībām veic darbības ar noteikta veida datiem, kas jāsaglabā atmiņā.
Galvenā sistēmas atmiņa, kas pazīstama kā RAM, ir arī ļoti ātra. Diemžēl tas ir ļoti ātrs, ja salīdzina ar jebko citu, izņemot centrālo procesoru. Mūsdienu augstākās klases RAM absolūtais latentums ir aptuveni 60 nanosekundes. Diemžēl tas nozīmē aptuveni 342 CPU ciklus. Lai paātrinātu piekļuvi atmiņai, tiek izmantota CPU kešatmiņa, kas dinamiski saglabā datus. Šī kešatmiņa atrodas pašā CPU diskā un izmanto SRAM šūnas, nevis DRAM šūnas, padarot to daudz ātrāku. Diemžēl arī CPU kešatmiņa ir daudz mazāka nekā sistēmas RAM, kopumā nesasniedzot pat 100 MB. Tomēr, neskatoties uz tās nelielo izmēru, daudzpakāpju CPU kešatmiņas sistēma ievērojami palielina sistēmas veiktspēju.
Šeit nāk virtuālā atmiņa, lai visu sajauktu
Mūsdienu datori izmanto sistēmu, ko sauc par virtuālo atmiņu. Tā vietā, lai procesiem piešķirtu fiziskās atmiņas adreses, tiek izmantotas virtuālās atmiņas adreses. Katram procesam ir sava virtuālās atmiņas adrešu telpa. Tam ir divas priekšrocības. Pirmkārt, tas nodrošina vienkāršu atmiņu nošķiršanu starp atmiņu, kas pieder vienam procesam, un atmiņu, kas pieder citam procesam. Tas palīdz novērst uzbrukumus, kad ļaunprātīga programmatūra nolasa datus no citas programmatūras atmiņas, iespējams, piekļūstot sensitīvai informācijai. Tas arī slēpj fiziskās atmiņas struktūru no procesa. Tas ļauj CPU pārvietot reti izmantotos atmiņas bitus uz peidžeru failu krātuvē, to ne vienmēr atvienojot no virtuālās RAM. Tas ļauj datoram saudzīgi pārvaldīt scenārijus, kuros nepieciešams vairāk RAM, nekā ir fiziski. Bez virtuālās atmiņas,
Diemžēl, ja izmantojat virtuālās atmiņas adreses, datoram šīs virtuālās atmiņas adreses faktiski ir jāpārtulko fiziskās atmiņas adresēs, lai nolasītu datus. Tam ir nepieciešama tabula, kurā saglabāti visi virtuālās atmiņas adrešu tulkojumi fiziskās atmiņas adresēs. Tās lielums ir tieši atkarīgs no izmantotās RAM apjoma. Tas parasti ir diezgan mazs, vismaz salīdzinot ar sistēmas RAM ietilpību. Diemžēl, ja RAM saglabājat tulkojumu starp virtuālajām adresēm un fiziskajām adresēm, katram RAM pieprasījumam ir jāveic divi pieprasījumi RAM. Viens, lai atrastu fizisko adresi, kuru pieprasīt, un pēc tam otrs, lai faktiski piekļūtu šai vietai.
Ievadiet tulkošanas buferi
Šīs problēmas risinājums ir ātrāk saglabāt tulkošanas tabulu. CPU kešatmiņa lieliski atbilstu rēķinam, vismaz no ātruma viedokļa. Tomēr problēma ir tā, ka CPU kešatmiņa ir niecīga un jau ir ļoti izmantota. Tabula ne tikai neietilpst kešatmiņā, bet arī traucētu tās jau tā veiktspēju noteicošo izmantošanu.
Protams, ja kešatmiņas princips jau darbojas piekļuvei atmiņai, kāpēc gan to neatkārtot tulkošanas tabulai? Un tieši tas ir Translation Lookaside Buffer jeb TLB. Tā ir liela ātruma kešatmiņa jaunāko adrešu tulkojumiem. Tas nav pietiekami liels, lai uzglabātu visu tabulu, taču tā mazais izmērs nozīmē, ka tas var reaģēt ļoti ātri, viena pulksteņa cikla laikā.
Jebkurš atmiņas pieprasījums tiek nosūtīts caur TLB. Ja ir TLB trāpījums, tas var nodrošināt faktiskā pieprasījuma fiziskās atmiņas adresi, parasti pievienojot vienu latentuma ciklu. Ja ir TLB miss, uzmeklēšana jāveic no galvenās atmiņas. Ir neliels veiktspējas sods par TLB izlaidumu aptuveni 5 ciklu apmērā, kas ir vairāk nekā aizēnots atmiņas piekļuves latentuma dēļ. Kad adreses tulkojums ir izgūts no sistēmas RAM, tas tiek iespiests TLB un pēc tam pieprasījums tiek atkārtots ar tūlītēju TLB trāpījumu.
Piezīme: TLB izlikšanai ir dažādas shēmas. Daži var izmantot shēmu First In, First Out vai FIFO. Citi var izmantot vismazāk izmantoto vai LFU shēmu.
Retos gadījumos, kad adreses tulkošanas tabulā nav ieraksta, tiek izraisīta lapas kļūda, jo pieprasītie dati neatrodas RAM. Pēc tam operētājsistēmai ir jārisina kļūda un jāpārsūta dati no krātuves uz RAM, lai pieprasījumu varētu turpināt.
Secinājums
Translation Lookaside Buffer jeb TLB ir liela ātruma CPU kešatmiņa, kas paredzēta jaunāko adrešu tulkojumu kešatmiņai no lapas faila sistēmas RAM. Tas ir nepieciešams, jo virtuālās atmiņas sistēmām, kā tas ir ieviests visos mūsdienu datoros, būtu nepieciešami divi pieprasījumi RAM katram pieprasījumam RAM. Viens, lai pārvērstu virtuālās atmiņas adresi fiziskās atmiņas adresē, un otrs, lai faktiski piekļūtu fiziskajai adresei. Kešatmiņā saglabājot jaunākos tulkojumus, var ievērojami samazināt TLB trāpījumu atmiņas latentumu.
Jārūpējas par to, lai kešatmiņā saglabātie tulkojumi būtu atbilstoši pašreiz aktīvajam procesam. Tā kā katram procesam ir atšķirīga virtuālā adrešu telpa, tos nevar izmantot atkārtoti. Ievainojamības Meltdown cēlonis bija tās stingra ierobežošana.