Calvin2+DICE: génération de traces au vol pour la simulation
de microarchitecture
Participants : Thierry Lafage,
André Seznec.
Mots clés : collecte de traces de
programmes, simulation de micro-architecture. .
Contact : André Seznec
Statut : Déposé à l'APP. sous le numéro
IDDN.FR.001.470030.00.S.C.2000.000.10600 disponible sur
demande.
Le système calvin2+DICE est
composé d'une boîte à outils qui permet de générer une trace
d'exécution de manière efficace et donne la possibilité
d'effectuer des simulations « au vol ».
L'efficacité obtenue en utilisant cette boîte à outils repose
sur un mode « avance rapide » de l'exécution des
programmes cibles et sur la possibilité de passer
dynamiquement en « mode émulé » pour effectuer des
simulations.
Le mode « avance rapide » est obtenu grâce à une
instrumentation légère du code cible pour uniquement exécuter
le programme, sans collecter de trace ou effectuer de
simulation. Ce mode doit ralentir le moins possible
l'exécution car nous n'extrayons aucune information. L'outil
d'instrumentation calvin2 est
utilisé pour générer le code instrumenté.
D'autre part, un émulateur de jeu d'instructions
complètement intégré au programme cible (DICE) dirige un
mode émulé qui permet de générer
de la trace ou d'effectuer des simulations « au
vol ». L'émulateur est enfoui dans les programmes cibles
de manière à avoir un accès direct à leur état et pour
diriger leur exécution. Ici, l'accent est mis sur la
flexibilité quant à la collecte de la trace : on peut
changer de simulateur sans avoir à modifier l'émulateur ou à
développer une autre infrastructure. Aussi, grâce à DICE,
nous avons accès à toute l'activité utilisateur des
programmes : bibliothèques partagées à chargement
dynamique, code auto-modifiant, code auto-compilé.
Pendant l'exécution des programmes cibles, des changements
de mode ont lieu : quand une portion de code
intéressante à tracer est atteinte (en mode rapide) le mode
émulé est activé et la trace est générée (ou la simulation
effectuée). Le cas échéant, on passe ensuite à nouveau en
mode rapide pour se positionner sur une autre portion de code
intéressante à tracer.
Figure 2: Fonctionnement d'un
programme cible traité par le système calvin2+DICE.
|
|
La figure 2 illustre et
récapitule le fonctionnement d'un programme cible instrumenté
par calvin2 et contenant
DICE : le code instrumenté, DICE et le code de
traitement de la trace font partie du même fichier exécutable
et partagent le même espace d'adressage. Là, l'exécution
commence en mode rapide : le code instrumenté est
exécuté directement. Ensuite, un événement de basculement a
lieu et l'exécution du code d'instrumentation (en pointillés)
qui suit donne le contrÔle à l'émulateur embarqué. Quelques
instructions sont émulées, tracées et éventuellement
utilisées pour une simulation, puis le contrÔle retourne au
mode rapide. L'apparition d'autres événements de basculement
déclenche d'autres basculements en mode émulé et permet de
simuler d'autres portions de code.
Sur les programmes de la suite SPEC95, le système
calvin2+DICE introduit un facteur de ralentissement
moyen de seulement 1,38 en mode rapide.
Pour plus d'informations sur le système calvin2+DICE, se
référer à
http://www.irisa.fr/caps/projects/calvin2DICE/index.htm
ou contacter André Seznec