2010-06-10 7 views
4

Je suis en train d'optimiser le temps de démarrage de linux sur un appareil embarqué (non PC)Timing l'optimisation du démarrage du temps du noyau Linux

Actuellement au profil de la séquence de démarrage,
Je permis le informations de chronométrage sur journaux d'impression.

Est-ce la manière la plus optimale?
Si non, comment puis-je profiler la séquence de démarrage (avec minutage) avec un minimum de temps système?

PS:
J'ai un terminal (de l'appareil) sur une connexion série &
J'utilise TeraTerm sur Windows XP pour y accéder.

Répondre

1

Son depuis longtemps, mais la mise à jour la réponse ici pour référence.

Voici ce que je finalement fini par faire:

  1. Activés horodateurs sur mon client terminal série sur PC (TeraTerm).

    Activer la capture du journal dans un fichier sur le disque &
    option sélectionnée pour ajouter un horodatage à chaque ligne.

  2. Ajouté printk() instructions dans le noyau.

    • 1er au début du bloc que j'essayais de profiler.
    • 2ème à la fin du bloc que j'essayais de profiler.

Bien qu'il y ait un léger décalage entre le moment où un événement se produit sur l'appareil et lorsque les journaux sont reçus sur le PC hôte via série, cela est assez constante sur une configuration matérielle donnée. Par conséquent, la différence entre deux horodatages est précise par rapport à la différence de temps réelle entre les événements sur le périphérique qui a généré ces journaux. Les frais généraux/effets secondaires de 2 printk sont également minimes.


MISE À JOUR: 2 ans sur toute la ligne, et des centaines d'heures de-débogage du noyau plus tard, je vous recommande d'utiliser function tracers. Cela implique un peu d'effort pour apprendre.Comme bien expliqué here, il faut:

  • Activer CONFIG_FUNCTION_TRACER dans le .config
  • Utilisation trace_printk() au lieu de printk()
  • journaux de sortie Vérifier par cat /sys/kernel/debug/tracing/trace
2

Le surcoût des informations de timing printk est très faible. Cependant, cette information n'est pas toujours utile, car elle ne vous dit pas ce qui se passe dans l'espace utilisateur.

Vous pouvez essayer le Bootchart. C'est un script shell qui s'exécute en arrière-plan pendant le démarrage et qui collecte les données à partir de/proc. Bien que son temps de traitement soit plus long que celui de printk, il est plus détaillé et vous permet de profiler le démarrage du processus et l'utilisation du disque.

http://www.bootchart.org/

+0

@ Krzysztof J'ai essayé Bootchartd. Mais, cela me donne juste la synchronisation du début des processus etc. Comment est-ce que je chronomètre une "partie du code" spécifique ... D'autres outils que vous connaissez ?? ... – TheCodeArtist

+0

Vous pouvez essayer le profilage de la façon habituelle: compile avec -pg, puis utilise gprof sur la sortie. Cependant, les frais généraux sont assez importants. –

Questions connexes