Pregunta

En nuestro sistema integrado (que utiliza un procesador PowerPC), queremos desactivar la memoria caché del procesador.¿Qué pasos debemos tomar?

Para aclarar un poco, la aplicación en cuestión debe tener una velocidad de ejecución lo más constante que podamos lograr.La variabilidad en la ejecución de la misma ruta de código no es aceptable.Esta es la razón para desactivar el caché.

¿Fue útil?

Solución

Llegué un poco tarde a la pregunta, y también ha pasado un tiempo desde que hice todo el código de inicio del procesador de bajo nivel en PPC, pero creo recordar que el caché y la MMU estaban bastante estrechamente acoplados (uno tenía que estar habilitado para habilitar el otro) y yo pensar en las tablas de páginas MMU, puede definir el atributo almacenable en caché.

Entonces mi punto es este:Si hay un determinado subconjunto de código que debe ejecutarse en un tiempo determinista, ¿tal vez ubique ese código (a través de un archivo de comando del vinculador) en una región de la memoria que está definida como no almacenable en caché en las tablas de páginas?De esa manera, todo el código que puede/debería beneficiarse del caché lo hace, y el (con suerte) subconjunto de código que no debería beneficiarse, no.

Lo manejaría de esta manera de todos modos, para que más adelante, si desea habilitar el almacenamiento en caché para parte del sistema, solo necesite invertir algunos bits en las tablas de páginas de MMU, en lugar de (re)escribir el código de inicio en configurar todas las tablas de páginas y el almacenamiento en caché.

Otros consejos

Del manual de referencia del E600:
El registro de propósito especial HID0 contiene varios bits que invalidan, deshabilitan y bloquean las cachés de instrucciones y datos.

Debe usar HID0[DCE] = 0 para deshabilitar el caché de datos.
Debe usar HID0[ICE] = 0 para deshabilitar el caché de instrucciones.

Tenga en cuenta que al encender, ambos cachés están deshabilitados.Deberá escribir esto en código ensamblador.

¿Quizás no desee deshabilitar el caché globalmente, solo desee deshabilitarlo para un rango de direcciones en particular?

En algunos procesadores, puede configurar entradas TLB (búfer de búsqueda de traducción) para rangos de direcciones de modo que cada rango pueda tener el almacenamiento en caché habilitado o deshabilitado.De esta manera, puede desactivar el almacenamiento en caché para las E/S asignadas en memoria y aún dejar el almacenamiento en caché activado para el bloque principal de RAM.

El único PowerPC en el que hice esto fue un PowerPC 440EP (de IBM, luego AMCC), así que no sé si todos los PowerPC funcionan de la misma manera.

¿Qué tipo de núcleo de PPC es?El control de caché es muy diferente entre diferentes núcleos de diferentes proveedores...Además, deshabilitar el caché en general se considera algo realmente malo para la máquina.El rendimiento se vuelve tan lento que lo mismo funcionaría con un procesador antiguo de 8 bits (exagerando un poco).Algunas variantes de ARM tienen TCM, memorias estrechamente acopladas, que funcionan en lugar de cachés, pero no conozco ninguna variante de PPC con esa función.

¿Quizás una mejor solución sea mantener activas las cachés de nivel 1 y utilizar las cachés L2 en el chip como RAM asignada estáticamente?Esto es común al menos en los dispositivos PowerQUICC modernos.

Desactivar el caché no te servirá de nada.Su velocidad de ejecución disminuirá en un orden de magnitud.Nunca enviarías un sistema como este, por lo que su rendimiento en estas condiciones no tiene ningún interés.

Para lograr una velocidad de ejecución constante, considere uno de estos enfoques:

1) Bloquear parte o la totalidad del caché.Todos los chips PowerPC actuales de Freescale, IBM y AMCC ofrecen esta característica.

2) Si se trata de un chip Freescale con caché L2, considere asignar parte de ese caché como memoria en el chip.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top