linux - tag - DTrace sur Ubuntu, comment?



wav tag editor (1)

Je voudrais utiliser DTrace sur Ubuntu.

https://github.com/dtrace4linux/linux

Il y en a un pour Linux ci-dessus, le github.

  • Je me demande si dtrace pour linux est exactement le même avec dtrace pour les autres OS (Solaris, FreeBSD, OSX).
  • Je voudrais trouver un tutoriel pour l'utiliser (dtraceforlinux).
  • Je me demande si le tutoriel pour dtrace pour solaris ci-dessous est bon pour moi.

http://www.oracle.com/technetwork/server-storage/solaris/dtrace-tutorial-142317.html

Merci d'avance. Journeyer


En tant qu'auteur de dtrace4linux, laissez-moi répondre.

En substance, dtrace sur Linux / MacOS / FreeBSD / Solaris est le même - nous sommes tous basés sur le même code source avec les mêmes objectifs. Parce qu'il n'y a pas de mainteneur central, les codes sont effectivement des fourchettes, Solaris étant considéré comme le maître. La principale différence de code source est la colle pour chaque plate-forme.

DTrace est une combinaison d'un certain nombre de choses:

  • pilote du noyau
  • commande "dtrace" de l'espace utilisateur
  • mécanismes de fonction de sonde (par exemple, syscall, fbt)
  • langage de script

Regardez syscall traçant son assez simple:

$ dtrace -n syscall::open:
.....

Cela piège chaque appel système ouvert, peu importe qui l'a exécuté. Si vous connaissez Unix, vous savez que le syscall est approximativement:

open(char *filename, int flags, [int perms])

Donc, arg0 est la chaîne "nom de fichier". Mais c'est là que les choses diffèrent. La fonction C lib est comme ci-dessus, mais cela correspond à un appel système, qui est quelque chose comme:

open(int someflags, char *filename, int userflags, int perms)

Donc le nom de fichier n'est pas dans arg0, mais arg1. (Excuses si le ci-dessus est faux - je pense que open() est le même dans le noyau et l'espace utilisateur, mais ce n'est pas vrai, par exemple pour la famille de fonctions stat() ).

C'est ici que se posent certains des problèmes de «portabilité» de DTrace - si vous utilisez un guide Solaris pour dtracer et essayez d'exécuter certains scripts ou exemples, vous pourriez constater qu'ils ne fonctionnent pas de la même manière. En théorie, c'est une faute de Linux (my), et dtrace4linux devrait être modifié pour cacher ceci.

Tout cela s'applique aux appels système.

Maintenant, regardons fbt. Fbt est juste la fonction de traçage - n'importe quelle fonction - avec n'importe quel paramètre. Vous pouvez tracer la fonction linux qui implémente le syscall open() (appelé sys_open [éventuellement]). Si vous piègez cette fonction:

$ dtrace -n fbt::sys_open:

alors vous devez regarder le code source du noyau pour voir ce que arg0, arg1, arg2, etc est. Et presque certainement est différent de Solaris ou MacOS - son implémentation Linux.

Mais vous voudrez peut-être avoir accès à certains arguments, par exemple pour obtenir une structure de données interne du noyau (TCP, pilote de disque, pilote USB, etc.). Solaris fournit des «fournisseurs» qui sont des moyens plus sophistiqués d'accéder à des structures de données que de savoir «arg3 est un 'struct foo *'». Sans ces fournisseurs, les scripts seraient totalement dépendants d'opsys et pas de portabilité. La plupart des gens ne se soucient pas de ce à quoi ressemble une structure "tcp", mais veulent accéder à des champs clés comme pktin, pktout, rcvbytes, sndbytes.

En résumé, dtrace4linux et Solaris dtrace fournissent une couche de portabilité pour permettre l'accès à ces fonctions ou structures, mais ni dtrace4linux ni Solaris ne tentent de faire un travail complet pour fournir la portabilité sur les milliers de structures de chaque noyau.

En général, vous pouvez utiliser les scripts tutoriels de Solaris et les utiliser pour essayer de comprendre ce qui ne marche pas, mais essayer de les utiliser tels quels vous frustrera si vous ne savez pas quoi chercher.

Je considère dtrace4linux comme "pas mal" et "pas assez bon" pour cacher ces différences. (dtrace4linux est à peu près au même niveau que MacOS - si vous utilisez les tutoriels Solaris, certains peuvent ne pas fonctionner sur Mac ou FreeBSD).





dtrace