Sortie de strace -Tttt -e trace=file
est trace (outil de traçage), et perf est généralement utilisé comme outil de profilage (agrégation du temps passé dans une fonction par nom - en perf record
par défaut sur le temps ou sur les événements matériels + perf report
, perf top
) ou comme outil de statistiques (dans les modes perf stat
mode - avec comptage de certains événements sur toute la durée du programme).
Vous devriez essayer un outil de traçage ( trace-cmd
, sysdig
, lttng , ...) ou vous pouvez essayer d'utiliser perf
dans les modes de traçage ( perf record
avec des tracepoints et perf script
pour produire un journal non agrégé dans le temps)
Il existe des tracepoints pour les appels système ( syscalls 614
) : http://www.brendangregg.com/perf.html#Tracepoints http://www.brendangregg.com/perf.html#StaticKernelTracing
perf record -e 'syscalls:sys_*' ./program
perf script
Exemple de sortie au format : nom du processus, pid, [cpu_core], time_since_boot_seconds.microseconds :, tracepoint_name, tracepoint_arguments
ls 19178 [001] 16529.466566: syscalls:sys_enter_open: filename: 0x7f6ae4c38f82, flags: 0x00080000, mode: 0x
ls 19178 [001] 16529.466570: syscalls:sys_exit_open: 0x4
ls 19178 [001] 16529.466570: syscalls:sys_enter_newfstat: fd: 0x00000004, statbuf: 0x7ffe22df92f0
ls 19178 [001] 16529.466572: syscalls:sys_exit_newfstat: 0x0
ls 19178 [001] 16529.466573: syscalls:sys_enter_mmap: addr: 0x00000000, len: 0x00042e6f, prot: 0x00000001,
ls 19178 [001] 16529.466767: syscalls:sys_exit_mmap: 0x7f6ae4df8000
ls 19178 [001] 16529.466768: syscalls:sys_enter_close: fd: 0x00000004
ls 19178 [001] 16529.466769: syscalls:sys_exit_close: 0x0
Vous pouvez également essayer perf record -g -e 'syscalls:sys_*'
pour enregistrer le backtrace de la fonction (pour obtenir des informations sur la fonction de l'application qui a fait l'appel système, et qui a appelé cette fonction ; fonctionne mieux avec les informations de débogage).
perf en tant qu'outil de traçage ne peut pas décoder les arguments de syscall (tracepoint) ; et les outils de traçage comme trace-cmd ou lttng peuvent mieux les décoder (au moins décoder le nom de fichier dans syscall ouvert).