Question

Dans notre système intégré (utilisant un processeur PowerPC), nous souhaitons désactiver le cache du processeur. Quelles mesures devons-nous prendre?

Pour clarifier un peu, l’application en question doit avoir une vitesse d’exécution aussi constante que possible. La variabilité dans l'exécution du même chemin de code n'est pas acceptable. C’est la raison pour laquelle vous souhaitez désactiver le cache.

Était-ce utile?

La solution

Je suis un peu en retard pour la question, et cela fait longtemps que je n’ai pas fait tout le code d’initialisation du processeur de bas niveau sur les PPC, mais il me semble me souvenir du cache & amp; La MMU étant assez étroitement couplée (une doit être activée pour permettre à l'autre) et je pense dans les tables de pages MMU, vous pouvez définir l'attribut pouvant être mis en cache.

Donc, voici ce que je veux dire: s'il existe un certain sous-ensemble de code qui doit s'exécuter en un temps déterministe, vous pouvez peut-être localiser ce code (via un fichier de commande de l'éditeur de liens) dans une région de la mémoire définie comme non cacheable dans la page les tables? De cette façon, tout le code qui peut / devrait tirer profit du cache, et le sous-ensemble (espérons-le) de code qui ne devrait pas, ne le fait pas.

Je le ferais de toute façon de toute façon, donc plus tard, si vous voulez activer la mise en cache pour une partie du système, il vous suffit de retourner quelques bits dans les tables de pages MMU, au lieu de (ré) écrire le Code init pour configurer toutes les tables de pages & amp; la mise en cache.

Autres conseils

Extrait du manuel de référence E600:
Le registre à usage spécifique HID0 contient plusieurs bits qui invalident, désactivent et verrouillent les caches d’instructions et de données.

Vous devez utiliser HID0 [DCE] = 0 pour désactiver le cache de données.
Vous devez utiliser HID0 [ICE] = 0 pour désactiver le cache d’instruction.

Notez qu’à la mise sous tension, les deux caches sont désactivés. Vous devrez écrire ceci dans le code de l'assembly.

Peut-être que vous ne voulez pas désactiver globalement le cache, vous voulez seulement le désactiver pour une plage d'adresses particulière?

Sur certains processeurs, vous pouvez configurer les entrées TLB (tampon de conversion de traduction) pour les plages d’adresses, de sorte que la mise en cache de chaque plage puisse être activée ou désactivée. De cette façon, vous pouvez désactiver la mise en cache pour les E / S mappées en mémoire, tout en maintenant la mise en cache pour le bloc principal de RAM.

Le seul PowerPC sur lequel j'ai fait cela était un PowerPC 440EP (d'IBM, puis d'AMCC). Je ne sais donc pas si tous les PowerPC fonctionnent de la même manière.

De quel type de base PPC s'agit-il? Le contrôle du cache est très différent entre les différents cœurs de différents fournisseurs ... également, désactiver le cache est généralement considéré comme une très mauvaise chose à faire à la machine. Les performances deviennent si lentes que vous le feriez aussi bien avec un vieux processeur 8 bits (en exagérant un peu). Certaines variantes ARM ont des mémoires TCM, des mémoires étroitement couplées, qui fonctionnent à la place des caches, mais je ne suis au courant d'aucune variante PPC dotée de cette fonctionnalité.

Peut-être une meilleure solution consiste-t-elle à garder les caches de niveau 1 actifs et à utiliser les caches L2 sur puce comme mémoire RAM mappée statiquement? C'est courant sur les appareils modernes PowerQUICC, au moins.

La désactivation de la mémoire cache ne vous fera aucun bien. Votre vitesse d'exécution diminuera d'un ordre de grandeur. Vous n’enverriez jamais un tel système, de sorte que ses performances dans ces conditions n’ont aucun intérêt.

Pour obtenir une vitesse d'exécution constante, envisagez l'une des approches suivantes:

1) Verrouillez tout ou partie du cache. Toutes les puces PowerPC actuelles de Freescale, IBM et AMCC offrent cette fonctionnalité.

2) S'il s'agit d'une puce Freescale avec cache L2, envisagez de mapper une partie de ce cache en tant que mémoire sur puce.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top