Välimuistin johdonmukaisuus - Cache coherence

Image
Kuva, joka näyttää useita välimuisteja jostakin muistista, joka toimii jaettuna resurssina
Image
Epäjohdonmukaiset välimuistit: Välimuisteilla on eri arvot yhdelle osoitteelle.

In tietokone arkkitehtuuri , välimuistin johdonmukaisuutta on tasaisuus jaetun resurssin tietojen päätyvän tallennettu useita paikallisia kätköt . Kun järjestelmän asiakkaat ylläpitävät yhteisen muistiresurssin välimuisteja , epäjohdonmukainen data voi aiheuttaa ongelmia, mikä on erityisen yleistä moniprosessointijärjestelmän CPU : ssa .

Katsokaa oikealla olevasta kuvasta, että molemmilla asiakkailla on välimuistissa oleva kopio tietystä muistilohosta edellisestä lukemasta. Oletetaan, että alhaalla oleva asiakas päivittää/muuttaa kyseistä muistilohkoa, ylhäällä oleva asiakas voi jättää virheellisen muistin välimuistin ilman ilmoitusta muutoksesta. Välimuistin johdonmukaisuuden tarkoituksena on hallita tällaisia ​​ristiriitoja ylläpitämällä johdonmukainen näkymä useiden välimuistien data -arvoista.

Image
Yhtenäiset välimuistit: Kaikkien välimuistien kopioiden arvo on sama.

Yleiskatsaus

Kun jaettua muistia moniprosessorijärjestelmä, jossa on erillinen välimuisti kunkin prosessorin on mahdollista saada monia kopioita jaettua tietoa: yksi kopio päämuistiin ja yksi paikallinen välimuisti jokaisen prosessorin, joka pyysi sitä. Kun yksi tietojen kopioista muuttuu, muiden kopioiden on heijastettava tätä muutosta. Välimuistin johdonmukaisuus on kurinalaisuus, joka varmistaa, että jaettujen operandien (datan) arvojen muutokset etenevät koko järjestelmässä oikea -aikaisesti.

Välimuistin johdonmukaisuutta koskevat vaatimukset ovat seuraavat:

Kirjoita eteneminen
Kaikkien välimuistin tietojen muutokset on levitettävä muihin (kyseisen välimuistirivin) kopioihin vertaisvälimuistissa.
Tapahtumien sarjoittaminen
Kaikkien prosessorien on nähtävä luku/kirjoitus yhteen muistipaikkaan samassa järjestyksessä.

Teoreettisesti johdonmukaisuus voidaan suorittaa kuorman/varaston rakeisuudella . Käytännössä se kuitenkin suoritetaan yleensä välimuistilohkojen rakeisuudella.

Määritelmä

Johdonmukaisuus määrittelee lukujen ja kirjoitusten käyttäytymisen yhteen osoitteeseen.

Yhtä tietotyyppiä, joka esiintyy samanaikaisesti eri välimuistissa, kutsutaan välimuistin koherenssiksi tai joissakin järjestelmissä globaaliksi muistiksi.

Huomaa moniprosessorijärjestelmässä, että useampi kuin yksi prosessori on tallentanut kopion muistipaikasta X. Seuraavat ehdot ovat välttämättömiä välimuistin johdonmukaisuuden saavuttamiseksi:

  1. Prosessorin P suorittamassa lukemassa paikkaan X, joka seuraa saman prosessorin kirjoitusta P - X, eikä toisen prosessorin kirjoittamia X: lle tapahdu kirjoitus- ja P: n tekemien lukuohjeiden välillä, X: n on aina palautettava arvo kirjoittanut P.
  2. Prosessorin P1 lukemassa paikkaan X, joka seuraa toisen prosessorin P2 - X kirjoitusta, eikä minkään prosessorin tekemiä muita kirjoituksia X: ään tapahdu näiden kahden käyttöoikeuden välillä ja luku- ja kirjoituserot on erotettu riittävästi, X: n on aina palauttaa arvon P2. Tämä ehto määrittelee muistin yhtenäisen näkemyksen käsitteen. Kirjojen siirtäminen jaettuun muistipaikkaan varmistaa, että kaikilla välimuisteilla on yhtenäinen näkymä muistista. Jos prosessori P1 lukee X: n vanhan arvon myös P2: n kirjoittamisen jälkeen, voimme sanoa, että muisti on epäjohdonmukainen.

