Su un microprocessore con gestione TLB hardware (diciamo Intel x86-64) se si verifica un errore TLB e il processore percorre la tabella delle pagine, questi accessi alla memoria (off-chip) passano attraverso la gerarchia della cache (L1, L2, ecc. )?
Su un microprocessore con gestione TLB hardware (diciamo Intel x86-64) se si verifica un errore TLB e il processore percorre la tabella delle pagine, questi accessi alla memoria (off-chip) passano attraverso la gerarchia della cache (L1, L2, ecc. )?
Risposte:
Sì, per quanto posso dire, sui processori Intel x86-64, quando si verifica un errore TLB e il processore percorre la tabella delle pagine, gli accessi alla memoria off-chip passano attraverso la gerarchia della cache.
Sono ancora un po 'confuso su alcuni dettagli e spero che qualche altra risposta li riempia: non c'è un manuale Intel o AMD che descriva la camminata della pagina in dettagli lancinanti? La mia comprensione è che:
Lo schema a pagina 2 di Thomas W. Barr, Alan L. Cox, Scott Rixner. "Translation Caching: Skip, Don't Walk (la tabella delle pagine)" che traccia una linea tra "Voci archiviate dalla cache MMU" e "Voci archiviate dalla cache di dati L2". (Questo può essere un documento utile per le persone che progettano nuove CPU , che è totalmente in tema di "progettazione elettronica").
Stephane Eranian e David Mosberger. "Memoria virtuale nel kernel Linux IA-64" e Ulrich Drepper. "Ciò che ogni programmatore dovrebbe sapere sulla memoria" (Questo può essere un documento utile per le persone che scrivono sistemi operativi che si occupano della tabella delle pagine IA-64, che è un po 'fuori tema per ED - forse Stack Overflow con il "operativo- system " o il tag " osdev " o il wiki OSDev.org sarebbe un posto migliore per quell'argomento).
Tabella A-10 a pagina 533 di Intel. "Manuale dello sviluppatore del software per architetture Intel® 64 e IA-32" "PAGE_WALKS.CYCLES ... può suggerire se la maggior parte delle pagine sono soddisfatte dalle cache o causano un errore nella cache L2."
invlpg
a invalidare qualsiasi cache TLB per un dato virt virt. Se il pagewalk HW non trova una voce per quell'indirizzo virtuale o le autorizzazioni della voce non consentono l'accesso, si ottiene #PF
un'eccezione. Il sistema operativo lo gestisce aggiornando la tabella delle pagine (possibilmente dopo aver effettuato il paging dei dati dal disco o dopo aver eseguito la copia su scrittura), e quindi riprendendo in modo che il carico / archivio difettoso venga eseguito nuovamente e il pagewalk HW avrà esito positivo.
Tendo a concordare sul fatto che questo appartiene a uno stackexchange di architettura di computer, non a uno scambio di stack di elettronica, ma poiché questo è qui:
@davidcary è corretto.
Un po 'di storia:
I passi delle tabelle delle pagine Intel x86 NON sono stati memorizzati nella cache fino a P5, alias Pentium. Più precisamente, gli accessi alla memoria della tabella delle pagine non sono stati memorizzati nella cache, ignorando la cache. Poiché la maggior parte delle macchine fino a quel momento erano in scrittura, hanno ricevuto valori coerenti con la cache. Ma non curvarono le cache.
P6, noto anche come Pentium Pro e AFAIK, a tutte le successive passeggiate nella tabella delle pagine dei processori era consentito accedere alla cache e utilizzare un valore estratto dalla cache. Pertanto, hanno lavorato con cache di riscrittura. (È possibile ovviamente posizionare le tabelle delle pagine in una memoria non memorizzabile, definita, ad esempio, dagli MTRR. Ma si tratta di una grande perdita di prestazioni, sebbene possa essere utile per il debug dei sistemi operativi.)
A proposito, questo "accesso alla memoria della tabella delle pagine può accedere alle cache dei dati" è separato da "le voci della tabella delle pagine possono essere memorizzate (memorizzate nella cache) in un buffer TLB Ttranslation Lookaside)". Su alcuni computer il TLB è chiamato "cache di traduzione".
Un altro problema correlato è che i nodi interni delle tabelle delle pagine possono essere memorizzati nella cache in strutture di dati ancora più simili a TLB, ad esempio la cache PDE.
Una differenza fondamentale: la cache di dati è coerente e curvata. Ma le cache TLB e PDE non sono curvate, ovvero non sono coerenti. La linea di fondo è che, poiché le tabelle delle pagine possono essere memorizzate nella cache in TLB e cache PDE non coerenti, ecc., Il software deve esplicitamente svuotare sia le singole voci sia i gruppi di massa (come l'intero TLB), quando le voci della tabella delle pagine che potrebbero essere state tali vengono memorizzati nella cache. Almeno se modificato in modo "pericoloso", passando da RW-> R-> I o cambiando indirizzo.
Penso che sia corretto affermare che ogni volta che viene aggiunto un nuovo tipo di cache non coerente come TLB, alcuni sistemi operativi si sono rotti, poiché aveva implicazioni implicite che ciò non avveniva.