Брендан Грег (Brendan Gregg), один из разработчиков DTrace, переключился на развитие средств анализа производительности в Linux и подготовлил новый набор утилит perf-tools, основанный на применении подсистем ядра Linux perf_events и ftrace. Утилиты отличаются минимальным числом зависимостей, простотой использования и дополнительными возможностями изучения параметров производительности и отзывчивости.
Например, утилита iosnoop позволяет проанализировать дисковый ввод/вывод с приведением дополнительной информации о возникающих задержках (latency):
# ./iosnoop Tracing block I/O... Ctrl-C to end. COMM PID TYPE DEV BLOCK BYTES LATms supervise 1809 W 202,1 17039968 4096 1.32 supervise 1809 W 202,1 17039976 4096 1.30 tar 14794 RM 202,1 8457608 4096 7.53 tar 14794 RM 202,1 8470336 4096 14.90 tar 14794 RM 202,1 8470368 4096 0.27 tar 14794 RM 202,1 8470784 4096 7.74 tar 14794 RM 202,1 8470360 4096 0.25 tar 14794 RM 202,1 8469968 4096 0.24 tar 14794 RM 202,1 8470240 4096 0.24
Утилиты funccount, funcslower, funcgraph и functrace позволяют изучить обращение к системным вызовам, соответствующим определённой маске:
# ./funccount 'ip*' Tracing "ip*"... Ctrl-C to end. FUNC COUNT ip_mc_sf_allow 70 ipv6_chk_mcast_addr 72 ip_finish_output 108 ip_local_out 108 ip_output 108 ip_queue_xmit 108 ipv4_mtu 216 ip_local_deliver 229 ip_local_deliver_finish 229 ip_rcv 229 ip_rcv_finish 229 ipv4_dst_check 513
Для построения гистограммы, отражающей параметры отзывчивости, может использоваться утилита iolatency.
# ./iolatency Tracing block I/O. Output every 1 seconds. Ctrl-C to end. =(ms) .. 1 : 4381 1 - 2 : 9 |# 2 - 4 : 5 |# 4 - 8 : 0 | 8 - 16 : 1 |#
Утилиты execsnoop, killsnoop и opensnoop позволяют проанализировать детали обращения к вызовам exec(), kill() и open():
# ./execsnoop Tracing exec()s. Ctrl-C to end. PID PPID ARGS 22898 22004 man ls 22905 22898 preconv -e UTF-8 22908 22898 pager -s 22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8 22906 22898 tbl 22911 22910 locale charmap 22912 22907 groff -mtty-char -Tutf8 -mandoc -rLL=164n -rLT=164n 22913 22912 troff -mtty-char -mandoc -rLL=164n -rLT=164n -Tutf8 22914 22912 grotty
Утилита cachestat выдаёт статистику попаданий в файловый кэш:
# ./cachestat -t Counting cache functions... Output every 1 seconds. TIME HITS MISSES DIRTIES RATIO BUFFERS_MB CACHE_MB 08:28:57 415 0 0 100.0% 1 191 08:28:58 411 0 0 100.0% 1 191 08:28:59 362 97 0 78.9% 0 8 08:29:00 411 0 0 100.0% 0 9
Утилита kprobe позволяет отследить аргументы обращения к системным вызовам:
# ./kprobe p:do_sys_open Tracing kprobe do_sys_open. Ctrl-C to end. kprobe-26042 [001] d... 6910441.001452: do_sys_open: (do_sys_open+0x0/0x220) kprobe-26042 [001] d... 6910441.001475: do_sys_open: (do_sys_open+0x0/0x220)