Question

J'ai hérité d'un projet intégré qui nécessite un profilage de performances simples par fonction. Il se compose d'un Coldfire (MCF5328) exécutant Uclinux (2.6.17.7-UC1).

Je ne suis pas un expert sur le Coldfire, ni Uclinux (ou Linux d'ailleurs), alors excusez mon ignorance.

Dans Windows, j'utiliserais simplement QueryPerformanceCounter Pour accéder à la minuterie à haute résolution x86. Enregistrez le comptoir avant et après et comparez la différence.

J'ai appris que Linux a un certain nombre de variations sur QueryPerformanceCounter:

  • horloge_gettime / res
  • getnstimeofday
  • ktime_x

Ou même l'accès au compteur horaire via

  • get_cycles

Aucun de ceux-ci n'est disponible sur la construction Uclinux, cet appareil est en cours d'exécution. Il semble donc que le système d'exploitation n'a pas d'accès à la minuterie haute résolution.

Cela signifie-t-il que le Coldfire lui-même ne fournit pas une telle fonctionnalité? Ou l'auteur du port Uclinux les a-t-il laissés de côté? Y a-t-il quelque chose sur le matériel que je peux utiliser et comment pourrait-il l'utiliser?

Était-ce utile?

La solution 2

J'ai fini par utiliser l'un des quatre minuteries DMA sur le feu froid. C'était une question simple d'activer la minuterie en tant que compteur de génération sans interruption et non interrupteur. Cela fournit un compteur de 12,5ns (à 80 MHz).

Autres conseils

Compte tenu de l'âge de votre noyau, vous n'avez peut-être pas de soutien aux minuteries haute résolution.

Si vous écrivez un pilote de noyau, les API sont différentes. Si get_cycles() Soucha, cela signifie probablement que votre architecture CPU ne prend pas en charge un compteur de cycle. Puisque votre noyau est très vieux, do_gettimeofday est probablement le meilleur que vous puissiez faire, à moins d'écrire un pilote pour interroger directement le matériel de la minuterie.

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