Est-il possible de désactiver le cache L1 et / ou L2 sur Ubuntu 14.04 (de préférence dans un langage de niveau supérieur comme Python)? Si c'est le cas, comment?
De plus, la désactivation du cache différera-t-elle considérablement entre les différentes architectures? Si c'est le cas, je suis plus intéressé par un ARM Cortex-A15.
ÉDITER
En recherchant comment désactiver le cache, j'ai découvert le fichier "drop_caches" dans / proc / sys / vm / à partir de la documentation de kernel.org
"L'écriture entraînera le noyau à supprimer des caches propres, ainsi que des objets de dalles récupérables comme des dentiers et des inodes. Une fois supprimés, leur mémoire devient libre."
...
"Ce fichier n'est pas un moyen de contrôler la croissance des différents caches du noyau (inodes, denteries, pagecache, etc ...) Ces objets sont automatiquement récupérés par le noyau lorsque de la mémoire est nécessaire ailleurs sur le système."
Cela ne semble pas être ce que je recherche car non seulement cela ne semble pas désactiver le cache, je pensais que la mémoire virtuelle résidait dans le système d'exploitation et non sur le matériel. Mon objectif est de désactiver le cache de sorte que la mémoire souhaitée doit être recherchée ailleurs, comme dans la RAM.
ÉDITER
Pour clarifier, je comprends ce que la désactivation du cache aura sur le système. Cependant, il s'agit d'une technique courante utilisée dans les applications spatiales pour augmenter la fiabilité des applications critiques pour la sécurité. Voici quelques ressources qui documentent ce phénomène:
Réduction des défaillances logicielles induites par les radiations grâce aux mémoires cache
Il existe même des livres sur le sujet:
Effets des rayonnements ionisants dans l'électronique: des souvenirs aux imageurs
Réponses:
Vous ne pouvez pas le faire directement en Python, car vous avez besoin d'un module noyau pour le faire (et des droits root pour charger ce module).
Voir http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 pour ce qu'il faut pour invalider le cache L1 (invalider, pas désactiver).
Différentes architectures CPU (par exemple x86 vs ARM) nécessitent un code d'assemblage différent (instructions CPU) pour désactiver le cache. Je ne suis pas sûr que le noyau Linux ait la possibilité de désactiver les caches L1 / L2 / L3 / L4 et si cela avait cela, je pense qu'il serait juste utilisé en interne pendant une courte période, car le CPU est lent sans ces caches.
Voir Existe - t-il un moyen de désactiver le cache CPU (L1 / L2) sur un système Linux? pour un lien sur la façon de désactiver le cache sur un système x86 / x64 (vous devez modifier le registre
cr0
). Pour ARM, vérifiez le comportement désactivé du cache .Je ne suis pas sûr que vous compreniez complètement ce que font les caches CPU. Pouvez-vous expliquer pourquoi vous souhaitez paralyser les performances de votre système?
la source
Vous pouvez accomplir cela avec un peu de code ASM, voir le chapitre 11 du Guide de programmation du système Intel
Je ne connais pas de module Python qui implémente cela.
la source