Pregunta

¿Hay alguna forma de leer el contenido de la memoria caché de la CPU? La arquitectura es para ARM.

Estoy invalidando un rango de direcciones y luego quiero asegurarme de si está invalidado o no. Aunque puedo leer y escribir el rango de direcciones con y sin invalidar y verificar la invalidación, quiero saber si es posible leer el contenido del caché

¡Gracias!

¿Fue útil?

Solución

ARM9 proporciona manipulación de la memoria caché y registros de prueba que le permiten examinar el estado de la memoria caché. Aquí hay un punto de partida razonable:

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

  

El ICache y DCache se mantienen utilizando las instrucciones MCR y MRC para los registros 7 y 9 de CP15, definidos por el modelo del programador ARM v4T. Operaciones adicionales están disponibles usando MCR y MRC para el registro 15 de CP15. Estas operaciones se combinan con aquellas que usan los registros 7 y 9 para permitir la prueba de los cachés completamente en software.

Estas son instrucciones privilegiadas, por lo que es posible que no se pueda acceder a ellas en su plataforma de destino.

Comenzaría con un programa simple que volca el estado de todas las líneas de caché. Eso debería proporcionarle suficiente información para leer los datos en el caché simplemente leyendo las ubicaciones de memoria que proporcionan las etiquetas de caché.

Otros consejos

Dudo en escribir, es imposible, así que escribo que es extremadamente difícil. Probablemente no haya una respuesta genérica. Dado que la memoria caché de la CPU funciona de forma transparente, no es posible leer su contenido desde la CPU conectada sin alterar el contenido de la memoria caché. Los cachés de la CPU generalmente se implementan como CAM (memoria direccionable de contenido, memoria asociativa) si la CPU intenta acceder a los datos, se busca el caché, si los datos no están allí, se obtienen de la memoria, pero me temo que este proceso es transparente para la CPU .

La opción es usar un tipo de módulo de observación HW y olfatear en el bus del sistema, que conecta la memoria caché a la RAM. Si la solicitud de datos apareciera en el bus, entonces los datos solicitados no estaban en caché.

espero que alguien con un conocimiento más profundo de HW arroje una luz.

hay una entrada en wikipedia que analiza el almacenamiento en caché de la CPU: http://en.wikipedia.org/wiki/CPU_cache

Por definición, todo lo que tendría que hacer para leer el contenido de un caché sería cargar la ubicación de memoria que está almacenando el caché. Si el caché funciona correctamente, extraerá el contenido del caché.

Sin embargo, si está intentando leer el contenido de la caché I, eso depende de la arquitectura. Además, tendrás que considerar las condiciones de carrera. Las instrucciones para leer el contenido de la memoria caché pueden sobrescribir inadvertidamente el contenido de la memoria caché.

Como se indica en este hilo , simplemente usando el La CPU puede hacer que cambie el contenido de la memoria caché. Dado que (la mayoría) las implementaciones de caché son intencionalmente completamente transparentes para la CPU, no podrá ver el contenido de la caché directamente desde el software que se ejecuta en las CPU tradicionales.

Para hacer algo como esto se requeriría una CPU con memoria caché (con instrucciones especiales para controlar la memoria caché; no tengo idea de si realmente existen), o necesitaría instalar un módulo HW separado para ver la memoria caché. Aquí hay 2 ideas que tengo para eso:

  1. Reemplace su controlador de caché original con uno que tenga características de control adicionales y que pueda conectarse al bus del sistema para leer datos. Este controlador se encuentra " entre " la CPU y el caché.

  2. Coloque un módulo secundario en paralelo con el caché original, con acceso de caché de solo lectura. Usando una línea de interrupción especial (o una señal similar de hardware -NO software-), la CPU podría activar un volcado de la memoria caché en la memoria de este módulo y luego leerlo nuevamente (a través de un bus) más tarde. Este controlador no afectaría el funcionamiento de su caché; simplemente le permitiría tomar instantáneas en cualquier momento dado.

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