Cache coherence hos multicoreprocessorer Benjamin Holmqvist, EDT621 December 5, 2016 1
Contents 1 Inledning 3 2 Syfte 3 3 Cache Coherence 3 3.1 Implementering.......................... 4 3.2 Snoop baserade.......................... 4 3.3 Directory baserade........................ 5 4 MESI-protokollet 5 4.1 De fyra tillstånden........................ 6 4.2 Mer om exclusive......................... 6 5 Referenser 7 2
1 Inledning Information är någonting som är otroligt viktigt i dagens samhälle. Man försöker se till att alla får ta del av samma information för att till exempel forskning och flera andra områden ska kunna fungera så effektivt som möjligt. Detsamma gäller inom datorn. Ska man undvika att det blir fel inuti datorn gäller det att alla moduler har samma information så att när det ska genomföras ett handskak så är båda parter lika välinformerade. När hemsidor ska tolkas behöver man vara underfund vilka protokoll som ska användas och så vidare. Tittar man på en ännu lägre nivå som jag och mina klasskamrater har gjort på universitetet en längre tid nu förstår man just hur stor roll det kan spela inne i datorn mellan processorer och olika typer av minnen. I den här rapporten har jag valt att fokusera på cache coherence och MESI protokollet. 2 Syfte Att ge läsaren ökad förståelse för vad Cache Coherence är och hur MESIprotokollet fungerar. 3 Cache Coherence När man har ett multiprocessorsystem där varje processor har ett eget cacheminne och flera processer(trådar) körs samtidigt är det viktigt att se till att man läser rätt värden. Det finns flera ställen som kopior kan sparas på i detta fallet, både i huvudminnet som delas av processorerna i systemet och i varje separat cacheminne. När någon process gör en ändring till ett värde i cacheminnet måste även de andra kopiorna där värdet lagras ändras för att undvika fel i andra processer. Cache coherence är den metod som ser till att detta sköts så att värdena uppdateras i hela systemet utefter behov. 3
Condition of Coherency: 1) A read by a processor P, to a location X follows a write by P to X, with no writes of X by another processor occurring in between, always returns the value written by P. 2) A read by P to location X that follows a write by another processor to X returns the newly written value if the read and write are sufficiently separated. 3) Writes to the same location are serialized: that is two writes to the same location by any two processors are seen in the same order by all processors. Neupane, Mahesh (2004) Detta är alltså enligt Mahesh dem tre förhållanden som införande av cache coherence innebär. Den första punkten säger att så länge bara en processor läser/skriver till en plats i minnet utan att någon annan processor gör någon ändring så kommer det värdet som processorn skrev till den platsen att läsas. Punkt nummer två säger att om en annan processor däremot skriver till samma plats som den första processorn vill läsa kommer det nyskrivna värdet bara läsas om det gått tillräckligt lång tid från dess att värdet skrevs tills att en processor vill läsa värdet. Den tredje och sista punkten säger att om två processorer vill skriva till samma plats i minnet så kommer alla andra processorer se dessa två skrivningar i samma ordning. Om dessa förhållanden uppfylls kan man säga att systemet är cache coherent. 3.1 Implementering Det finns flera sätt att införa coherence till ett system. De två vanligaste metoderna kallas för Directory-Based och Snoop-based. 3.2 Snoop baserade Snoop-baserade protokoll går ut på att för varje transaktion på bussen måste det göras en cache-lookup som kollar om det finns en cache-line som tillhör transaktion en på bussen. När detta sker kommer alla andra kärnor att tjuvlyssna på bussen, de kommer snoopa på bussen. Detta gör att alla kärnor håller sig uppdaterade på vad som ändras i det delade minnet och vad som inte ändras. Eftersom denna variant använder en slags broadcast till alla processorer kräver det mer bandbredd på bussen och gör det svårare att skala upp denna metod om man vill ha fler processorer till exempel. Det går dock väldigt snabbt med så kallad cache-to-cache överföring av data. 4
3.3 Directory baserade När det kommer till protokoll som implementerar en Directory-based lösning så använder man ett slags filter mellan processorn och det delade cacheminnet. Processorn måste ges tillåtelse att få läsa in/skriva i primärminnet som delas. När en directory till en processor får reda på att en ändring gjorts i det delade minnet kommer den uppdatera eller invalidera datan på de andra icke-delade kända platserna som datan lagras. Den här metoden är att föredra när man har fler processorer och minnet är mer fördelat. Eftersom man inte behöver broadcast för att nå ut till alla processorer sparar man här på bussens bandbredd och gör den lättare att skala upp till flera processorer. 4 MESI-protokollet Det här är ett protokoll som bygger vidare på MSI protokollet. Det utvecklades på University of Illinois at Urbana-Champaign i delstaten Illinois i USA och kallas därför även för Illinois protokollet. Det här protokollet är ett av dem protokoll som använder Snooping för att bibehålla cache coherence. När en processor vill skriva till cacheminnet finns det två olika policyer som kan användas, write-through och write-back. Det här protokollet implementerar det senare alternativet som i kort innebär att skrivningen enbart görs till cacheminnet och inte som backup i primärminnet. Write-back är lite mer invecklat att implementera än vad write-through är eftersom man på något sätt behöver hålla reda på vilken av datans platser i cacheminnet som skrivits över, det här gör man med en så kallad dirty bit. I MESI-protokollet så används denna dirty bit inte bara för att markera att denna data blivit invalid som MSI-protokollet gör. Man får en ledtråd till detta genom förkortningen, MESI står nämligen för Modified Exclusive Shared Invalid. Här behövs den så kallade dirty bit:en kunna signalera fler stadier än enbart invalid. Denna bit beskriver datan likt ett tillståndsdiagram. Det finns fyra stycken tillstånd och de kommer behandlas i kronologisk ordning. 5
4.1 De fyra tillstånden Modified innebär att denna data enbart existerar inom det cache man nu befinner sig i och att den är dirty, den har blivit modifierad och är inte samma som värdet den hade innan i primärminnet. Denna data måsted skrivas tillbaka till primärminnet innan någon annan läsning utav denna data får ske. När denna skrivning sker ändras tillståndet till Shared. Exclusive innebär att datan enbart existerar inom det cache man nu befinner sig i men inte är dirty utan att den är så kallad clean, det är samma information som när den lästes från primärminnet. Denna data kan kastas bort när som helst utan att en backup skrivs till primärminnet. Shared visar att denna data kan vara lagra även på andra cacheminnen och är clean. Invalid betyder att denna data inte ska användas. 4.2 Mer om exclusive Införningen av detta exklusiva tillstånd innebär att processorn kan skriva till datan som är i exclusive tillstånd utan att behöva samtala med de andra kärnorna för att kunna gå från exclusive till modified eftersom exclusive tillstånd innebär att det är den enda kopian i cacheminnet just då. Det här är den största skillnaden gentemot MSI till exempel där det exklusiva tillståndet inte finns. Processorn behöver alltså inte göra ett anrop till de andra kärnorna och detta sparar på transaktion över bussen. Denna ändring medför signifikant förbättring i tidsåtgång när processorn vill skriva till data som har tillståndet exclusive. 6
5 Referenser En.wikipedia.org. (2016). Cache coherence, [viewed 2 December 2016], https://en.wikipedia.org/wiki/cache_coherence Neupane, M.(2004). Cache coherence https://web.archive.org/web/20100620091706/http://cse.csusb. edu/schubert/tutorials/csci610/w04/mn_cache_coherence.pdf Ulfsnes, R.(2013). Design of a Snoop Filter for Snoop Based Cache Coherency Protocols. Norwegian University of Science and Technology http://www.diva-portal.org/smash/get/diva2: 649627/FULLTEXT01.pdf En.wikipedia.org. (2016).MESI protocol, [viewed 2 December 2016], https://en.wikipedia.org/wiki/mesi_protocol En.wikipedia.org. (2016).MSI protocol, [viewed 2 December 2016], https://en.wikipedia.org/wiki/msi_protocol En.wikipedia.org. (2016).Bsu Snooping, [viewed 3 December 2016], https://en.wikipedia.org/wiki/bus_snooping Shen, K. (2011). Shared Memory Multiprocessors and Cache Coherence. https://www.cs.rochester.edu/~kshen/csc258-spring2011/lectures/ lecture6-mpcoherence.pdf Patterson, D. (1996). Snooping vs. Directory Based Coherency.Berkeley Electrical Engineering and Computer Sciences. https://people.eecs.berkeley.edu/~pattrsn/252f96/lecture18.pdf Brorsson, M.(2014). Intro to Coherence. [video] https://www.youtube.com/watch?v=mhur0olfkww [2016-12-3] Brorsson, M.(2014). More on Coherence. [video] https://www.youtube.com/watch?v=uxtdojeu-yu [2016-12-3] Trigonakis, V. (2015). MESI Cache Coherence Protocol. [video] https://www.youtube.com/watch?v=-p9tfmmu1pe [2016-12-2] Luo, Y. (2013). Cache Coherence part 2. [video] https://www.youtube.com/watch?v=fzn5srsl4am [2016-12-2] Henty, D. (2012). Multicore Memory Caching Issues - Cache Coherency [video] https://www.youtube.com/watch?v=s3kg_zcz_pa [2016-12-3] 7