Comment désactiver les caches L1 et L2 du processeur?

10

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

Ligne directrice pour les essais de rayonnement au sol des microprocesseurs dans l'environnement de rayonnement spatial

Il existe même des livres sur le sujet:

Effets des rayonnements ionisants dans l'électronique: des souvenirs aux imageurs

AustinTronics
la source
Si vous essayez de faire des choses comme désactiver le cache, vous faites de la programmation intégrée, si vous faites de la programmation intégrée, vous devriez probablement utiliser un langage intégré (C), et je n'utiliserais pas de système d'exploitation. En outre, la désactivation du cache va considérablement ralentir votre système.
Sam
J'ai d'autres moyens d'accélérer mon système sans cache, mais je ne peux pas dire à quel point ces méthodes sont efficaces tant que je n'ai pas désactivé le cache et exécuté des tests de performance. Je suis très conscient que le C ou l'assemblage est le choix préféré pour les applications embarquées. Cependant, il se passe plusieurs choses de haut niveau qui ont plus de sens à faire en Python. Ce serait juste plus pratique si Python avait un support pour faire quelque chose comme désactiver le cache pour mon application particulière. Quant au décapage de l'OS, le bare-metal n'est malheureusement pas une option pour moi.
AustinTronics

Réponses:

2

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?

tehnicaorg
la source
L'application est une informatique embarquée hautes performances pour l'aérospatiale. La disponibilité est plus importante pour mon application que les performances. Je sais que cela semble étrange, mais le phénomène est bien documenté.
AustinTronics
Comment pouvez-vous avoir une application "hautes performances" sans cache CPU? Qu'est-ce que les caches ont à voir avec la disponibilité?
tehnicaorg
2
Je suis développeur de logiciels en R&D, nous faisons beaucoup de choses folles. Désolé s'il semble que je laisse des informations ou que je reste vague dans mes réponses, mais je ne peux pas entrer dans la mesure où je le souhaiterais car il s'agit d'informations de propriété. Si vous souhaitez savoir ce que le cache a à voir avec la disponibilité dans les applications aérospatiales, voici un article JPL accessible au public . Voici également un article de journal .
AustinTronics
1
Ironiquement, la désactivation du cache L1 est logique, aujourd'hui!
Anneau Ø
4

Vous pouvez accomplir cela avec un peu de code ASM, voir le chapitre 11 du Guide de programmation du système Intel

11.5.3 Empêcher la mise en cache

Pour désactiver les caches L1, L2 et L3 après qu'ils ont été activés et ont reçu des remplissages de cache, procédez comme suit: 1. Entrez dans le mode de cache sans remplissage. (Définissez l'indicateur CD dans le registre de contrôle CR0 sur 1 et l'indicateur NW sur 0. 2. Videz tous les caches à l'aide de l'instruction WBINVD. 3. Désactivez les MTRR et définissez le type de mémoire par défaut sur non mis en cache ou définissez tous les MTRR pour le type de mémoire non mis en cache. (voir la discussion de la discussion du champ TYPE et du drapeau E dans la Section 11.11.2.1, «IA32_MTRR_DEF_TYPE MSR»).

Je ne connais pas de module Python qui implémente cela.

Gaius
la source