Comment interpréter strace de sortie?
J'ai besoin pour le profil de la performance d'une application pour lequel je suis à l'aide de strace. Cependant, je ne sais pas vraiment comment interpréter les différents appels au système de la strace émet. Exemples de quelques-uns d'entre eux sont ci-dessous:
(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 si quelqu'un pouvait expliquer brièvement en anglais de ce que ces lignes de (A) à (F) signifie vraiment en termes d'I/O, les données transférées, de l'importance sur les performances etc.
Je suis allé à travers les pages de manuel de strace, mais je suis encore pas très confiante. Si vous d'autres conseils pour moi de lire, ce serait génial.
J'ai un peu de fond sur les Systèmes d'Exploitation et de comprendre ce que les appels-système, de la mémoire, de la mémoire virtuelle, la programmation, etc. sont.
- strace est plus de l'outil de débogage qu'un profiler. Êtes-vous vraiment à la recherche de quelque chose comme gprof?
- Je suis d'accord. Puisque "strace" ne vous montrer les appels système, le meilleur que vous pouvez faire est de voir un grand écart de temps entre les appels système et essayer de comprendre ce que le programme a été fait entre ces appels qui a pris si longtemps. Ce n'est pas une bonne façon de profil. Au lieu de cela, utilisez 'callgrind" (partie de la "valgrind') et analzye les résultats avec "kcachegrind'. Ou utiliser gprof, sysprof, oprofile, ou similaire.
- Vous devriez lire la page de manuel du système d'appels préformé ici. exécuter
man lseek
,man open
,man mmap
et ainsi de suite.
Vous devez vous connecter pour publier un commentaire.
Afin de comprendre ces, vous devez familiariser avec les normes POSIX, les appels système. Ils sont l'interface utilisateur, le programme de l'espace pour interagir avec le noyau.
lseek
,write
,close
,mmap
,munmap
etfstat
sont tous les appels système et sont décrites dans la section 2 de l'linux manuel.Brièvement,
lseek
déplace le pointeur interne de la descripteur de fichier de l'octet avec la position pointée par le deuxième argument, à partir deSEEK_SET
(le début),SEEK_CUR
(position actuelle) ouSEEK_END
(la fin). Toute période consécutive deread
etwrite
appels sur le même descripteur de départ de leur action à partir de cette position. Notez quelseek
n'est pas mis en œuvre pour tous les types de descripteurs - il un sens pour un fichier sur le disque, mais pas pour un cigare ou d'une pipe.write
copies le tampon de 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. C'est généralement cher, parce qu'il implique le transfert de cette mémoire tampon du noyau.close
ferme la fourni les descripteurs et les ressources associés avec elle dans le noyau sont libérés. Notez que chaque processus a une limite sur le nombre de descripteurs ouverts, de sorte qu'il est parfois nécessaire de fermer les descripteurs de ne pas atteindre cette limite.mmap
est un système complexe d'appel 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. Lemalloc
etcalloc
des fonctions de la bibliothèque généralement à un usage interne.munmap
libère lammap
'ped mémoire.fstat
renvoie des informations diverses que le système de fichiers se conserve environ une taille de fichier, de dernière modification, autorisations, etc.man 2 write
ouman 2 mmap
.-r
option pourstrace
Pour chaque commande il y a une page de manuel, vous pouvez le lire en tapant
man
et le nom de la fonction C, par exempleman lseek
(vérifiez égalementapropos
). Ils ont aussi description des paramètres passés.Voici de courts résumés:
lseek
- repositionner de lecture/écriture de l'offset du fichier de descripteur de fichierwrite
- écrire à un descripteur de fichier de la mémoire tamponclose
- supprimer un descripteur de la par processus objet de la table de référencemmap
- allouer de la mémoire, ou de la carte des fichiers ou des périphériques dans la mémoiremunmap
- supprimer un mappage de l'adresse spécifiée gammefstat
- obtenir l'état du fichier pointé par le cheminVeuillez noter que l'interprétation unique/aléatoire syscals ne seront pas significatifs en termes de performances. Pour tester l'importance sur les performances de ces appels, vous devez utiliser
-c
paramètre qui peut compter le temps, des appels, et des erreurs pour chaque syscall rapport et le résumé. Ensuite, vous pouvez en savoir plus sur ces qui prennent le plus de temps.Pour en savoir plus à propos de la sortie et
strace
paramètres, vérifiezhomme strace
.Voir aussi: Comment analyser strace dans le shell en texte brut?