Yllä olevat ehdot täyttävät kirjoituspropagaatiokriteerit, joita tarvitaan välimuistin johdonmukaisuuteen. Ne eivät kuitenkaan ole riittäviä, koska ne eivät täytä tapahtumien sarjoitusehtoa. Havainnollistaaksesi tätä paremmin, harkitse seuraavaa esimerkkiä:

Multi-prosessori koostuu neljästä prosessorit - P1, P2, P3 ja P4, jotka kaikki sisältävät välimuistikopioihin yhteinen muuttuja S , jonka alkuarvo on 0 Prosessori P1 muuttaa arvoa S (sen välimuistiin tallennettu kopio) 10, jonka jälkeen Prosessori P2 muuttaa S : n arvon omassa välimuistissa olevassa kopiossaan 20. Jos varmistamme vain kirjoituksen etenemisen, P3 ja P4 näkevät varmasti P1: n ja P2: n S: ään tekemät muutokset . Kuitenkin P3 voi nähdä P1: n tekemän muutoksen nähtyään P2: n tekemän muutoksen ja palauttaa siten 10 lukemalla S: lle . Toisaalta P4 voi nähdä P1: n ja P2: n tekemät muutokset siinä järjestyksessä kuin ne on tehty ja palauttaa siten 20 lukemalla S: lle . Prosessoreilla P3 ja P4 on nyt epäyhtenäinen näkemys muistista.

Siksi transaktioiden sarjoittamisen täyttämiseksi ja siten välimuistin johdonmukaisuuden saavuttamiseksi on täytettävä seuraavat ehdot sekä kaksi tässä osassa mainittua edellistä:

  • Kirjoitukset samaan paikkaan on järjestettävä. Toisin sanoen, jos sijainti X sai kaksi eri arvoa A ja B, tässä järjestyksessä mistä tahansa kahdesta prosessorista, prosessorit eivät voi koskaan lukea sijaintia X B: nä ja sitten lukea sitä A. Paikka X on nähtävä arvoilla A ja B siinä järjestyksessä.

Koherentin järjestelmän vaihtoehtoinen määritelmä on peräkkäisen johdonmukaisuusmuistimallin määritelmä : "välimuistin koherenssijärjestelmän on näytettävä suorittavan kaikki säikeiden lataukset ja tallennukset yhteen muistipaikkaan kokonaisjärjestyksessä, joka kunnioittaa kunkin säikeen ohjelmajärjestystä" . Täten ainoa ero välimuistin koherensijärjestelmän ja peräkkäin johdonmukaisen järjestelmän välillä on määritelmän puuttumien osoitteiden lukumäärässä (yksi muistipaikka välimuistin koherenssijärjestelmälle ja kaikki muistipaikat peräkkäin johdonmukaiselle järjestelmälle).

Toinen määritelmä on: "moniprosessori on välimuistin mukainen, jos kaikki kirjoitus samaan muistipaikkaan suoritetaan jossakin järjestyksessä".

Harvoin, mutta erityisesti algoritmeissa, koherenssi voi sen sijaan viitata viittauspaikkaan . Useita kopioita samoista tiedoista voi olla samanaikaisesti eri välimuistissa, ja jos prosessorit saavat päivittää omat kopionsa vapaasti, seurauksena voi olla epäjohdonmukainen muistinäkymä.

Johdonmukaisuusmekanismit

Kaksi yleisintä yhtenäisyyden varmistamisen mekanismia ovat nuuskiminen ja hakemistopohjainen , joista jokaisella on omat etunsa ja haittansa. Snooping -pohjaiset protokollat ​​ovat yleensä nopeampia, jos käytettävissä on riittävästi kaistanleveyttä , koska kaikki tapahtumat ovat pyyntö/vastaus, jonka kaikki prosessorit näkevät. Haittapuolena on, että nuuskiminen ei ole skaalautuvaa. Jokainen pyyntö on lähetettävä kaikille järjestelmän solmuille, mikä tarkoittaa, että kun järjestelmä kasvaa, (loogisen tai fyysisen) väylän koon ja sen tarjoaman kaistanleveyden on kasvava. Toisaalta hakemistojen viiveet ovat yleensä pitempiä (3 -hop -pyyntö/eteenpäin/vastaus), mutta ne käyttävät paljon vähemmän kaistanleveyttä, koska viestit ovat pisteestä pisteeseen eivätkä niitä lähetetä. Tästä syystä monet suuremmista järjestelmistä (> 64 prosessoria) käyttävät tämän tyyppistä välimuistin koherenssia.

Snooping

