Pergunta

No nosso sistema embarcado (usando um processador PowerPC), pretende desactivar a cache do processador.Que medidas devemos tomar?

Para esclarecer um pouco, o aplicativo em questão deve ter como uma constante de velocidade de execução, como nós podemos fazer isso.A variabilidade na execução do mesmo caminho de código não é aceitável.Esta é a razão para desativar o cache.

Foi útil?

Solução

Eu sou o tipo de final para a questão, e também tem sido um tempo desde que eu fiz todo o baixo nível de processador código de inicialização no Cpp, mas eu me lembro que o cache e MMU sendo muito bem acoplado (tinha que ser activado para que os demais) e eu acho que na MMU tabelas de página, você pode definir o cache de atributo.

Meu ponto é este:se há um certo subconjunto de código que deve ser executado no determinístico de tempo, talvez você localizar esse código (através de um ligador de arquivo de comando) em uma região de memória que é definido como não armazenáveis em cache na página tabelas?De que maneira o código que pode/deve beneficiar o cache faz, e (espero) subconjunto de código que não devia, não.

Eu faria isso assim, de qualquer maneira, para que mais tarde, se você quiser habilitar o cache por parte do sistema, você só precisa virar alguns bits no MMU tabelas de página, em vez de (re)escrever o código de inicialização para definir um backup de todas as tabelas de página & cache.

Outras dicas

A partir do E600 manual de referência:
O HID0 finalidade especial de registrar contém vários bits que invalida, desativar, e bloquear a instrução e caches de dados.

Você deve usar HID0[DCE] = 0 para desabilitar o cache de dados.
Você deve usar HID0[ICE] = 0 para desabilitar o cache de instrução.

Nota-se que a potência, ambos os caches estão desativados.Você vai precisar de escrever isso em código assembly.

Talvez você não deseja desabilitar globalmente cache, você apenas deseja desativá-lo para um determinado intervalo de endereços?

Em alguns processadores você pode configurar TLB (translation lookaside buffer) entradas para a intervalos de endereços, de modo que cada intervalo poderia ter cache activada ou desactivada.Desta forma, você pode desabilitar o cache de memória de e/S mapeados, e ainda deixar o cache para o principal bloco de memória RAM.

A única PowerPC que eu fiz foi um PowerPC 440EP (da IBM, em seguida, AMCC), então eu não sei se todos PowerPCs funcionam da mesma maneira.

Que tipo de PPC core é?O controle de cache é muito diferente entre os diferentes núcleos de diferentes fornecedores...também, desabilitando a memória cache é em geral considerado uma coisa muito ruim para a máquina.O desempenho torna-se tão crawlingly lento do que você gostaria de fazer, bem como com um velho de 8 bits processador (exagerando um pouco).Alguns BRAÇO variantes têm TCMs, rigidamente acoplado memórias, que o trabalho em vez de caches, mas eu não estou ciente de qualquer PPC variante com que facilidade.

Talvez a melhor solução é manter o Nível 1 caches activas, e usar o chip de caches L2 como estaticamente mapeada de memória RAM em vez disso?Que é comum na moderna PowerQUICC dispositivos, pelo menos.

Desativar o cache vai fazer você não é bom em tudo.A sua velocidade de execução vai cair por uma ordem de magnitude.Você nunca iria navio de um sistema como este, portanto, o seu desempenho nestas condições, não é de seu interesse.

Para alcançar uma constante de velocidade de execução, considere uma das seguintes abordagens:

1) Bloqueio de alguns ou de todos cache.Todos os atuais chips PowerPC da Freescale, a IBM e a AMCC oferecem esse recurso.

2) Se é uma Freescale, chip de cache L2, considere o mapeamento de parte do que o cache de memória on-chip.

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