Kešatmiņa
Kešēšana ir datorzinātnē lietots termins. Kešatmiņas (izrunā "cash" /ˈkæʃ/ KASH ) ideja ir ļoti vienkārša: Ļoti bieži kāda aprēķina rezultāta iegūšana ir ļoti laikietilpīga, tāpēc rezultātu glabāšana parasti ir laba ideja. Tiek izmantoti divu veidu datu glabāšanas līdzekļi: Viens parasti ir diezgan liels, bet piekļuve tam ir "lēna"; otram var piekļūt daudz ātrāk, bet parasti tie ir mazi. Pati pamatideja, kas ir pamatā kešēšanai, ir izmantot datu kopiju glabāšanai datu nesēju, kam ir ātra piekļuve. Starp kopiju un oriģinālu nav atšķirības. Piekļuve oriģinālajiem datiem var aizņemt ilgu laiku vai arī tā var būt dārga (piemēram, sarežģītas problēmas rezultāti, kuru risināšana prasa ilgu laiku). Šā iemesla dēļ ir daudz "lētāk" vienkārši izmantot datu kopiju no kešatmiņas. Citādi sakot, kešatmiņa ir pagaidu glabāšanas apgabals, kurā ir bieži izmantoto datu kopijas. Ja šajā kešatmiņā ir datu kopija, ir ātrāk izmantot šo kopiju, nevis atkārtoti iegūt vai aprēķināt oriģinālos datus. Tādējādi vidējais laiks, kas nepieciešams, lai piekļūtu datiem, kļūst īsāks. Jaunas vērtības ievietošana kešatmiņā bieži nozīmē, ka ir jāaizstāj vecāka vērtība. Pastāv dažādas idejas (parasti tās sauc par "stratēģijām"), kā izvēlēties aizvietojamo vērtību.
Buferis ir ļoti līdzīgs kešatmiņai. Tas atšķiras ar to, ka klients, kas piekļūst datiem buferī, zina, ka buferis pastāv; buferi pārvalda lietojumprogramma. Kešatmiņas gadījumā klientam, kas piekļūst datiem, nav jāzina, ka ir kešatmiņa.
Tipiskas datora lietojumprogrammas piekļūst datiem ļoti līdzīgi. Pieņemsim, ka dati ir strukturēti "blokos", kuriem var piekļūt atsevišķi. Kad lietojumprogramma piekļūst blokam, ļoti iespējams, ka tā piekļūst (vai atsaucas) arī blokam, kas ir "tuvs" sākotnējam blokam. To sauc par atsauces lokalitāti. Ir dažādi šāda "lokāluma" veidi. Atsauces lokālums ir viens no iemesliem, kāpēc kešatmiņas labi darbojas daudzās skaitļošanas jomās.
Lai kešatmiņas darbotos labi, tās ir nelielas, salīdzinot ar visu datu apjomu. Jo lielāka kešatmiņa, jo ilgāk tiek meklēts ieraksts. Lielākas kešatmiņas ir arī dārgākas.
Kā darbojas kešatmiņas
Kešatmiņa ir atmiņas bloks, kurā tiek glabāti dati, kas, visticamāk, tiks izmantoti atkārtoti. Kešatmiņu bieži izmanto procesors un cietais disks, kā arī tīmekļa pārlūkprogrammas un tīmekļa serveri.
Kešatmiņu veido daudzi ieraksti, ko sauc par kopfondu. Katrā ierakstā ir datu bits, kas ir citā vietā esoša datu bita kopija. Kešatmiņā parasti izmanto tā saukto dublējošo krātuvi. Salīdzinot ar kešatmiņu, piekļuve rezerves krātuvēm ir lēna vai dārga. Piemēram, diska kešatmiņā kā dublējošo krātuvi izmanto cieto disku. Katram ierakstam ir pievienota arī neliela informācija, ko sauc par tagu. Šo tagu izmanto, lai atrastu vietu, kur ir saglabāti sākotnējie dati.
Kešatmiņas lasīšanai
Ja klients (procesors, tīmekļa pārlūkprogramma, operētājsistēma) vēlas piekļūt kādam datu elementam, kas, pēc tā domām, atrodas dublējuma krātuvē, tas vispirms pārbauda, vai šis datu elements ir atrodams kešatmiņā. Ja dati ir atrodami kešatmiņā, klients var tos izmantot, un viņam nav jāizmanto galvenā atmiņa. To sauc par kešatmiņas trāpījumu. Piemēram, tīmekļa pārlūkprogramma var pārbaudīt lokālo kešatmiņu diskā, lai pārliecinātos, vai tai ir lokāla tīmekļa lapas satura kopija konkrētā URL adresē. Šajā piemērā URL ir tags, un tīmekļa lapas saturs ir datu bāze.
Cita iespējama situācija ir tāda, ka datubāzē nav iespējams atrast datubāzi ar birku. To sauc par kešatmiņas iztrūkumu. Datubāze ir jāiegūst no dublējuma krātuves. Parasti to kopē kešatmiņā, lai nākamreiz tas vairs nebūtu jāpaņem no dublējuma krātuves.
Kešatmiņas lielums ir ierobežots. Lai atbrīvotu vietu iepriekš neievietotajam ierakstam, no kešatmiņas var nākties dzēst citu kešatmiņas ierakstu. Lai atrastu ierakstu, kuru vislabāk dzēst, tiek izmantoti īpaši noteikumi. Šos noteikumus parasti sauc par eiristiku. Eiristiku, ko izmanto ieraksta atrašanai, sauc par aizstāšanas politiku. Ļoti vienkāršu izmantoto noteikumu sauc par vismazāk pēdējā laikā izmantoto (jeb LRU). Tas vienkārši izvēlas ierakstu, kas tika izmantots visilgāk. Citas heiristikas ir uzskaitītas kešatmiņas algoritmā..
Rakstīšanas kešatmiņas
Kešatmiņas var izmantot arī datu ierakstīšanai; priekšrocība ir tā, ka klients var turpināt darbību, tiklīdz ieraksts ir ierakstīts kešatmiņā; tam nav jāgaida, kamēr ieraksts tiek ierakstīts dublējuma krātuvē.
Tomēr ieraksts kādā brīdī ir jāieraksta dublējuma krātuvē. Laiku, kad tas notiek, kontrolē rakstīšanas politika.
Ierakstīšanas kešatmiņā katrs ieraksts tiek nekavējoties ierakstīts rezerves krātuvē, kā arī tiek saglabāts kešatmiņā.
Otra iespēja ir tikai rakstīt uz kešatmiņu un vēlāk rakstīt uz dublējuma krātuvi. To dēvē par rakstīšanas atpakaļ (vai rakstīšanas aiz muguras) kešatmiņu. Kešatmiņā tiek atzīmēti ieraksti, kas vēl nav ierakstīti rezerves krātuvē; izmantotā atzīme bieži tiek saukta par netīro karodziņu. Pirms ieraksti tiek dzēsti no kešatmiņas, tie tiek ierakstīti rezerves krātuvē. To sauc par slinku rakstīšanu. Neizpildes gadījumā atpakaļatpakaļatmiņas kešatmiņā (kad nepieciešams bloku aizstāt ar citu) bieži vien būs nepieciešamas divas piekļuves atmiņai: viena, lai iegūtu vajadzīgo datu, un otra, lai aizvietotos datus no kešatmiņas ierakstītu atmiņā.
Kešatmiņas politikā var būt arī noteikts, ka kešatmiņā ir jāieraksta konkrēts datu kopums. Klients var būt veicis daudzas izmaiņas kešatmiņā esošajā datos. Pēc tam, kad tas ir beidzis, tas var skaidri pateikt kešatmiņai, lai tā ieraksta atpakaļ šo datu.
Piešķiršana bez rakstīšanas ir kešatmiņas politika, kurā kešatmiņā tiek saglabāti tikai nolasījumi. Tas ļauj izvairīties no nepieciešamības izmantot rakstīšanas atpakaļ vai rakstīšanas caur kešatmiņu. Rakstīšana visu laiku tiek veikta uz rezerves krātuvi.
Klients nav lietojumprogramma, kas izmaina datus dublējuma krātuvē. Ja dati mainās dublējuma krātuvē, kopija kešatmiņā būs novecojusi jeb novecojusi. Vai arī, ja klients atjaunina datus kešatmiņā, šo datu kopijas citos kešatmiņā kļūst novecojušas. Pastāv īpaši saziņas protokoli, kas ļauj kešatmiņas pārvaldītājiem sazināties savā starpā, lai saglabātu datu nozīmīgumu. Tos sauc par koherences protokoliem.
Procesora atmiņas kešatmiņas shēma
Aizstājamā ieraksta atlase
Kešatmiņa ir maza, un lielāko daļu laika tā būs pilna vai gandrīz pilna. Tāpēc, kad tiek pievienota jauna vērtība, vecā vērtība ir jādzēš. Šo atlasi var veikt dažādos veidos:
- Pirmais iekšā, pirmais ārā: Vienkārši nomainiet ierakstu, kas kešatmiņā tika pievienots visilgāk.
- Vismazāk lietots nesen: Šī ideja ir līdzīga iepriekš minētajai FIFO, bet, kad ieraksts tiek izmantots, tā laika zīmogs/vecums tiek atjaunināts.
- Visretāk izmanto: Arī šajā gadījumā, līdzīgi kā FIFO gadījumā, tā vietā, lai izmantotu laika zīmogu, izmanto skaitītāju, kas tiek palielināts katru reizi, kad tiek izmantots ieraksts.
- Izvēlēties ierakstu pēc nejaušības principa
Vēsture
Vārds kešatmiņa pirmo reizi skaitļošanas tehnikā tika lietots 1967. gadā, kad tika sagatavots zinātnisks raksts publicēšanai žurnālā IBM Systems Journal. Raksts bija par jaunu atmiņas uzlabojumu 85. modelī. Modelis 85 bija IBM System/360 produktu līnijas dators. Žurnāla redaktors vēlējās labāku vārdu ātrgaitas bufera apzīmēšanai, kas tika izmantots rakstā. Viņš nesaņēma ieteikumus un ierosināja vārdu cache no franču valodas cacher, kas nozīmē "paslēpt". Raksts tika publicēts 1968. gada sākumā, un autori saņēma IBM apbalvojumu. Viņu darbs tika plaši atzinīgi novērtēts un uzlabots. Datorliteratūrā kešatmiņa drīz vien kļuva par standarta lietojumu.
Kur izmanto kešatmiņas
Procesora kešatmiņas
Nelielas atmiņas, kas atrodas procesora mikroshēmā vai tās tuvumā, var būt ātrākas par daudz lielāku galveno atmiņu. Lielākajā daļā procesoru kopš 80. gadiem ir izmantota viena vai vairākas kešatmiņas. Mūsdienu vispārējas nozīmes CPU personālajos datoros var būt pat pusducis. Katra kešatmiņa var būt specializēta dažādām programmu izpildes uzdevuma daļām.
Disku kešatmiņas
Procesora kešatmiņas parasti pilnībā pārvalda aparatūra, bet citas kešatmiņas pārvalda cita veida programmatūra. Operētājsistēma parasti pārvalda galvenās atmiņas lapu kešatmiņu. Lietotāji ārpus datorzinātnes šo kešatmiņu parasti sauc par virtuālo atmiņu. To pārvalda operētājsistēmas kodols.
Mūsdienu cietajos diskos ir diska buferi. Tos dažkārt dēvē par "diska kešatmiņu", taču tas ir nepareizi. Šo buferu galvenā funkcija ir sakārtot diska ierakstus un pārvaldīt datu nolasīšanu. Atkārtoti kešatmiņas trāpījumi ir reti, jo buferis ir ļoti mazs, salīdzinot ar cietā diska izmēru.
Vietējie cietie diski ir ātri salīdzinājumā ar citām datu glabāšanas ierīcēm, piemēram, attālinātiem serveriem, vietējiem lentes diskdziņiem vai optiskajiem spēļu automātiem. Vietējo cieto disku kā kešatmiņas izmantošana ir hierarhiskās glabāšanas pārvaldības galvenā koncepcija.
Tīmekļa kešatmiņas
Tīmekļa pārlūkprogrammas un tīmekļa starpniekserveri izmanto kešatmiņu, lai saglabātu iepriekšējās atbildes no tīmekļa serveriem, piemēram, tīmekļa lapas. Tīmekļa kešatmiņas samazina informācijas apjomu, kas jāpārraida pa tīklu. Kešatmiņā iepriekš saglabāto informāciju bieži vien var izmantot atkārtoti. Tas samazina joslas platumu un apstrādes prasības tīmekļa serverim, kā arī palīdz uzlabot tīmekļa lietotāju reaģēšanas spēju.
Mūsdienu tīmekļa pārlūkprogrammās tiek izmantota iebūvēta tīmekļa kešatmiņa, bet daži interneta pakalpojumu sniedzēji vai organizācijas izmanto arī kešēšanas starpniekserveri. Tā ir tīmekļa kešatmiņa, kas ir koplietojama visiem attiecīgā tīkla lietotājiem.
Meklētājprogrammas bieži vien indeksētās tīmekļa lapas dara pieejamas arī no savas kešatmiņas. Piemēram, Google pie katra meklēšanas rezultāta piedāvā saiti "Cached". Tas ir noderīgi, ja tīmekļa lapas uz laiku nav pieejamas no tīmekļa servera.
Kešēšana ar neuzticamiem tīkliem
Ierakstīšanas caurlaides darbība ir izplatīta neuzticamos tīklos (piemēram, Ethernet LAN). Protokols, ko izmanto, lai nodrošinātu, ka dati rakstīšanas kešatmiņā ir jēgpilni, ja tiek izmantotas vairākas rakstīšanas kešatmiņas, šādā gadījumā ir ļoti sarežģīts.
Piemēram, tīmekļa lapu kešatmiņas un klienta puses tīkla failu sistēmas kešatmiņas (piemēram, NFS vai SMB) parasti ir tikai lasāmās vai rakstāmās, lai tīkla protokols būtu vienkāršs un uzticams.
Atšķirība starp buferi un kešatmiņu
Buferis un kešatmiņa nav savstarpēji izslēdzoši jēdzieni; tos bieži izmanto arī kopā. Tomēr to izmantošanas iemesli ir atšķirīgi. Buferis ir vieta atmiņā, ko tradicionāli izmanto tāpēc, ka CPU instrukcijas nevar tieši adresēt datus, kas glabājas perifērijas ierīcēs. Datora atmiņa tiek izmantota kā starpposma krātuve.
Turklāt šādu buferi var būt iespējams izmantot, ja tiek montēts vai demontēts liels datu bloks (kā to pieprasa datu glabāšanas ierīce) vai ja datus var piegādāt citā secībā, nekā tie ir sagatavoti. Arī visu datu buferi parasti pārsūta secīgi (piemēram, uz cieto disku), tāpēc buferēšana pati par sevi dažkārt palielina pārsūtīšanas veiktspēju. Šīs priekšrocības ir pat tad, ja buferizētie dati tiek ierakstīti buferī vienu reizi un nolasīti no bufera vienu reizi.
Kešatmiņa arī palielina pārsūtīšanas veiktspēju. Daļa no palielinājuma rodas arī no tā, ka vairāki mazi pārskaitījumi apvienojas vienā lielā blokā. Taču galvenais veiktspējas pieaugums rodas tāpēc, ka ir liela iespēja, ka viens un tas pats datu kopums no kešatmiņas tiks nolasīts vairākas reizes vai ka drīz tiks nolasīti uzrakstītie dati. Vienīgais kešatmiņas mērķis ir samazināt piekļuves lēnākai datu glabāšanai. Kešatmiņa parasti ir arī abstrakcijas slānis, kas veidots tā, lai būtu neredzams no blakus esošo slāņu viedokļa. Tādējādi lietojumprogrammas vai klienti var nezināt, ka ir kešatmiņa.
Jautājumi un atbildes
J: Kas ir kešatmiņa?
A: Kešēšana ir datorzinātnē lietots termins, kas attiecas uz bieži izmantoto datu kopiju glabāšanu, lai tiem piekļūtu ātrāk, nekā atkārtoti iegūstot vai aprēķinot oriģinālos datus.
J: Kā darbojas kešēšana?
A: Kešēšana darbojas, izmantojot divu veidu datu nesējus - vienu, kas parasti ir diezgan liels, bet lēni pieejams, un otru, kam var piekļūt daudz ātrāk, bet kas parasti ir mazāks. Kešēšanas ideja ir izmantot ātrāko datu nesēju datu kopiju glabāšanai, lai piekļuve oriģinālajiem datiem aizņemtu mazāk laika vai būtu lētāka.
J: Kas ir buferis?
A: Buferis ir līdzīgs kešatmiņai, jo tajā tiek glabātas datu kopijas ātrākai piekļuvei, tomēr, izmantojot buferi, klients, kas piekļūst datiem, zina, ka pastāv buferis, un to pārvalda lietojumprogramma, savukārt, izmantojot kešatmiņu, klientiem nav jāzina, ka pastāv kešatmiņa.
J: Ko nozīmē atsauču lokalizācijas princips?
A: Atsauces lokālums nozīmē, ka, lietojumprogrammai piekļūstot noteiktiem strukturētu datu blokiem, tā, visticamāk, piekļūs arī citiem blokiem, kas atrodas tuvu tiem, kuriem sākotnēji tika piekļūts. Tas palīdz kešatmiņām labi darboties, jo tās parasti ir nelielas salīdzinājumā ar visiem pieejamajiem datiem.
Jautājums: Kāpēc lielākām kešatmiņām nepieciešams ilgāks laiks, lai meklētu ierakstus?
A: Lielākas kešatmiņas prasa vairāk laika, jo tajās ir vairāk saglabātās informācijas, un tāpēc to meklēšanai nepieciešams vairāk laika. Tās ir arī dārgākas, jo to glabāšanai ir vajadzīgi lielāki resursi.
J: Kā lokālums var palīdzēt uzlabot kešatmiņu darbību?
A. Lokalitāte palīdz uzlabot kešatmiņas darbību, jo, kad lietojumprogrammas piekļūst noteiktiem strukturētu datu blokiem, tām, visticamāk, būs vajadzīgi arī citi tuvumā esoši bloki, kurus tad var ātri iegūt no kešatmiņas, nevis iegūt tos no citur vai pārrēķināt no jauna.