5 votes

Pouvez-vous vérifier les performances d'un programme exécuté avec Qemu Simulator ?

Disons que si je fais tourner un simulateur ARM en utilisant Qemu, est-il possible de trouver le temps d'exécution d'un programme tel qu'il le serait sur le vrai processeur ARM. En d'autres termes, si j'utilise des fonctions telles que gettimeofday Dans un programme exécuté sur le simulateur, pour vérifier le temps écoulé, le temps écoulé sera-t-il donné avec précision grâce à la simulation précise du cycle ?

5voto

Bryan Olivier Points 4021

L'enquête menée dans notre entreprise sur cette question a conclu que Qemu (pour l'ARM) n'est pas précis au niveau du cycle. Si je me souviens bien, la précision du cycle n'est pas un objectif de Qemu, qui vise plutôt une émulation rapide. Il faut également savoir que la synchronisation exacte dépend d'éléments imprévisibles tels que les hits et les misses de la mémoire cache. Il dépend également de l'architecture choisie. Notez que l'ARM n'est qu'un jeu d'instructions IP et qu'il existe plusieurs implémentations différentes. Si, en plus, un système d'exploitation est émulé, les choses deviennent encore plus imprévisibles.

Nous utilisons le simulateur d'ARM pour évaluer les performances, mais même celui-ci n'est pas totalement précis pour les dernières versions de l'architecture ARM.

1voto

Ciro Santilli Points 3341

GEM5

J'ai vu un chercheur utiliser gem5 pour cela. Ce document évalue son degré de précision. Et j'ai créé une installation facile à démarrer sur GitHub .

Comme l'a mentionné Bryan, QEMU est conçu pour la vitesse : seul un comportement valide de l'API x86 doit être atteint, pas nécessairement avec le bon nombre de cycles ou dans le même ordre de pipeline. C'est ce qu'on appelle aussi fonctionnel émulation.

En outre, les accès à la mémoire DRAM sont supposés être immédiats, et il n'est donc pas utile d'émuler les caches non plus. Et comme nous le savons, les processeurs actuels sont essentiellement des machines qui cachent la latence de la mémoire.

Émulateurs à cycle précis d'autre part, émulent également les composants internes du processeur et sont donc beaucoup plus lents.

La racine du problème est bien sûr la sous-documentation des caractéristiques de performance des processeurs, que les fournisseurs ne divulguent pas pour éviter les fuites de propriété intellectuelle.

GEM5 semble mettre en œuvre une version générique des composants internes communs du processeur, de sorte qu'il devrait être plus précis que les émulateurs fonctionnels, mais une émulation réellement précise est probablement impossible sans connaissances d'initiés.

Les implémenteurs d'émulation tiers doivent alors procéder à une rétro-ingénierie des performances du processeur à partir d'expériences et de la documentation existante.

Parmi les principaux éléments "internes", citons le cache, le pipeline et la prédiction de branchement.

En rapport :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X