Snooping otettiin ensimmäisen kerran käyttöön vuonna 1983, jolloin yksittäiset välimuistit tarkkailevat osoiterivejä päästäkseen välimuistiin tallennettuihin muistipaikkoihin. Arvonalennuksen mitätöinti protokollia ja write-päivitys protokollia käyttää tätä mekanismia.
Snooping -mekanismia varten snoop -suodatin vähentää salakuunteluliikennettä ylläpitämällä useita merkintöjä, joista kukin edustaa välimuistilinjaa, jonka yksi tai useampi solmu voi omistaa. Kun yhden merkinnän korvaaminen on tarpeen, snoop -suodatin valitsee korvaavan merkinnän, joka edustaa välimuistiriviä tai rivejä, jotka omistavat vähiten solmuja määritettynä kunkin merkinnän läsnäolovektorista. Ajallista tai muuta algoritmia käytetään valinnan tarkentamiseen, jos useimmat välimuistirivit ovat vähimmän solmun omistuksessa.

Hakemistoon perustuva

Hakemistopohjaisessa järjestelmässä jaettavat tiedot sijoitetaan yhteiseen hakemistoon, joka ylläpitää välimuistien välistä johdonmukaisuutta. Hakemisto toimii suodattimena, jonka kautta prosessorin on pyydettävä lupa ladata merkintä ensisijaisesta muistista välimuistiinsa. Kun merkintää muutetaan, hakemisto joko päivittää tai mitätöi muut merkinnän välimuistit.

Hajautetut jaetut muistijärjestelmät matkivat näitä mekanismeja yrittäessään ylläpitää johdonmukaisuutta löyhästi kytkettyjen järjestelmien muistilohkojen välillä.

Johdonmukaisuusprotokollat

Koherenssiprotokollat ​​soveltavat välimuistin koherenssia moniprosessorijärjestelmissä. Tarkoituksena on, että kaksi asiakasta ei saa koskaan nähdä eri arvoja samalle jaetulle datalle.

Protokollan on pantava täytäntöön johdonmukaisuuden perusvaatimukset. Se voidaan räätälöidä kohdejärjestelmään tai sovellukseen.

Protokollat ​​voidaan myös luokitella snoopy- tai hakemistopohjaisiksi. Yleensä varhaiset järjestelmät käyttivät hakemistopohjaisia ​​protokollia, joissa hakemisto seurasi jaettuja tietoja ja jakajia. Snoopy -protokollissa tapahtumapyynnöt (lukea, kirjoittaa tai päivittää) lähetetään kaikille prosessoreille. Kaikki prosessorit nukahtavat pyynnön ja vastaavat asianmukaisesti.

Kirjoituksen eteneminen snoopy -protokollissa voidaan toteuttaa jollakin seuraavista tavoista:

Kirjoita-mitätöi
Kun kirjoitusoperaatio havaitaan paikkaan, josta välimuistilla on kopio, välimuistiohjain mitätöi oman kopionsa salaisen muistin sijainnista, mikä pakottaa uuden arvon lukemisen päämuistista seuraavalla käyttökerralla.
Kirjoita päivitys
Kun kirjoitusoperaatio havaitaan paikkaan, josta välimuistilla on kopio, välimuistiohjain päivittää oman kopionsa salaisen muistin sijainnista uusilla tiedoilla.

Jos protokollan suunnittelussa todetaan, että aina kun jotakin kopiota jaetuista tiedoista muutetaan, kaikki muut kopiot on "päivitettävä" muutoksen mukaan, se on kirjoituspäivitysprotokolla. Jos suunnittelussa todetaan, että minkä tahansa prosessorin kirjoittaminen välimuistiin tallennettuun kopioon vaatii muita prosessoreita hylkäämään tai mitätöimään välimuistissa olevat kopiot, kyseessä on kirjoituskyvyttömyysprotokolla.

Skaalautuvuus on kuitenkin yksi lähetysprotokollien puute.

Johdonmukaisuuden ylläpitämiseksi on kehitetty erilaisia ​​malleja ja protokollia, kuten MSI , MESI (alias Illinois), MOSI , MOESI , MERSI , MESIF , kerran kirjoitettava , Synapse, Berkeley, Firefly ja Dragon -protokolla . Vuonna 2011 ARM Ltd ehdotti AMBA 4 ACE: tä johdonmukaisuuden käsittelemiseksi yhteiskäyttöjärjestelmissä . AMBA CHI (Coherent Hub Interface) -spesifikaatio ARM Ltd: ltä , joka kuuluu AMBA5 -määritysten ryhmään, määrittelee rajapinnat täysin koherenttien prosessorien liittämistä varten.

Katso myös

Viitteet

Lue lisää