Em um microprocessador com gerenciamento de TLB de hardware (por exemplo, um Intel x86-64), se ocorrer uma falha no TLB e o processador estiver percorrendo a tabela de páginas, são esses acessos de memória (sem chip) passando pela hierarquia de cache (L1, L2, etc. )?
12
Respostas:
Sim, até onde eu sei, nos processadores Intel x86-64, quando ocorre uma falha no TLB e o processador está andando na tabela de páginas, esses acessos à memória sem chip passam pela hierarquia do cache.
Ainda estou um pouco confuso com alguns detalhes, e espero que outra resposta os preencha - não há um manual da Intel ou AMD que descreva a página em detalhes excruciantes? Meu entendimento é que:
O diagrama da página 2 de Thomas W. Barr, Alan L. Cox e Scott Rixner. "Cache de tradução: ignore, não ande (a tabela de páginas)" que desenha uma linha entre "Entradas armazenadas pelo cache MMU" e "entradas armazenadas pelo cache de dados L2". (Este pode ser um documento útil para quem cria novas CPUs , que é totalmente tópico sobre "Design de eletrônicos").
Stephane Eranian e David Mosberger. "Memória virtual no kernel IA-64 Linux" e Ulrich Drepper. "O que todo programador deve saber sobre memória" (este pode ser um documento útil para quem escreve sistemas operacionais que lidam com a tabela de páginas IA-64, que é um pouco fora de tópico para o ED - talvez Stack Overflow com o " sistema " ou " osdev " ou o wiki do OSDev.org seria um lugar melhor para esse tópico).
Tabela A-10 na página 533 da Intel. "Manual do desenvolvedor de software das arquiteturas Intel® 64 e IA-32" "PAGE_WALKS.CYCLES ... pode sugerir se a maioria das percursos de página é satisfeita pelos caches ou causa um erro de cache L2."
fonte
invlpg
invalidar qualquer cache TLB para um determinado endereço virtual. Se a caminhada de página do HW não encontrar uma entrada para esse endereço virtual ou as permissões da entrada não permitirem o acesso, você receberá uma#PF
exceção. O sistema operacional lida com isso atualizando a tabela de páginas (possivelmente após a paginação dos dados do disco ou fazendo a cópia na gravação) e, em seguida, continuando para que o carregamento / armazenamento defeituoso seja executado novamente e a paginação HW seja bem-sucedida.Costumo concordar que isso pertence a uma arquitetura de computadores stackexchange, não a um stackexchange de eletrônica, mas como está aqui:
@davidcary está correto.
Alguma história:
Os passeios pela tabela de páginas Intel x86 NÃO foram armazenados em cache até o P5, também conhecido como Pentium. Mais precisamente, os acessos à memória de passeio da tabela de páginas não foram armazenados em cache, ignoraram o cache. Como a maioria das máquinas até então era de gravação, elas receberam valores consistentes com o cache. Mas eles não bisbilhotaram os caches.
P6, também conhecido como Pentium Pro e AFAIK, todos os passeios subsequentes da tabela de páginas dos processadores tiveram permissão para acessar o cache e usar um valor extraído do cache. Assim, eles trabalharam com caches de write-back. (Você pode, é claro, colocar as tabelas de páginas em memória incachável, definida, por exemplo, pelos MTRRs. Mas isso é uma grande perda de desempenho, embora possa ser útil para depurar sistemas operacionais.)
A propósito, esse "acesso à memória de passeio da tabela de páginas pode acessar os caches de dados" é separado de "as entradas da tabela de páginas podem ser armazenadas (armazenadas em cache) em um Buffer de TLS de tradução da TLB". Em algumas máquinas, o TLB é chamado de "cache de tradução".
Outro problema relacionado é que os nós internos das tabelas de páginas podem ser armazenados em cache em ainda mais estruturas de dados do tipo TLB, por exemplo, o cache do PDE.
Uma diferença importante: o cache de dados é coerente e espionado. Mas os caches TLB e PDE não são espionados, ou seja, não são coerentes. A linha inferior é que, como as tabelas de páginas podem ser armazenadas em cache em TLBs e PDE não coerentes, o software deve liberar explicitamente as entradas individuais ou os grupos em massa (como todo o TLB), quando as entradas da tabela de páginas podem ter sido tão comuns. em cache são alterados. Pelo menos quando alterado de maneira "perigosa", passando de RW-> R-> I ou alterando endereços.
Eu acho que é justo dizer que toda vez que um novo tipo de cache não-coerente do tipo TLB é adicionado, algum sistema operacional é interrompido, porque havia suposições implícitas de que isso não estava sendo feito.
fonte