Linux Embedded

Le blog des technologies libres et embarquées

Mesure du temps d'(U-)Boot :-)

Tom Rini, le mainteneur intérimaire d’U-Boot, a annoncé sur la mailing-list que la version 2013.01 d’U-Boot était disponible.
Parmi les nouveautés, l’une à attiré notre attention: l’ajout de la commande bootstage qui permet de mesurer le temps d’exécution des différentes phases de boot.

Mise en oeuvre

Pour activer cette commande il suffit d’ajouter deux macros à la configuration de votre carte (include/configs/.h):
#define CONFIG_CMD_BOOTSTAGE
#define CONFIG_BOOTSTAGE

La première ajoute la commande bootstage, la seconde le mécanisme de mesure proprement dit.

Une fois compilé et installé, la commande bootstage est disponible avec ses trois options: report, stash et unstash.

bootstage report

Cette commande affiche le rapport du démarrage :

Timer summary in microseconds:
       Mark    Elapsed  Stage
          0          0  reset
     52,000     52,000  id=64
     56,000      4,000  id=65
     63,000      7,000  main_loop
229,395,296229,332,296  board_init_f

Accumulated time:

Cet exemple a été réalisé sous qemu pour la carte versatilepb.

Pour connaître la correspondance de id= avec l’étape, il faut se référer à include/bootstage.h dans l’enum bootstage_id.
Ici id=64 correspond au démarrage de l’ethernet et id=65 correspond à l’initialisation de l’ethernet pour charger un kernel depuis le réseau.

stash et unstash

bootstage stash [<start> [<size>]]
Cette commande stocke en mémoire le rapport. Pratique pour ensuite sauvegarder sur un support avec les commandes habituelles d’U-Boot.
bootstage unstash [<start> [<size>]]
Cette commande permets de relire le rapport depuis la mémoire.

Pour mieux comprendre essayons les commandes suivante:
bootstage stash 0x1000 0x1000
md 0x1000

La sortie est la suivante:

00001000: 00000000 00000004 00000083 b00757a3    .............W..
00001010: 0000cb20 00000000 00000000 00000000     ...............
00001020: 00000040 0000dac0 00000000 00000000    @...............
00001030: 00000000 00000041 0000f618 00000000    ....A...........
00001040: 07fea2bf 00000000 000000a2 fc177360    ............`s..
00001050: 00000000 00024bf2 00000000 0000009a    .....K..........
00001060: 363d6469 64690034 0035363d 6e69616d    id=64.id=65.main
00001070: 6f6f6c5f 6f620070 5f647261 74696e69    _loop.board_init
00001080: 0000665f 00000000 00000000 00000000    _f..............

Nous y retrouvons les noms des étapes vues précédemment.

Un outil bien pratique qui aurait aidé les participants du concours LinuxEmbedded 2011 !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *