Я планирую провести некоторое тестирование производительности сети (чтобы узнать, сколько времени уходит на каждый файл), но это может быть полезно для любого приложения.
Я точно знаю существование и как использовать различные приложения производительности, поэтому меня интересует только решение для strace.
По сути, я хотел бы рассчитать разницу во времени выполнения отфильтрованных системных вызовов, а затем сгруппировать их, отсортировать и произвести сводку (аналогично опции -C).
Некоторые примеры использования:
$ strace -ttt -s1500 -o/dev/stdout -e trace=open,access sleep 1 | awk '{print $1 " " $2}'
$ strace -ttt -s1500 -s/dev/stdout -e trace=access drush ev '' | awk '{print $1 " " $2}'
(some example output)
1344416787.291395 execve("/bin/sleep",
1344416787.291796 brk(0)
1344416787.291879 access("/etc/ld.so.nohwcap",
1344416787.291960 mmap(NULL,
1344416787.292026 access("/etc/ld.so.preload",
1344416787.292089 open("/etc/ld.so.cache",
...
1344416787.294428 nanosleep({1,
1344416788.294726 close(1)
1344416788.294814 close(2)
1344416788.294906 exit_group(0)
Затем из приведенного выше вывода я хотел бы рассчитать разницу во времени между последними напечатанными вызовами (в человеческом формате):
Pseudo code:
echo "1344416788.294906 1344416788.294814" | awk '{print $2 - $1}'
0.00101089
Подсказка: в strace вы можете использовать другой формат, например -t, -tt или -ttt (вы можете использовать любой, который легче анализировать).
Затем сгенерируйте список следующим образом (используя, например, sort, uniq и т.д. Без заголовков):
seconds syscall
------ -----------
0.001580 close(2)
0.000132 close(1)
0.000032 exit_group(0)
0.000022 access("/etc/ld.so.preload",
0.000012 access("/etc/ld.so.cache",
Не группируйте его только по имени системного вызова, но по всей фразе ($ 2).
Это должно быть как можно проще. Если есть какие-то строки, я бы хотел это увидеть. Благодарю.
PS Если вы считаете, что это бессмысленно для вас, пожалуйста, игнорируйте это.
-
Связанные темы (которые могут быть полезны для некоторых идей):
Как извлечь два числа из двух строк и рассчитать разницу в Bash?
http://www.unix.com/shell-programming-scripting/121053-sum-value-selected-lines-script-awk-perl.html
http://unstableme.blogspot.ch/2009/12/sum-numbers-in-each-row-awk.html
http://www.unix.com/shell-programming-scripting/157047-awk-compare-previous-value-current.html