¿Cómo deshabilitar los cachés L1 y L2 del procesador?

10

¿Es posible deshabilitar la caché L1 y / o L2 en Ubuntu 14.04 (preferiblemente en un lenguaje de nivel superior como Python)? ¿Si es así, cómo?

Además, ¿deshabilitar el caché diferirá significativamente entre diferentes arquitecturas? Si es así, estoy más interesado en un ARM Cortex-A15.

EDITAR

Mientras investigaba cómo deshabilitar el caché, descubrí el archivo "drop_caches" en / proc / sys / vm / de la documentación de kernel.org

"Escribir sobre esto hará que el núcleo deje caer cachés limpias, así como objetos de losas recuperables como dentries e inodes. Una vez que se caen, su memoria se libera".

...

"Este archivo no es un medio para controlar el crecimiento de los diversos cachés del núcleo (inodes, dentries, pagecache, etc.). Estos objetos son recuperados automáticamente por el núcleo cuando se necesita memoria en otra parte del sistema".

Esto no parece lo que estoy buscando, ya que no solo no parece que deshabilitaría el caché, pensé que la memoria virtual reside en el sistema operativo y no en el hardware. Mi objetivo es deshabilitar el caché para que la memoria deseada se deba buscar en otro lugar, como dentro de la RAM.

EDITAR

Para aclarar, entiendo lo que deshabilitar el caché le hará al sistema. Sin embargo, es una técnica común utilizada en aplicaciones espaciales para aumentar la fiabilidad de las aplicaciones críticas para la seguridad. Aquí hay algunos recursos que documentan este fenómeno:

Reducción de fallas inducidas por la radiación del software incorporado a través de memorias caché

Guía para las pruebas de radiación de tierra de microprocesadores en el entorno de radiación espacial

Incluso hay libros sobre el tema:

Efectos de la radiación ionizante en electrónica: de recuerdos a imágenes

AustinTronics
fuente
Si está tratando de hacer cosas como deshabilitar la memoria caché, está haciendo programación incrustada, si está haciendo programación incrustada, probablemente debería estar usando un lenguaje incrustado (C), y yo no usaría un sistema operativo. Como un caché de desactivación aparte, ralentizará enormemente su sistema.
Sam
Tengo otras formas de acelerar mi sistema sin caché, pero no puedo decir cuán efectivos son estos métodos hasta que desactive el caché y ejecute puntos de referencia. Soy muy consciente de que C o ensamblaje es la opción preferida para aplicaciones integradas. Sin embargo, están sucediendo varias cosas de alto nivel que tienen más sentido hacer en Python. Sería más conveniente si Python tuviera soporte para hacer algo como deshabilitar el caché para mi aplicación en particular. En cuanto a la eliminación del sistema operativo, el metal desnudo no es una opción para mí desafortunadamente.
AustinTronics

Respuestas:

2

No puede hacerlo directamente en Python, ya que necesita un módulo de kernel para hacerlo (y los derechos de root para cargar ese módulo).

Consulte http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 para saber qué se necesita para invalidar el caché L1 (invalidar, no deshabilitar).

Las diferentes arquitecturas de CPU (por ejemplo, x86 frente a ARM) requieren un código de ensamblaje diferente (instrucciones de CPU) para deshabilitar el caché. No estoy seguro de si el kernel de Linux tiene alguna posibilidad de deshabilitar los cachés L1 / L2 / L3 / L4 y si tuviera eso, creo que solo se usaría internamente por un corto período de tiempo, ya que la CPU es lenta sin estos escondites.

Consulte ¿Hay alguna forma de deshabilitar el caché de la CPU (L1 / L2) en un sistema Linux? para obtener un enlace sobre cómo puede deshabilitar la memoria caché en un sistema x86 / x64 (debe cambiar el registro cr0). Para ARM, compruebe el comportamiento deshabilitado de caché .

No estoy seguro de que comprenda completamente lo que hacen los cachés de la CPU. ¿Puede explicar por qué quiere paralizar el rendimiento de su sistema?

Tehnicaorg
fuente
La aplicación es informática integrada de alto rendimiento para la industria aeroespacial. El tiempo de actividad es más importante para mi aplicación que el rendimiento. Sé que esto suena extraño, pero el fenómeno está bien documentado.
AustinTronics
¿Cómo puede tener una aplicación de "alto rendimiento" sin un caché de CPU? ¿Qué tienen que ver los cachés con el tiempo de actividad?
tehnicaorg
2
Soy un desarrollador de software en I + D, hacemos muchas cosas locas. Lo siento si parece que estoy omitiendo información o siendo vago en todas mis respuestas, pero no puedo entrar tanto como me gustaría, ya que es información de propiedad. Si está interesado en lo que la caché tiene que ver con el tiempo de actividad en aplicaciones aeroespaciales, aquí hay un documento JPL disponible al público . Aquí hay un artículo de diario sobre esto también.
AustinTronics
1
Irónicamente, deshabilitar el caché L1 tiene sentido, ¡hoy!
Anillo Ø
4

Puede lograr esto con un pequeño código ASM, consulte el capítulo 11 de la Guía de programación del sistema Intel

11.5.3 Prevención del almacenamiento en caché

Para deshabilitar los cachés L1, L2 y L3 después de que se hayan habilitado y hayan recibido rellenos de caché, realice los siguientes pasos: 1. Ingrese al modo de caché sin relleno. (Establezca el indicador de CD en el registro de control CR0 en 1 y el indicador de NW en 0. 2. Limpie todas las memorias caché utilizando la instrucción WBINVD. 3. Desactive los MTRR y configure el tipo de memoria predeterminado como sin caché o configure todos los MTRR para el tipo de memoria sin caché (vea la discusión sobre la discusión del campo TIPO y la bandera E en la Sección 11.11.2.1, “IA32_MTRR_DEF_TYPE MSR”).

No conozco un módulo de Python que implemente esto.

Gayo
fuente