Comment interpréter la sortie strace?

je dois profiler la performance d'une application pour laquelle j'utilise strace. Cependant, je ne sais pas vraiment comment interpréter les différents appels de système que la strace émet. En voici quelques exemples:

(A) lseek(3, 1600, SEEK_SET)                = 1600
(B) write(3, "G_DATA    300        0          "..., 800) = 800
(C) close(3)                                = 0
(D) mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b600b179000
(E) munmap(0x2b600b179000, 4096)            = 0
(F) fstat(3, {st_mode=S_IFREG|0644, st_size=1600, ...}) = 0

je vous serais reconnaissant de bien vouloir expliquer brièvement en anglais ce que ces lignes de (A) à (F) signifient réellement en termes d'E/S, de données transférées, d'importance sur la performance, etc.

j'ai traversé la man pages de strace mais je ne suis toujours pas très confiant. Si vous d'autres conseils pour moi de lire, ce serait génial.

j'ai de l'expérience sur les systèmes D'exploitation et je comprends quels sont les appels système, la mémoire, la mémoire virtuelle, la planification, etc. être.

21
demandé sur Ketan 2011-06-13 22:22:37

2 réponses

pour les comprendre, vous devez vous familiariser avec les appels système POSIX. Ils sont l'interface qu'un programme utilisateur-Espace utilise pour interagir avec le noyau.

lseek , write , close , mmap , munmap et fstat sont tous appels système et sont documentés dans la section 2 du manuel linux.

brièvement, lseek déplace le pointeur interne de la descripteur de fichier à l'octet avec position pointée par le second argument, à partir de SEEK_SET (le début), SEEK_CUR (la position actuelle) ou SEEK_END (la fin). Tout appel consécutif read et write sur le même descripteur commencera son action à partir de ce poste. Notez que lseek n'est pas implémenté pour tous les types de descripteurs - cela a du sens pour un fichier sur disque, mais pas pour une socket ou un pipe.

write copies le tampon à kernelspace et renvoie le nombre d'octets effectivement écrits. Selon le type du descripteur, le noyau peut écrire les données sur le disque ou l'envoyer à travers le réseau. Cette opération est généralement coûteuse car elle implique le transfert de ce tampon au noyau.

close ferme le descripteur fourni et toutes les ressources associées avec celui-ci dans le noyau sont libérées. Notez que chaque processus a une limite sur le nombre d'simultanément ouvrez les descripteurs, il est donc parfois nécessaire de fermer les descripteurs pour ne pas atteindre cette limite.

mmap est un appel système complexe et est utilisé à de nombreuses fins, y compris la mémoire partagée. L'utilisation générale est cependant à allouer plus de mémoire pour le processus. Les fonctions de bibliothèque malloc et calloc l'utilisent généralement en interne.

munmap libère la mémoire mmap 'ped.

fstat renvoie diverses informations que le système de fichiers conserve sur la taille d'un fichier, les dernières modifications, les permissions, etc.

20
répondu Blagovest Buyukliev 2014-02-23 17:52:06

pour chaque commande il y a une page de manuel, vous pouvez la lire en tapant man et le nom de la fonction C, par exemple man lseek (cochez également apropos ). Ils ont également une description des paramètres passés.

voici de brefs résumés:

  • lseek - reposition lecture / écriture offset de fichier du descripteur de fichier
  • write - Ecrire à un descripteur de fichier à partir du tampon
  • close - supprimer un descripteur du tableau de référence de l'objet par procédé
  • mmap - attribuer de la mémoire, ou mapper des fichiers ou des dispositifs dans la mémoire
  • munmap - supprimer une correspondance pour la plage d'adresses spécifiée
  • fstat - obtenir l'état du fichier pointé par le chemin

veuillez noter que l'interprétation de syscals simples/aléatoires ne sera pas significative en termes de performance. Pour tester la signification sur la performance de ces appels syscall, vous devez utiliser le paramètre -c qui peut compter le temps, les appels et les erreurs pour chaque appel syscall et rapporter le résumé. Ensuite, vous pouvez en savoir plus sur ces qui prennent le plus de temps.

pour en savoir plus sur les paramètres de sortie et strace , Vérifiez man strace .

voir aussi:

3
répondu kenorb 2017-05-23 11:46:28