Cacheprobe: programbibliotek för extrahering av cacheminnesparametrar Gabriel Gerhardsson Cacheprobe p.1/38
Abstract Kan analytiskt ta reda på associativitet, line storlek och storlek på processorns cacheminnen Analyserar tidtagna minnesläsningar vid olika minnesanvändningsmönster Många arkitekturer - en algoritm Open source Genomfört på institutionen Handledare: Robert Granat Cacheprobe p.2/38
Innehåll Bakgrund, problem, målsättning Teori Implementation Testresultat Problem, framtida förbättringar Slutsats Opponering Frågor Cacheprobe p.3/38
Bakgrund RAM-minnen har relativt processorer tappat prestanda genom åren Prestandakrävande program behöver därför utnyttja cacheminnena till fullo Måste då veta storleken på cachen Finns inget standardiserat sätt att få reda på detta Cacheprobe p.4/38
Målsättning med Cacheprobe Ska kunna ta reda på: Cache-associativitet Cache line-storlek Cache-storlek Ska använda samma algoritm på alla moderna arkitekturer, en för varje parameter Cacheprobe p.5/38
Teori: Innehåll Gemensam teori Alla tre algoritmer använder samma penalty Kort genomgång av varje algoritm Cacheprobe p.6/38
Cacheminnen Utvecklingen har gått snabbt för processorer Mindre snabbt för RAM-minnen Mer än 100 processorklockcykler för en läsning Cacheminnen: Små men väldigt snabba minnen Nära processorn, oftast direkt på samma chip Lagrar det data som används just nu...samt data som kan tänkas användas snart Hanterar block av data, cache line Cacheprobe p.7/38
Cache-organisation Olika sätt att organisera en cache: Direkt-mappad Set-associativ Andra metoder tas inte upp här Cacheprobe p.8/38
Direkt-mappad cache RAM-Minne a b c d e f g h i j k l m n o p q r s 0 1 2 3 4 5 6 7 8 9 10 11 Cache Varje minnesposition kan ligga i exakt ett ställe i cachen Både a och m hamnar i 0 Cacheprobe p.9/38
Set-associativ cache a b c d e f g h i j k l m n o p q r RAM-Minne Set Way 1 Way 2 Cache 0 1 2 3 4 5 Varje minnesposition kan ligga i exakt ett set i cachen Både a, g och m hamnar i 0 Just denna cache är 2-vägs set-associativ I varje set finns två olika ways som kan användas Cachen måste välja vilken av de två som ska användas Cacheprobe p.10/38
En minnesläsning Vi har en minnesadress x som inte finns i någon cache En förfrågan om x skickas till RAM-minnet Efter en viss tid svarar RAM-minnet med en cache-line Den läggs i cachen. Om cachen är set-associativ: Cachen vet direkt vilket set som ska användas Men måste välja vilken way som ska användas Least Recently Used (LRU) Gammalt innehåll flyttas till eventuell högre nivå cache Cacheprobe p.11/38
Framtvingad set -konkurrens Läs en rad minnespositioner med ett stort, jämnt avstånd Vid rätt avstånd kommer dom konkurrera om samma set Läs fler positioner än cachens set kan rymma Någon, redan läst, position kommer puttas ut ur cachen Enligt LRU väljs den way som varit oanvänd längst tid Penalty Alla tre extraheringsalgoritmerna använder denna effekt Cacheprobe p.12/38
Cache associativitet Använder nämnda effekt rakt av Läs in en referensposition till cachen Ta tid på en läsning av referenspositionen från cachen Läs en rad minnespositioner med lämpligt avstånd Ta tid på en läsning av referenspositionen Om tiden ökat har referenspositionen puttats ur cachen Vi kan då räkna ut cachens associativitet Det som ändras är antalet minnespositioner Cacheprobe p.13/38
Cache associativitet figurer Minnespositioner för test av associativitet 4, 8 och 16 Cacheprobe p.14/38
Cache line-storlek Samma algoritm som för associativitet, med en ändring Alla minnespositioner förutom referenspositionen flyttas framåt byte för byte Minnespositionerna kommer till slut till nästa cache line Referenspositionen kommer då inte längre puttas ut ur cachen Vi kan då räkna ut cachens line-storlek Det som ändras är hur många byte positionerna flyttas Cacheprobe p.15/38
Cache line-storlek figurer Minnespositioner för test av cache line storlek 2, 4 och 8 Just denna cache är 16-vägs set-associativ Det är först vid storlek 8 som minnespositionerna kommer till nästa cache line Referenspositionen (grön markering) puttas då ej ut Cacheprobe p.16/38
Cache storlek Samma algoritm som för associativitet, med en ändring Det lämpliga avståndet ändras, från mycket litet till stort När avståndet är för litet kommer minnespositionerna inte konkurrera om samma set Referenspositionen kommer därför inte puttas ut När avståndet blir tillräckligt stort kommer referenspositionen bli utputtad Vi kan då räkna ut cachens storlek Det som ändras är alltså det lämpliga avståndet Cacheprobe p.17/38
Cache storlek figurer Minnespositioner för test av cache storlek 1, 2 och 4 KiB Just denna cache är 4-vägs set-associativ Det är först vid storlek 4 KiB som alla minnespositioner kommer konkurrera om ways i samma set Referenspositionen (grön markering) puttas då ut Cacheprobe p.18/38
Implementation Designkrav Samma algoritmimplementation på alla arkitekturer Ska funka på alla moderna processorer Vald design Själva extraheringsfunktionaliteten i ett bibliotek Gör det enkelt för program att använda funktionaliteten Ett testprogram som använder biblioteket Skrivna i C, för att underlätta användning Cacheprobe p.19/38
Biblioteket Biblioteket delat i två delar Arkitekturoberoende del: Utgör nästan hela implementationen Implementation av extraheringsalgoritmerna Analys av resultat Arkitekturberoende del: Små, men viktiga, funktioner som används av den arkitekturoberoende delen T.ex.: Tidtagning av minnesläsning Skrivna i assembly för maximal kontroll Cacheprobe p.20/38
Arkitekturer Arkitekturberoende del portad till: Alpha, IA64, MIPS32, MIPS64, MIPS III, PA-RISC, Power, PowerPC, PowerPC64, Sparc, Sparc64, x86 och x86-64. Varav följande arkitekturer inte har kunnat testas (ej tillgång till hårdvara): MIPS32, MIPS64, PowerPC64 och Sparc64 Begränsad användbarhet av MIPS III och PA-RISC pga brister i hårdvaran Cacheprobe p.21/38
Bibliotekets interface Initiering av biblioteket: int cp_init() Allokering av resultatsdatastruktur: int cp_allocate_info_struct(cp_info_t **ret) Helt automatisk parameterextrahering: int cp_probe_all(cp_info_t *ret) Resultaten finns nu i cp_info_t-datastrukturen Avallokering av resultatsdatastruktur: int cp_free_info_struct(cp_info_t **ret) Avinitiering av biblioteket: int cp_cleanup() Cacheprobe p.22/38
Resultat Varierande resultat Vissa arkitekturer visar väldigt stabila och bra resultat Vissa ger bra resultat under rätt omständigheter Klarar inte av konkurrerande användning av systemet Vissa ger fel resultat Vissa ger inga resultat alls Cacheprobe p.23/38
Resultat: Stabilt och bra Tid 16 14 12 10 8 6 4 2 0 2 4 8 16 32 64 Cache associativitet AMD Opteron (arkitektur: x86-64) Mycket stabila och bra resultat Detta är innan post processing av resultaten Cacheprobe p.24/38
Resultat: Behöver filtreras Tid 70 60 50 40 30 20 10 0 2 4 8 16 32 64 Cache associativitet Alpha EV67 (arkitektur: Alpha) Korrekta resultat, men behöver filtreras Detta är före post processing av resultaten Cacheprobe p.25/38
Resultat: Behöver filtreras (forts) Tid 70 60 50 40 30 20 10 0 2 4 8 16 32 64 Cache associativitet Detta är efter post processing av resultaten Cacheprobe p.26/38
Resultat: Känsligt Tid 140 120 100 80 60 40 20 0 2 4 8 16 32 64 Cache associativitet SUN UltraSparc III (arkitektur: SPARC) Korrekta resultat, men känslig för konkurrerande användning Detta är efter post processing av resultaten Cacheprobe p.27/38
Resultat: Fel resultat Tid 60 50 40 30 20 10 0 64 96 128 192 256 384 512 Cache storlek (KiB) AMD Athlon (arkitektur: x86) Fel storlek på L2 cachen (korrekt: 512 KiB), allt annat korrekt 768 1024 1536 Detta är efter post processing av resultaten 2048 Cacheprobe p.28/38
Resultat: Inget resultat Tid 35 30 25 20 15 10 5 0 2 4 8 16 32 64 Cache associativitet Intel Pentium 4 (arkitektur: x86) Inga slutsatser kan dras från timingdata, fel profil Detta är efter post processing av resultaten Cacheprobe p.29/38
Resultat: Sammanfattning Extrahering fungerar på en majoritet av de testade systemen Ett fåtal system har stora problem Cacheprobe p.30/38
Testprogram: Matrismultiplikation Många teknisk-vetenskapliga beräkningar kan dra nytta av att veta cacheparametrar Ett bra exempel är matrismultiplikationer Tre implementationer testade: En optimerad, normal matrismultiplikation En optimerad, blockad matrismultiplikation. Använder L1 cachen fullt ut En optimerad, två-nivåers blockad matrismultiplikation. Använder både L1 och L2 cacheminnena fullt ut Cacheprobe p.31/38
Testprogram: Resultat Testat på en AMD Athlon 2500+ med följande cacheminnen: Cache Associativitet Line storlek Storlek L1 2 64 64 KiB L2 16 64 512 KiB Följande blev resultaten: Implementation Tid (sekunder) Normal 101 Blockad 51 Två-nivåers blockad 39 Cacheprobe p.32/38
Problem Mindre problem (buggar i kompilatorer, etc.) Sämre resultat i slutliga versionen på vissa arkitekturer Intel Pentium 4 Cacheprobe p.33/38
Problem: Intel Pentium 4 Timingresultaten följer inga normala mönster och saknar logik Normalt: vid test av associativitet börjar tiderna lågt och ökar eftersom Pentium 4: startar högt och minskar eftersom Endast en av de tre algoritmerna ger korrekta resultat: cache line storlek Cacheprobe p.34/38
Problem: Intel Pentium 4 (forts) En huvudsaklig möjlig orsak till problemen. Alla andra teorier har kunnat avskrivas Simultaneous Multithreading (hyper threading) Flera exekveringstrådar kan exekvera exakt samtidigt på samma processor. Delar på processorresurser Hindrar repeterbarhet Gör resultaten osäkra Gör cacheminnenas beteendemönster komplexa Cacheprobe p.35/38
Framtida förbättringar En kernel-mode port av cacheprobe Möjliggör ökad kontroll över hårdvaran Garanterat konsekutiv minnesregion Vissa minnesmanupilationsmetoder skulle dra nytta av bättre generella implementationer Slutliga versionen funkade sämre på vissa processorer Den statistiska analysen skulle kunna förbättras Cacheprobe p.36/38
Slutsats Mål: en algoritm - många arkitekturer Målet kunde inte uppfyllas fullt ut Slutsatsen blir att det inte går att göra en implementation som fungerar på alla processorer Beteendemönstren på dagens moderna processorer blir mer och mer komplexa Går ej att analysera alla med en och samma implementation Cacheprobe p.37/38
Slut Ladda ner: www.cs.umu.se/ dva99ggn/thesis.html Opponent Frågor Cacheprobe p.38/38