500 likes | 638 Views
Simulering av MIPS32 4K med TLB och CACHE. Andrei Krougliak Simon Olsson Luleå tekniska universitet 2005. Syncsim och MIPS. Syncsim – ett simuleringsverktig för synkrona kretsar MIPS modell för Syncsim Pipelined MIPS modell för Syncsim
E N D
Simulering av MIPS32 4Kmed TLB och CACHE Andrei Krougliak Simon Olsson Luleå tekniska universitet 2005
Syncsim och MIPS • Syncsim – ett simuleringsverktig för synkrona kretsar • MIPS modell för Syncsim • Pipelined MIPS modell för Syncsim • Pipelined MIPS modell för Syncsim med TLB, cache, och RAM
TLB • TLB = Translation Lookaside Buffer • Varför behöver man TLB? • Hur fungerar TLB? • Hur implementerar man TLB?
TLB: Varför behöver man den? • TLB ger ett virtuellt adressutrymme för varje process i ett system där flera process exekveras samtidigt (multitask system) • Det blir enklare att skriva program (programmerare behöver inte ta hänsyn till andra processer som körs) • TLB ger minnesskydd (en användarprocess får inte tillgång till minnesadress som används av en annan process eller av operativsystemet)
TLB: Några definitioner • En sida är ett sammanhängande block av minne, men två sidor i följd (t.ex. sidorna 3 och 4) kan ligga skilda åt i det fysiska minnet. • Virtuell adress (VA) används i källkoden och i processorn VA = VPN + page offset • Fysisk adress (PA) används i det fysiska minnet (t.ex. DRAM) PA = PFN + page offset • TLB översätter VPN till PFN medan page offset lämnas oförändrat (den adresserar en enskild byte inom sidan).
TLB: Hur fungerar den? • Resultat av översättning beror på vilken process som körs, t.ex. • när process P1 körs: VA=0x12345008 TLB PA=0x00111008 • när process P2 körs: VA=0x12345008 TLB PA=0x0044 0008 här används 12-bitars page offset som motsvarar en sidstorlek på 4KB.
TLB: Hur fungerar den? • Alla översättningar av VPN till PFN för en enskild process lagras i en sidtabell i kernelminnet. TLB innehåller bara de senast använda rader från processens sidtabell. • Operativsystemet skapar en ny sidtabell när en process startas. Det är operativsystemets ansvar att: • Allokera nya sidor i minnet; • Flytta sidor till hårddisken när det fysiska minnet är fullt (page swapping); • Ta bort sidor från minnet efter att processen som använde dem har avslutats; • Uppdatera TLB.
TLB: Hur fungerar den? • Eftersom storleken av en TLB är begränsad innehåller den bara de senaste använda rader från en process sidtabell. • Men detta påverkar inte prestandan dramatisk eftersom samma sidor adresseras av programmet flera gånger (temporal locality och spatial locality).
TLB: TLB instruktioner • Eftersom TLB ska fyllas på från processens sidtabell av operativsystemet behöver vi särskilda instruktioner i ISA. Man brukar inte tillåta användarprocesser att köra instruktionerna. • MIPS Priviliged Architecture definierar bl.a. TLBR, TLBP, TLBWI, TLBWR.
TLB: TLB och context switch • För att operativsystemet ska kunna byta den aktiva processen (utföra en context switch) behöver man: • antingen tömma TLB vid varje processbyte, • eller spara ett process ID med varje översättning som lagras i TLB.
TLB: TLB och page swapping • För att operativsystemet ska kunna flytta sidor till hårddisken (swap pages) behöver man på något sätt markera det i sidtabellen och i TLB. • Det kan göras med hjälp av en Valid bit i TLB och i sidtabellen.
TLB: TLB och read-only sidor • Man kan använda TLB för att skydda vissa sidor från skrivning av processen som äger dem... (förutom allmän virtuellt minnes skydd som garanterar att andra processer inte får åtkomst till processens minne) ...genom att ha en särskild ”write enable” bit för varje sida i sidtabell och i TLB.
TLB: Optimeringar • TLB kan implementeras så att den stödjer variabel sidstorlek. • Man kan ha separata TLB för dataminne och för instruktionsminne så att de kan användas parallellt.
MIPS 4K processorkärna • Processorkärnan består av: • Execution Core; • System Co-Processor; • Memory Management Unit med TLB; • (L1) Data cache; • (L1) Instruction cache; • Bus Interface Unit.
MIPS 4K: Adressering • 32-bitars virtuell adress som översättas av MMU till en 32-bitars fysisk adress (en del av kernelminnet är omappat). • Parallell översättning av instruktionsadress och dataadress. • D-TLB med 3 rader, I-TLB med 3 rader, JointTLB med 16 dubbla rader som stödjer variabel sidstorlek på 4/16/256 KB eller 1/4/16 MB. • En rad i D-TLB eller I-TLB innehåller: • 1 Global bit (G) • 8 bitar Address Space Identifier (ASID) • 20 bitar VPN[31:12] • 20 bitar PFN[31:12] • 3 Cacheability bitar (C[2:0]) • 1 Write-enable bit (D) • 1 Valid bit (V)
MIPS 4K Adress Utrymme Virtuellt minne Fysiskt minne 0x0000 0000 0x8000 0000 Kernel sida 0 Kernel, sida 0 Kernel sida 1 Kernel, sida 1 Kernel sida 2 Kernel, sida 2 Kernel sida 3 Kernel, sida 3 0xFFFF FFFF Process 1, sida 0 Process 2, sida 2 0x0000 0000 Process 1, sida 0 Process 1, sida 1 Process 1, sida 1 Process 2, sida 0 Process 2, sida 1 Process 1, sida 2 Process 1, sida 3 Process 1, sida 3 Process 2, sida 3 0x7FFF FFFF Process 1, sida 2 0x0000 0000 Process 2, sida 0 Process 2, sida 1 Process 2, sida 2 Process 2, sida 3 0xFFFF FFFF 0x7FFF FFFF
Instruction Fetch • Om vi har en I-TLB träff samt en I-Cache träff ska en ny instruktion hämtas varje klockcykel EntryHi ASID [7:0] IPA Page offset [11:0] IVA [31:0] PC VPN [31:12] I-TLB G ASID VPN PFN C D V PFN [31:12] Hit = C, D, V Exception to CPU MMU Clk to CPU Clk
Instruction Fetch • Om vi har en I-TLB träff samt en I-Cache träff ska en ny instruktion hämtas varje klockcykel EntryHi ASID [7:0] IVA [31:0] IPA Page offset [11:0] PC VPN [31:12] ASID [7:0] I-TLB G ASID VPN PFN C D V PFN [31:12] 0 1 Hit = 0 1 0 1 C, D, V Exception to CPU MMU Clk to CPU Clk
Instruction Fetch • Om vi har en I-TLB träff samt en I-Cache träff ska en ny instruktion hämtas varje klockcykel EntryHi ASID [7:0] IPA Page offset [11:0] IVA [31:0] PC VPN [31:12] ASID [7:0] I-TLB PFN [31:12] G ASID VPN PFN C D V 0 1 Hit = 0 1 0 1 C, D, V Exception to CPU MMU Clk to CPU Clk
Instruction Fetch + Data Load/Store • Om vi har I-TLB och D-TLB träff samt I-Cache och D-Cache träff ska en ny instruktion hämtas varje klockcykel samt att en dataminnes operation kan utföras varje klockcykel MMU D-PFN I-PFN Hit Hit ITLB DTLB = = IVA DVA ASID
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] DVA Write enable D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = … ... ... ... ... ... ... ... ...
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] DVA Write enable D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = … ... ... ... ... ... ... ... ...
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] DVA Write enable D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000000 ...1 ...1 … ... ... ... ... ... ... ... ...
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] 0 DVA Write enable 0 D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000000 ...1 ...1 … ... ... ... ... ... ... ... ... 0 0 ...1
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DTLB skrivs i nästa klockcykeln, processorn stannar (stalls) för 1 klockcykel DVA [31:0] 0 DVA Write enable 0 D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 0 ... ... 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000000 ...1 ...1 … ... ... ... ... ... ... ... ... 0 0 ...1
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] 0 DVA Write enable D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 0 ... ... 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000000 ...1 ...1 … ... ... ... ... ... ... ... ...
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] 16 KB page 14 bitars page offset DVA [31:0] 10 DVA Write enable 10 D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = … ... ... ... ... ... ... ... ...
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] 10 DVA Write enable 10 10 D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000001 ...1 ...1 … ... ... ... ... ... ... ... ...
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] 1 10 DVA Write enable 10 1 10 D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 0 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000001 ...1 ...1 … ... ... ... ... ... ... ... ... 0 1 10 10 ...1
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DTLB skrivs i nästa klockcykeln, processorn stannar (stall) för 1 cykel DVA [31:0] 1 10 DVA Write enable 10 1 10 D-TLB D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 1 10 0 10 ... ... 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000001 ...1 ...1 … ... ... ... ... ... ... ... ... 0 1 10 10 ...1
D-TLB Miss + JointTLB Hit EntryHi ASID [7:0] DVA [31:0] 1 10 DVA Write enable 10 D-TLB 10 D-PFN G ASID VPN PFN C D V 0 1 DTLB entry = 0 1 DTLB Hit 1 10 0 10 ... ... 1 J-TLB G ASID VPN2 CMASK PFN1 C, D,V1 PFN0 C, D ,V0 JTLB Hit = 0 000001 ...1 ...1 … ... ... ... ... ... ... ... ...
Cache - Behov för minneshierarkin • Skillnaden i prestanda mellan CPU och minne • Idag är långa minnesåtkomsttider en flaskhals för datorprestanda
Cache - Minneshierarkin Snabbare, mindre, dyrare Långsammare, större, billigare HD pagefile (inte en del av filsystemet) Nivå 1 cache SRAM Nivå 2 cache SRAM Minne DRAM
Cache - Minneshierarkin Snabbare, mindre, dyrare Långsammare, större, billigare Swapping (OS) HD pagefile (inte en del av filsystemet) Nivå 1 cache SRAM Nivå 2 cache SRAM Minne DRAM Behandlas separat: Icke-cacheable minne Minnesmappad I/O enheter DMA
Cache - Minneshierarkin Snabbare, mindre, dyrare Långsammare, större, billigare Swapping (OS) HD pagefile (inte en del av filsystemet) Nivå 1 cache SRAM Nivå 2 cache SRAM Minne DRAM Idag koncentrerar vi oss här
Cache uppbyggnad • En cache rad i en fullt associativ cache består av en cache tag = en adress på ett block (n ord) + data = n ord i följd. • Om vi laddar en hel rad efter varje minnesåtkomst som inte kan betjänas av cachen så blir sannolikhet stor att efterföljande minnesåtkomster kommer att betjänas av cachen utan att stanna (stall) processorn (tack vare temporal locality och spatial locality)
Det här är en k-wsa cache. Om k=1 har vi en direkt mappad cache. Alla adresser med samma cache index mappas till samma ”set”, men antalet av rader inom en ”set” är begränsad. Vi behöver en smart ersättningsstrategi inom en ”set”, t.ex. en variant av LRU. Vissa cachar tillåter även att ”låsa” en rad. Cache uppbyggnad
Cache uppbyggnad • I vilka fall ska vi börja ladda en cache rad från minnet? • Hur mycket data ska vi ha i en cache rad? • Vilken ersättningsstrategi använder vi? • Hur garanterar vi minneskonsistens (dvs. att innehållet av minnet och cachen matchar)?
Cache: Write-allocate vs no write-allocate • I vilka fall ska vi börja ladda en cache rad från minnet? • För en write-allocate cache: • Efter varje minnesåtkomst, ”load” samt ”store”, som inte kan betjänas av cachen. • Bra för ”sw addr1 data” följd av ”lw addr1 reg”. • För en no write-allocate cache: • Efter varje ”load” operation som inte kan betjänas av cachen, men inte efter en ”store” operation. • Bra för en isolerad ”sw addr1 data”. • Make common case fast!
Cache: Storlek på en cache rad • Hur mycket data ska vi ladda till en cache rad? • Längre rader längre laddningstid längre processor stallning, men antalet cache miss minskar • Kortare rader kortare laddningstid, men antalet cache miss ökar • Optimeringar: • ”Early restart”: man startar om processorn så fort det efterfrågade ordet kommer och fortsätter laddar cache raden i bakgrunden • ”Critical word first”: man börja ladda med ordet som efterfrågades även om det ligger i mitten av ett block (behöver stöd av DRAM eller nivå 2 cache)
Cache: Ersättningsstrategi • Vilken ersättningsstrategi använder vi? • Slumpmässig ersättning; • LRU; • LRU, men operativsystemet kan låsa kritiska rader så att de aldrig ersättas (behöver en särskild instruktion i ISA).
Cache: Cache och minneskonsistens • ”Store” operation kan skriva: • Både till cachen och till minnet (write-through cache) ”write stall” om vi inte använder någon buffer; ”write stall” om vi har flera ”store” operationer i följd och buffern överflödas. • Bara till cachen (write-back cache). Hela cache raden måste då skrivas till minnet om den har valts för ersättning Inget ”write stall”; Oförväntad, stor fördröjning när hela raden skrivas till minnet. • Make common case fast!
MIPS 4K D-Cache och I-Cache • Separata datacache och instruktionscache upp till 16 KB varje. • Cache rad på 16 byte (4 ord). • No write-allocate, write-through (med 2 16-byte buffrar i Bus Interface Unit), ”critical word first” och ”early restart”. • Virtuellcache index + fysiskcache tag som tillåter att uppslagning sker parallellt i cachen och i TLB.
Simulering av MIPS32 4Kmed TLB och CACHE Andrei Krougliak Simon Olsson 2005