Pergunta

Existe alguma maneira de ler o conteúdo do cache da CPU? A arquitetura é para braço.

Estou invalidando uma variedade de endereços e, em seguida, quero garantir se está invalidado ou não. Embora eu possa ler e escrever da gama de endereços com e sem invalidar e verificar a invalidação, quero saber se é possível ler o conteúdo do cache

Obrigado!!

Foi útil?

Solução

O ARM9 fornece manipulação de cache e registros de teste que permitem examinar o estado do cache. Aqui está um ponto de partida razoável:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0151c/chdcfejb.html

O ICACHE e o DCACHE são mantidos usando as instruções MCR e MRC para os registros 7 e 9 do CP15, definidos pelo modelo do programador ARM V4T. Operações adicionais estão disponíveis usando o registro MCR e MRC para CP15 15. Essas operações são combinadas com aqueles que usam os registros 7 e 9 para permitir o teste dos caches inteiramente no software.

Essas são instruções privilegiadas para que eles não sejam acessíveis em sua plataforma de destino.

Eu começaria com um programa simples que despeja o estado de todas as linhas de cache. Isso deve fornecer informações suficientes para ler os dados no cache simplesmente lendo os locais de memória que as tags de cache fornecem.

Outras dicas

Eu hesito em escrever, é impossível, então estou escrevendo, é extremamente difícil. Provavelmente não há resposta genérica. Dado que o cache da CPU funciona de forma transparente, não é possível ler seu conteúdo da CPU anexada sem alterar o conteúdo do cache. Os caches da CPU são geralmente implementados como CAM (memória endereçável de conteúdo, memória associativa) Se a CPU tentar acessar dados, o cache é procurado, se os dados não estiverem lá, são buscados da memória, mas receio que esse processo seja transparente para a CPU .

A opção é usar um tipo de módulo de observação HW e cheirar no barramento do sistema, que conecta o cache à RAM. Se a solicitação de dados aparecesse no barramento, os dados solicitados não estavam em cache.

Espero que alguém com conhecimento mais profundo da HW esclareça.

Há uma entrada na Wikipedia discutindo o cache da CPU:http://en.wikipedia.org/wiki/cpu_cache

Por definição, tudo o que você precisa fazer para ler um conteúdo de cache seria carregar o local da memória que está sendo armazenado pelo cache. Se o cache estiver funcionando corretamente, ele extrairia o conteúdo do cache.

No entanto, se você está tentando ler o conteúdo do i-cache, isso depende arquitetonicamente. Além disso, você terá condições de corrida a considerar. A instrução para ler um conteúdo de cache pode inadvertidamente escrever o próprio conteúdo do cache.

Como afirmado em este tópico, simplesmente usar a CPU pode fazer com que o conteúdo do cache mude. Como (a maioria) as implementações de cache são intencionalmente completamente transparentes para a CPU, você não poderá visualizar o conteúdo do cache diretamente do software em execução nas CPUs tradicionais.

Para fazer algo assim, exigiria uma CPU com reconhecimento de cache (com instruções especiais para controlar o cache; não tenho idéia se elas realmente existem), ou você precisaria instalar um módulo HW separado para visualizar o cache. Aqui estão 2 idéias que tenho para isso:

  1. Substitua o controlador de cache original por um que possui recursos de controle adicional e pode ser conectado ao barramento do sistema para ler dados. Este controlador fica "entre" a CPU e o cache.

  2. Coloque um módulo secundário em paralelo com o cache original, com acesso ao cache somente leitura. Usando uma linha de interrupção especial (ou sinal de software de hardware similar), a CPU pode acionar um dump do cache na memória deste módulo e depois lê -la de volta (sobre um barramento) posteriormente. Este controlador não afetaria a operação do seu cache; Isso simplesmente permitiria que você tirasse instantâneos a qualquer momento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top