Tietoa pyydettäessä mistä tahansa lähteestä tulee aina jonkin verran viivettä. Ping web-palvelimille mitataan millisekunteina, tallennusajan käyttöajalla voi olla viiveitä mikrosekunteina, kun taas RAM-latenssi mitataan suorittimen kellojaksoissa. Tietenkin tämänkaltaiset nopeudet olisivat olleet mahdottomia vielä muutama vuosikymmen sitten, mutta nykyään ne eivät ole koskaan tarpeeksi nopeita. Pääsynopeus on säännöllisesti jonkinlainen suorituskyvyn pullonkaula. Yksi tavoista, joilla tämä voidaan ratkaista, on välimuisti.
Välimuisti on prosessi, jossa resurssin tilapäinen kopio tallennetaan siten, että sitä voidaan käyttää nopeammin kuin se voisi olla normaalisti. Toteutuksia on valtava määrä sekä ohjelmistossa että laitteistossa. Välimuistit voivat toimia lukuvälimuistina, kirjoitusvälimuistina tai molempina.
Lue välimuistit
Lukuvälimuistissa aiemmin pyydetyt tiedot tallennetaan välimuistiin nopeampaa pääsyä varten. Joissakin skenaarioissa välimuistiin voidaan jopa ladata ennaltaehkäisevästi tietoja, jotka mahdollistavat ensimmäisen pyynnön toimittamisen välimuistista seuraavien pyyntöjen sijaan.
Lukuvälimuisti, jonka todennäköisimmin tunnet, on selaimen välimuisti. Täällä selain tallentaa paikallisen kopion pyydetyistä resursseista. Tämä tarkoittaa, että jos ja kun verkkosivu ladataan uudelleen tai vastaava sivu, joka käyttää suurelta osin samaa sisältöä, ladataan, sisältö voidaan toimittaa välimuistista verkkopalvelimen sijaan. Tämä ei ainoastaan tarkoita, että verkkosivu latautuu nopeammin, vaan se myös vähentää verkon kuormitusta palvelin ja vähentää käyttäjän ladattavan tiedon määrää, mikä voi olla tärkeää mittareilla yhteyksiä.
RAM itse toimii myös kiintolevyn tietojen lukuvälimuistina. Tässä tapauksessa käynnissä olevan ohjelman tiedot ladataan ennaltaehkäisevästi RAM-muistiin, jotta CPU voi käyttää niitä nopeammin. Tiedot RAM-muistista tallennetaan sitten edelleen välimuistiin suorittimen välimuistiin, vaikka tämä prosessi on paljon monimutkaisempi, koska suorittimen välimuisti mitataan megatavuina, ei gigatavuina.
Kirjoita välimuistit
Kirjoitusvälimuisti on välimuisti, joka voi absorboida hitaampaan laitteeseen kirjoitettavaa dataa. Yleinen esimerkki tästä on nykyaikaisten SSD-levyjen SLC-välimuisti. Tämä välimuisti ei salli tietojen lukemista nopeammin, on kuitenkin paljon nopeampaa kirjoittaa kuin TLC- tai QLC-flash-muistiin, joka muodostaa muun SSD-levyn. SLC-välimuisti voi absorboida nopeita kirjoitustoimintoja ja siirtää tiedot niin pian kuin mahdollista TLC-flash-muistiin, joka tarjoaa paljon paremman tallennustiheyden, mutta on myös paljon hitaampaa kirjoittaa. Flash-muistin käyttäminen tällä tavalla optimoi sen sekä nopeille kirjoitusnopeuksille että suurelle tallennustiheydelle.
Hybridivälimuistit
On monia tapoja käsitellä välimuistia, joiden avulla ne voivat toimia sekä luku- että kirjoitusvälimuistina. Jokainen näistä menetelmistä käsittelee kirjoitustoimintoja eri tavalla ja niillä on etuja ja haittoja. Kolme vaihtoehtoa ovat ympärikirjoitus, läpikirjoitus ja takaisinkirjoitus. Kirjoitusvälimuisti ohittaa välimuistin kokonaan kirjoitettaessa, läpikirjoitusvälimuisti kirjoittaa välimuistiin, mutta pitää toiminnon valmiina vasta, kun se on kirjoitettu tallennustilaan. Takaisinkirjoitusvälimuisti kirjoittaa välimuistiin ja pitää toimintoa sitten valmiina ja luottaa välimuistiin siirtäen sen tarvittaessa tallennustilaan.
Kirjoittaminen voi olla hyödyllistä, jos odotat suurta kirjoitusmäärää, koska se minimoi välimuistin vaihtuvuuden. Se tarkoittaa kuitenkin, että toiminto, joka sitten lukee mitä tahansa kirjoitettua dataa, kohtaa vähintään yhden välimuistin puuttumisen ensimmäisellä kerralla. Kirjoitusvälimuistit tallentavat välittömästi välimuistin kirjoitustoiminnot, mikä tarkoittaa, että tulos voidaan toimittaa välimuistista, kun sitä pyydetään ensimmäisen kerran. Jotta kirjoitusoperaatio voidaan katsoa valmiiksi, sen on myös kirjoitettava tiedot levylle, mikä lisää viivettä. Takaisinkirjoitusvälimuistilla on sama etu kuin läpikirjoituksella, mikä mahdollistaa kirjoitetun tiedon välittömän välittymisen välimuistista. Se ei kuitenkaan vaadi kirjoitustoimintoja levylle kirjoittamiseen, jotta se katsottaisiin valmiiksi. Tämä vähentää kirjoitusviivettä, mutta sisältää tietojen menetyksen riskin, jos välimuisti on epävakaa eikä se lopeta tietojen kirjoittamista takaisin tallennustilaan ennen virran katkeamista.
Kuinka poistaa tiedot välimuistista?
Yksi välimuistin rajoittavista tekijöistä on kapasiteetti. Suuren välimuistin etsiminen vie kauan, mikä tekee tyhjäksi suuren osan välimuistin käytön eduista. Välimuistiin käytettävät muistitekniikat ovat myös yleensä kalliimpia kuin muisti, josta ne tallennetaan. Jos näin ei olisi, on todennäköistä, että kyseinen muistitaso olisi vaihtanut muistitekniikkaa suorituskyvyn parantamiseksi. Molemmat tekijät tarkoittavat, että välimuistit ovat yleensä suhteellisen pieniä, etenkin verrattuna tallennusvälineeseen, jolta ne tallennetaan. RAM-muistissa on vähemmän kapasiteettia kuin tallennustilassa ja suorittimen välimuistissa on vähemmän kapasiteettia kuin RAM-muistissa. SLC-välimuistissa on vähemmän kapasiteettia kuin TLC-muistissa.
Kaikki tämä tarkoittaa, että tiedot on usein poistettava välimuistista tilan vapauttamiseksi uudelle datalle, joka on tallennettava välimuistiin. Tähän on olemassa useita erilaisia lähestymistapoja. "Vähiten käytetty", haluaa poistaa välimuistin merkinnät, joilla on pienin käyttöoikeus. Tämä voi olla hyödyllistä ennakoitaessa, millä merkinnöillä on vähiten vaikutus tuleviin välimuistin poikkeamiin, mutta laskeisi myös äskettäin lisätyt merkinnät vähäisiksi käyttömääriksi, mikä voi johtaa välimuistiin vaihtua.
"Viimeksi käytetty" poistaa mieluummin välimuistin merkinnät, joita ei ole käytetty vähään aikaan. Tämä olettaa, että niitä ei käytetä tällä hetkellä, mutta siinä ei oteta huomioon, oliko niitä paljon käytetty jokin aika sitten. "Viimeksi käytetyt" poistaa mieluummin viimeksi käytetyt välimuistin merkinnät olettaen, että niitä on käytetty eikä niitä tarvitse käyttää uudelleen. Paras lähestymistapa on yleensä kaikkien kolmen yhdistelmä käyttötilastojen perusteella.
Vanhentuneet tieto- ja turvallisuusriskit
Välimuistien suurin riski on, että niiden sisältämät tiedot voivat vanhentua. Välimuistimerkintä katsotaan vanhentuneeksi, kun alkuperäiset tiedot on päivitetty ja välimuistimerkintä on vanhentunut. On tärkeää varmistaa säännöllisesti, että tarjottava live-kopio vastaa edelleen välimuistissa olevaa kopiota.
Erityisesti verkkosivustoilla on myös erittäin tärkeää tunnistaa, mitä tietoja voidaan tallentaa välimuistiin ja mitä ei. Esimerkiksi suuren muuttumattoman JavaScript-tiedoston tallentaminen välimuistiin on täysin ok. Tämä säästää käyttäjää lataamasta sitä joka kerta ja voi jopa hyödyttää muita saman välimuistin käyttäjiä. Et kuitenkaan voi tallentaa istuntokohtaisia tietoja välimuistiin. Kuvittele, mitä tapahtuisi, jos selaat viestisovellusta ollessasi kirjautuneena sisään omaksesi, mutta huomaat, että sinulle toimitetaan välimuistiversio toisen käyttäjän viesteistä. Onneksi verkkopalvelimet voivat määrittää, mitkä resurssit voidaan tallentaa välimuistiin ja mitkä eivät, ja nämä ongelmat ovat yleisesti tunnettuja, joten tällaisia ongelmia on vähän.
Johtopäätös
Välimuisti on osa muistia, joka voi tallentaa äskettäin käytettyjä tietoja tallennusmenetelmään, joka on nopeampi käyttää kuin normaalin tietojen käyttöprosessin suorittaminen uudelleen. Välimuistin kapasiteetti on tyypillisesti rajoitettu, mikä tarkoittaa, että sen on poistettava merkinnät, kun se on täynnä. Välimuistit ovat yleensä läpinäkyviä käyttäjälle, mikä tarkoittaa, että latenssi on ainoa osoitus siitä, että tulos toimitettiin välimuistin kautta.