Prestanda ● Vad påverkar datorprestanda ● Hur mäter man datorprestanda ● Räkna klockcykler - ett sätt att analysera ● Amdahls lag - gräns för förbättringar
Vad påverkar prestanda ● CPU ● primärminne ● program, kompilator ● skivminne ● datornät ● övriga program, operativsystem
Testprogram ● Verkliga program ● Verkliga program styrda av skript ● Kernels - extrakt från verkliga program ● Leksaksproblem - quicksort, n-queens, … ● Syntetiska testprogram - specialskrivna endast för utvärdering av prestanda
Testprogram verkliga program koncentrat - "kernels" syntetiska testprogram SPEC CPU2000 Winstone Linpack Livermore loops NAS kernels Whetstone Dhrystone
Prestandaförbättring körtid för gamla versionen körtid för nya versionen speedup =
Exempel: flyttalsprocessor utförda instruktioner tid … add.l FADD add.l and.l cmp.l bne FMUL cmp.l beq... andel som ej kan snabbas upp andel som kan snabbas upp
Exempel, forts. andel som ej kan snabbas upp andel som kan snabbas upp total körtid på gamla datorn andel som ej kan snabbas upp andel som snabbats upp total körtid på nya datorn
Beteckningar 1 – andel U andel U total körtid på gamla datorn = 1 tidsenhet 1 – andel U andel som snabbats upp = andel U / speedup U total körtid på nya datorn = 1 tidsenhet / total speedup
Amdahls lag ● andelU = andel av ursprungliga körtiden som snabba finessen skulle ha behövts ● speedupU = lokal speedup när snabba finessen används andel U + speedup total = andel U speedup U
Ur processorns synvinkel ● Körtid = icount x CPI x tclk ● icount = antal utförda instruktioner ● CPI = Cykler Per Instruktion ● tclk = 1/klockfrekvensen
Teoretiska CPI-beräkningar ● CPI och andel av utförda instruktioner ● Exempel: – ALU-op: CPI = 1, andel 40% – Load, Store: CPI = 2, andel = 36% – Hopp: CPI = 2, andel = 24% – CPI medel = 1 x 0,4 + 2 x 0, x 0,24 = 1,6
Hur man får datorer snabba ● Make the frequent case fast… ● …and the fast case frequent
Make the frequent case fast ● Det lönar sig inte att snabba upp en funktion som nästan aldrig används ● Kan man snabba upp en funktion som används ofta så ger det stor utdelning ● För att snabba upp det vanliga fallet, så låter man gärna det ovanliga fallet bli ännu långsammare än förut
…and the fast case frequent ● Eftersom det ovanliga fallet är långsamt så ska man helst inte använda det ● Kompilatorn kan använda snabba instruktioner så mycket som det går
Fallgrop: klockfrekvens anger prestanda ● Celeron 2,0 GHz visar 21 bilder/s i speltest ● P4 2,26 GHz: 46 bilder/s ● Orsak: Celeron har mindre L2-cache ● AMD Athlon XP med 1,4 GHz klocka visar 37 bilder/s
Fallgrop: MIPS ● MIPS = Miljoner Instruktioner Per Sekund ● MIPS = icount/körtid = klockfrekvens/CPI ● MIPS anger prestanda bara så länge icount hålls konstant ● …kan alltså inte användas för att jämföra datorer med olika instruktionsuppsättning (vilket är fler än man tror)
Adressöversättning ● Repetition av virtuellt minne ● TLB - cacheminne för sidtabellinformation ● Virtuellt eller fysiskt adresserat cacheminne ● Tricket - det bästa av två världar ● Minneshierarki
En process ● Programkod –.text ● Data –.data –.bss ● Stack Program Data Stack minne adress 0 ∞
Flera processer samtidigt ● Hur ska detta kunna fungera? Program Data Stack 0 ∞ Program Data Stack 0 ∞ Program Data Stack 0 ∞
Virtuellt minne process 1 - virtuell adressrymd 1 process 2 - virtuell adressrymd 2 sidtabell 1sidtabell 2 fysiskt minne skivminne
Adressöversättning virtuell adress virtuellt sidnummer (VPN)sidoffset (PO) fysisk adress fysiskt sidnummer (PPN)sidoffset (PO) adress- översättning
Vanliga sidstorlekar ● 4 kbyte (Sparc, x86) ● 8 kbyte (Ultrasparc) ● 4 kbyte + 4 Mbyte (Pentium) ● 8k, 64k, 512k, 4Mbyte (Alpha 21264)
Enkel sidtabell en minnesadress virtuellt sidnummeroffset Enkel adressöversättning med hjälp av en enkel sidtabell. primär- sida 73 sida 71 sida 72 minne sidtabell fysiskt sidnummer
Minneslayout ● Kod, data, stack utspridda ● Många ogiltiga sidor ● Enkel sidtabell blir stor och tom adress 0 största möjliga adress kod data stack utökning av dataområdet utökning av stacken
Problem ● Många (möjliga) virtuella sidor medför ● stora sidtabeller som medför ● sidtabeller i primärminnet som medför ● långsam uppslagning
Flernivåers sidtabell ● Tomma sidtabeller på nivå 2 och 3 kan ersättas med nollställd giltigbit på nivån ovanför sidoffset (12bit) inkommande adress virtuellt sidnummer... sida index 3 (8 bit)index 2 (8 bit)index 1 (4 bit) sidtabell nivå 3... sidtabell nivå 2sidtabell nivå 1...
Flernivåers sidtabell, exempel Sidtabeller för ett program. Själva sidorna finns inte med i figuren. sidtabell nivå tre sidtabeller på nivå 2... fem sidtabeller på nivå tre sidtabeller för programkod en sidtabell för data en sidtabell för stacken
TLB Translation Lookaside Buffer ● Cacheminne för adressöversättning ● Delmängd av sidtabellen ● Associativt, mindre än 200 platser ● Sitter på processorchippet ● Miss-rate under 1 procent ● Missar hanteras i programvara i Riscar
Misshantering i programvara ● TLB-miss ger felavbrott (exception) ● Felavbrottsrutinen läser sidtabellen ● Sidfel upptäcks som TLB-miss, felavbrotts- rutinen ser i tabellen att det är sidfel ● Vanligt i Riscar, som saknar mikroprogram ● x86 hanterar TLB-miss i hårdvara
TLB-miss i mjukvara medför: ● Operativsystemet bestämmer hur sidtabellen ser ut ● Operativsystemet bestämmer TLB:ns utbytesalgoritm ● Instruktioner för att läsa/skriva TLB-platser ● Delar av sidtabell kan hamna i datacachen
Statusbitar ● Sidbytesrutin behöver use-bit och dirty-bit ● use-bit: har sidan använts sen sist? Behövs för att approximera LRU ● dirty-bit: har sidan skrivits sen sist? Kan spara skrivning till långsamt skivminne
Statusbitar i TLB:n ● TLB kan ha use-bit, men måste inte: endast nyligen använda sidor finns i TLB:n ● TLB kan ha dirty-bit (för prestanda), annars: – när en sidas översättning lagras i TLB:n markeras sidan som skrivskyddad – första skrivning ger felavbrott, programrutinen sätter dirty-bit i sidtabellen
Obs! En TLB är inget vanligt cacheminne! ● En dirty-bit i TLB:n anger om sidan ändrats i minnet ● Innehållet i TLB:n ändras inte av att programmet skriver till sidan (undantag: dirty-bit för sidan ettställs) ● Om dirty-bit = 1 så måste sidan sparas i swap-filen innan minnet återanvänds. TLB-innehållet ska inte sparas någonstans!
Täckning (coverage) ● Coverage = sidstorlek x antal sidor i TLB ● Större täckning ger färre missar ● Ökad sidstorlek ger ökad täckning ● Två sidstorlekar vanligt, exempelvis 4 kB och 4 MB ● Bildminne (och OS?) kan ligga i stora sidor
Virtuellt eller fysiskt adresserat cacheminne CPU TLB cacheminne CPU TLB cacheminne Virtuella adresser i adresslapparna TLB används bara vid miss Fysiska adresser i adresslapparna TLB används vid varje referens
Fördelar med virtuellt adresserade cacheminnen ● Snabbare, behöver inte vänta på TLB:n – kortare cykeltid – större cacheminne – kortare pipeline ● TLB:n används mer sällan – gemensam TLB räcker – TLB:n kan vara större och långsammare ● Falska konflikter undviks i cacheminnet
Nackdelar med virtuellt adresserade cacheminnen ● Synonymer - olika virtuella adresser blir samma fysiska – samma fil inmappad på två ställen i en process – samma fil eller delade bibliotek inmappade i två olika processer ● Homonymer - samma virtuella adress blir olika fysiska – vid processbyte
Synonymproblem ● Om A och B är två olika virtuella adresser som mappas till samma fysiska, så kan STOREA <- #0 LOADR3 <- B resultera i att B 0 ● Lösning: låt OS:et förbjuda synonymer
Homonymproblem ● Om den virtuella adressen A motsvarar den fysiska adressen X som finns i cacheminnet och TLB:n uppdateras så att A motsvarar en annan fysisk adress Y, så kan LOADR3 <- A ge värdet från X i stället för från Y
Processbyte i virtuellt adresserat cacheminne ● Hela adressrymden byts vid processbyte. För att lösa homonymproblemen kan man – invalidera hela cacheminnet, eller – lägga till processnummer till varje adresslapp ● Operativsystemet använder egna adresser, varje systemanrop blir byte av adressrymd
Fysiskt adresserade cacheminnen ● Fördelar: – Inga synonym- eller homonymproblem – Behöver ej invalideras vid processbyte ● Nackdelar: – TLB-uppslagning före varje referens – Falska konflikter
Falska konflikter ● Virtuella adressen visar ingen konflikt ● Adressöversättning skapar konflikten ● OS kan hindra detta processens virtuella adressrymd sidtabell fysiskt minne skivminne direktmappat cacheminne
TLB-uppslagning vid varje referens ● Instruktionshämtning (glöm inte den!) ● Datareferens (vid load/store) ● Kräver separat I-TLB och D-TLB, och förstås separata I- och D-cacheminnen ● TLBn tar en extra cykel i pipelinen, om inte tricket med samtidig uppslagning används
Tricket - samtidig uppslagning i TLB och cacheminne inkommande (virtuell) adress offsetsidnummer Ett direktmappat cacheminne med parallell TLB-uppslagning. = & fanns/fanns inte Minne 20bit10bit index ³ 1 felavbrott 2bit byte-offset till processorn adress in data ut lagrat ord (32 bit)lagrad adresslapp (20 bit) med 1024 ord om 53bit TLB fysiskt sidnummer... = = = =......
Trickets restriktion ● Ingen enda bit från adresslappen får användas som indexbit! Detta medför att: ● Cachestorlek associativitetstal x sidstorlek
Sidfärgning (page coloring) ● Den virtuella adressen används som index, den fysiska finns i adresslappen virtuellt sidnummersidoffset index fysiskt sidnummersidoffset får inte ändras av adressöversättningen
Sidfärgning ● Tricket kan användas i större cacheminnen ● Sidbytesalgoritmen väljer alltid sidor så att överlappande bitar ej ändras av TLB:n ● Huvudminnet som cache för hårddisken - inte längre fullt associativt ● Falska konflikter minskar eller försvinner
Hierarki av cacheminnen ● Register ● I- och D-cache ● Level 2, Level 3 ● Huvudminne ● Skivminne L2 cache L3 cache En minneshierarki med flera nivåer. primärminne på processor register skivminne virtuella adresser fysiska adresser data D- TLB L1D- cache I- TLB L1I- cache instruk- tioner processor- chippet