6
votes

Mesure de l'utilisation du processeur sur le système métallique nu de bras

Je travaille sur un Cortex M4 Board d'évaluation, c'est un Métal Bare sans aucun système d'exploitation en marche.

Maintenant, je veux mesurer CPU Utilisation d'un processus / algorithme donné, quelle serait la meilleure façon de le faire?

Devrais-je mettre en œuvre un système d'exploitation pour mesurer l'utilisation CPU qui ont la fonctionnalité pour une telle demande?


2 commentaires

Avez-vous besoin de mesurer l'utilisation de la CPU à la volée?


Pourquoi voulez-vous l'utilisation du processeur? Sur un tel contrôleur, vous voulez généralement un comportement en temps réel, c'est-à-dire que certaines tâches doivent se terminer suffisamment rapidement dans un délai donné.


3 Réponses :


4
votes

Mise en œuvre d'un système d'exploitation pour mesurer le temps de ralenti d'une CPU semble un peu surgi. De mes connaissances, le Cortex-M4 comprend une unité de débogage (DWT) qui vous permet d'instantané A compteur de cycle . Mais la chose la plus facile serait de gérer une goupille à un oscilloscope et de le bascule en entrée et à la sortie de votre algorithme.


8 commentaires

Mais qu'est-ce que prendre instantané de registre m'aider? Pour autant que je sache la seule chose que je vais obtenir, c'est le nombre de cycles depuis le début de mon processus.


Et j'utilise déjà ce comptoir de cycle pour mesurer les heures de mon processus, comment puis-je l'utiliser pour mesurer l'utilisation du processeur?


Vous obtenez le nombre de cycles que la CPU a fait depuis son début. Prendre un instantané sur l'entrée et la sortie vous permet de calculer le delta des cycles passés et obtenez donc le nombre de cycles utilisés par votre algorithme. Avez-vous une chose comme une tâche "inactive"?


Et en prenant ces cycles le multipliant par mon temps de cycle dans des nanosecondes, je vais obtenir le temps d'exécution, mais pas l'utilisation du processeur, ai-je raison?


Oui, et cela vous permet de calculer le temps d'exécution de votre algorithme et de le comparer à votre période de mesure ou du rapport entre les cycles passés jusqu'à ce que vous rentriez votre algorithme et le nombre de cycles utilisés votre algorithme.


En fait, l'utilisation du temps et du processeur est presque la même sur le matériel nu. Si vous n'incientez pas l'ingénieur théorique (je veux dire par exemple, votre programme lu à la mémoire de la mémoire, et il n'y a pas de données dans le cache, et d'autres instructions dépendent de cette lecture de la mémoire, de sorte que le bloc IP CPU Core et Wait qui fonctionne avec la mémoire pour transférer des données au cache. , Oui, il est possible de dire que nous n'avons pas utilisé CPU Core ici, mais qui se soucient de cela). Donc, vous avez besoin de faire face à des interruptions et de souscrivrer leur temps de Global Counter, et votre runtime sera presque la même chose que les dépenses de temps de la CPU.


@ user1034749 qui dépend vraiment de ce que vous faites d'autre avec la CPU. Par exemple, si vous allez en mode Power Down, seul le nombre de cycles vous donne un indice sur l'utilisation de la CPU.


Oui, je n'ai pas pensé au mode de sommeil. Mais dans le métal nu si il s'endormit, il doit l'avoir explicitement, et je pense que le sujet Starter parle de l'utilisation de la CPU de Funciton / Processus pour les purpus de l'optmization, il est plutôt étrange au milieu du calcul intensif de la CPU.



1
votes

Tout d'abord, la mise en œuvre d'un système d'exploitation ne sera pas pratique ou même possible dans le but de mesurer uniquement la performance.SO Une approche possible consiste à conserver une variable de comptage qui enregistrera le nombre de tiques survenues jusqu'à cette durée. Et incrémentez cette variable dans une interruption de la minuterie.


0 commentaires

6
votes

La question se répète presque elle-même. Quelle est votre application Bare Metal lorsqu'elle n'est pas dans ce processus / algorithme? Mesurer l'un ou l'autre ou les deux. Si vous avez une application nue en métal qui ne consomment pas complètement la CPU dans cet algorithme, vous avez déjà un système d'exploitation dans la mesure où vous gérez cette application / la fonction de fonction. Vous pouvez utiliser un certain nombre de méthodes à partir d'un comptoir simple dans une boucle par rapport à une minuterie pour voir combien de comptes par boucle lorsque l'algorithme obtient des tranches de temps vs non. Vous pouvez simplement faire du temps l'algorithme lui-même, etc.

Je suppose que lorsque vous dites CPU, vous voulez dire tout le système car votre performance dépend fortement de votre code et de ce que vous parlez. Si elle fonctionne de Flash sur un cortex-M4 en fonction de la fréquence d'horloge, vous pouvez bloquer les cycles de processeur, il suffit d'attendre des instructions ou des données (et peut très facilement obtenir la mauvaise notion de performances du processeur pour un algorithme lorsqu'il n'est pas l'algorithme de brûlure des horloges). Les caches masquent / manipulent ces performances et peuvent facilement affecter considérablement les performances si vous ne faites pas attention à ce qu'ils font. En tant que question C ++ Votre compilateur joue un rôle important dans la performance ainsi que votre code bien sûr, peut très facilement exécuter le code plusieurs fois plus rapidement ou plus lentement avec des modifications minimales à la ligne de commande ou à la ligne de commande.

Si l'algorithme fait partie d'un ISR, le processeur se rend au sommeil autrement, vous pouvez utiliser la technique GPIO PIN et Poper Techinique pour obtenir une idée du ratio de dormir en cours d'exécution.


0 commentaires