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

Dites si j’utilise un simulateur ARM utilisant Qemu, est-il possible de trouver le temps d’exécution d’un programme tel qu’il 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 indiqué précisément dans la simulation à cycle précis?

    L’enquête menée par notre société sur ce problème a permis de conclure que Qemu (pour le arm) n’était pas précis. Si je me souviens bien, la précision du cycle n’est pas un objective de Qemu, mais une émulation rapide. Veillez également à ce que le timing exact dépend d’éléments imprévisibles, tels que les réussites et les ratés de la mémoire cache. Cela dépendra également de l’architecture choisie. Notez qu’ARM est simplement 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.

    GEM5

    J’ai vu un chercheur utiliser gem5 pour cela. Cet article évalue sa précision. Et j’ai créé une configuration facile à utiliser pour commencer sur GitHub .

    Comme Bryan l’a mentionné, QEMU est conçu pour la rapidité: seul un comportement d’API x86 valide doit être atteint, pas nécessairement avec le bon nombre de cycles ou dans le même ordre de pipeline. Ceci est également appelé émulation fonctionnelle .

    De plus, les access à la mémoire DRAM étant supposés être immédiats, l’émulation des caches n’a donc aucun sens. Et comme nous le soaps, les processeurs actuels sont essentiellement des machines masquant la latence de la mémoire.

    Les émulateurs de cycle précis , d’autre part, émulent également les composants internes du processeur et sont donc beaucoup plus lents.

    La source du problème réside bien sûr dans les fonctionnalités de performances des processeurs sous-documentées, que les fournisseurs ne publient pas pour éviter les fuites de propriété intellectuelle.

    GEM5 semble implémenter une version générique des composants internes courants de la CPU, il devrait donc être plus précis en termes de cycles que les émulateurs fonctionnels, mais une émulation en termes de cycles réels est probablement impossible sans une connaissance interne.

    Les implémenteurs d’émulation tiers doivent ensuite procéder au reverse engineering de la performance du processeur à partir d’expériences et de la documentation existante.

    Certaines des “composantes internes” clés sont la prédiction de cache, de pipeline et de twig.

    En relation:

    • Question qui demande comment des émulateurs de cycle précis sont possibles: Comment des simulateurs CAS comme PTLsim peuvent-ils réaliser une simulation de cycle précise du matériel x86?
    • ARM Cycle-Accurate Simulator