Кохерентност кеша

Из Википедије, слободне енциклопедије
Emblem-important-yellow.svg Ова страница би требало да спада у једну или више категорија.
Молимо вас да је категоришете како би могла да се повеже са сличним страницама.
Уклоните ову поруку након категоризације странице.
Више кеш меморија дељених ресурса

У информатици, кохеренција кеша се односи на доследност података сачуваних у локалним кеш меморијама дељеног ресурса.

Када клијенти одржавају кеш меморије заједничког меморијског ресурса, могу се појавити проблеми са недоследним подацима. Ово је посебно тачно за процесоре у вешепроцесорском систему. Ако горњи клијент има копију меорије из претходног читања а доњи клијент промени тај меморијски блок, горњи клијент може остати са погрешним кешом меморије без обавештења о промени. Кохеренција кеша је намењена да управља таквим конфликтима и одржава доследност између кеша и меморије.

Преглед[уреди]

У вишепроцесорском систему са дељеном меморијом за сваки процесор, могуће је имати више копија једног инструкцијског операнда: једна копија у главну меморију и једна у сваку кеш меморију. Кад се промени једна копија у кешу, остале копије операнда се такође морају променити. Кохеренција кеша је дисциплина која осигурава да се промене у вредностима дељених операнада такође морају променити у целом систему брзо.

Постоје три нивоа кохеренције кеша:

  • Свака операција писања изгледа као да се десила тренутно
  • Сви процесори виде исту секвенцу промена вредности за сваки одвојени операнд
  • Различити процесори могу видети операцију и претпоставити другачије секвенце вредности. Ово је некохерентно понашање.

И у другој и трећој ставци програм може да посматра застареле податке. Од скоро, рачунарски дизајнери су реализовали дисциплину која омогућава да су програми који су способни за рад са другом ставком аутоматски способни за рад и са трећом. Због тога ће у неком тренутку само прва и трећа ставка бити виђена у машинама.

Дефиниција[уреди]

Кохеренција дефинише понашање читања и писања на исту меморијску локацију. Кохеренција кеша је добијена ако се следећи услови испуне:

  1. У читању које чита процесор П на локацију ИКС која прати писање истог процесора П на ИКС, без писања ИКС-а од другог процесора које се дешава између инструкција за писање и читање које је направио П, ИКС мора увек враћати вредност коју је написао П. Овај услов се односи на чување реда програма, и ово се мора испунити чак и у једнопроцесорским архитектурама.
  2. Читање које је обавио процесор П1 на локацију ИКС коју прати писање другог процесора П2 на ИКС мора вратити написану вредност коју је направио П2 ако се не појаве никаква друга писања на ИКС између две адресе и читање и писање је успешно раздвовјено. Овај услов дефинише концепт кохерентног погледа на мемроију. Ако процесори могу да читају исте старе вредности након писања које је направио П2, можемо рећи да је меморија некохерентна.
  3. Писање на исту локацију мора бити секвенцирано. Другим речима, ако локација ИКС прима две различите вредности А и Б, у овом реду, од било која два процесора, процесори никад неће моћи да прочитају локацију ИКС као Б и онда као А. Локација ИКС мора бити виђена са вредостима А и Б тим редоследом.

Ови услови су дефинисани с претпоставком да се операције читања и писања дешавају тренутно. Ипак, ово се не дешава у хардверу због латенције меморије и осталих аспеката архитектуре. Писање процесора П1 не мора бити виђено од стране процесора П2 ако се читање деси врло брзо након писања. Модел меморијске кохеренције одређује када написана вредност може бити виђена следећој инструкцији читања коју су наредили други процесори. Snooping Ретко и посебно у алгоритмима, кохеренција може иматеи значење локалност референци.

Механизми кохеренције[уреди]

Кохеренција базирана на директоријуму
У оваквом систему, подаци који се деле су постављени на заједнички директоријум који одржава кохеренцију међу кешом. Директоријум се понаша као филтер кроз који процесор мора тражити дозволу да прочита унос из примарне меморије на његов кеш. Када је унос промењен, директоријум се или ажурира или поништава други кеш са тим уносом.
Њушкање
Ово је процес где индивидуални кеш мотри адресне линије за приступ меморијским локацијама које су кеширане. Зове се write invalidate protocol када се операција писања надгледа на локацији коју кеш има копирану и контролер кеша поништава сопствену копију изњушкане меморијске локације.
Филтер њушкања смањује саобраћај њушкања одржавајући множину уноса, од којих сваки репрезентује кеш линију коју има један или више чворова. Када је потребна замена једног или више уноса, филтер њушкања бира унос који представља кеш линију или линије која има најмање чворова за власнике, како што је утврђено од вектора присутности у сваком уносу. За прерађену селекцију се користе временски алгоритми или друга врста ако једна или веше кеш линија има најмањи број чворова за власнике.
Snarfing
То је механизам где контролер кеша пази и адресу и податке у покушају да ажурира своју копију меморијске локације када други господар модификује локацију у главној меморији. Када се операција читања види на локацији чију кеш има копију, контролер кеша ажурира своју копију меморијске локације са новим подацима.

Системи са расподељеном меморијом мимикују ове механизме у покушају да одрже доследност између блокова меморије у лабаво повезаним системима.

Два најчешћа типа кохеренције који се тренутно проучавају су њушкање и директоријумско. Свако има своје предности и мане. Протоколи њушкања су бржи, али нису скалабилни. Сваки захтев мора бити подељен са свим чворовима у систему, што значи да што је систем већи, величина буса мора да буде већа. Директоријуми имају веће латенције али користе мање бендвита пошто су поруке тачно насловљене некоме. Због овога, многи већи системи са више од 64 процесора користе овај тип кохеренције кеша.

Протокол кохеренције[уреди]

Протокл кохеренције је протокол који задржава доследност између свих кешева у систему расподељене дељене меморије. Протокол задржава кохеренцију меморије по специфичном кохеренцијском моделу. Старији мултирпроцесори подржавају модел секвенцијалне кохеренције, док моредни системи типично подржавају release consistency или weak consistency моделе.

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

Различити модели и протоколи су направљени за очување кохеренције, као што су MSI, MESI (Illinois), MOSI, MOESI, MERSI, MESIF, write-once, Synapse, Berkeley, Firefly и Dragon protocol.

Литература[уреди]