DTrace: Проверочная работа для вашего        кода              Филипп Торчинский         philip.torchinsky@semonix.ruYande...
Зачем это надо?• Производительность• Безошибочность                           2
Задачи• инструментирование• профилирование• отладка                       3
Решениебез DTrace              c DTrace - динамически!main () {               #!/usr/sbin/dtrace...                     pi...
DTrace в спокойствии             точки  Функция    инструментирования                              5
DTrace в работе       # dtrace -n syscall:::entry {trace(probefunc);}                               DTrace  Функция       ...
DTrace в разных ОС• Solaris• illumos-based OS (SmartOS,  OpenIndiana)• FreeBSD• Mac OS X• QNX                             ...
Демо-система сегодня  Windows    VirtualBox                 SmartOS (guest)      SmartOS       (host)                 Smar...
Синтаксис языка Dprovider:module:function:probe/predicate/{   actions;}syscall:::entry/execname=="mysqld"/{   @counts[prob...
Примеры датчиков• syscall syscall::read:entry• proc proc:::exec-success• sysinfo sysinfo:::readch• io io:::start• profile ...
Измерение времени выполненияsyscall::write:entry{self->ts = timestamp;}syscall::write:return/self->ts/{@time[execname] = a...
Сбор статистикиsyscall::write:entry{self->ts = timestamp;}syscall::write:return/self->ts/{@time[execname]=quantize(timesta...
Трассировка вызовов#!/usr/sbin/dtrace -s#pragma D option flowindentpid$target:libc:write:entry{ self->follow = 1; }fbt:::/...
Вывод аргументовpid$target::write:entry{   printf("%s",copyinsrt(arg1));}                                   demo mysql 14
Больше полезных датчиков! • TCP dtrace -n   > tcp:::send { @[args[2]->ip_daddr] =     quantize(args[2]->ip_plength); }   >...
Датчики в Node.js• датчики:gc-start http-server-request    http-client-requestgc-done   http-server-response http-client-r...
Node.js: результат192.168.56.1: GET of /192.168.56.1: GET of /192.168.56.1: GET of /favicon.ico192.168.56.1: GET of /192.1...
SystemTap                               DTrace• изменения в ядре               • DTrace - часть ядра  небезопасны• докумен...
Где узнать больше?• dtrace.org/guide• brendangregg.com/dtrace.html• smartos.org• yandex.ru :)                             ...
Спасибо!philip.torchinsky@semonix.ru@philipto                               20
Upcoming SlideShare
Loading in...5
×

Филипп Торчинский «Анализ производительности и отладка приложений с помощью DTrace»

1,932

Published on

Научно-технический семинар «DTrace: Проверочная работа для вашего кода» в петербургском офисе Яндекса, 29 ноября 2012 г.

Филипп Торчинский, эксперт по облачным технологиям, Семоникс.

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,932
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Филипп Торчинский «Анализ производительности и отладка приложений с помощью DTrace»

  1. 1. DTrace: Проверочная работа для вашего кода Филипп Торчинский philip.torchinsky@semonix.ruYandex Tech Talk, 29 ноября 2012, Санкт-Петербург
  2. 2. Зачем это надо?• Производительность• Безошибочность 2
  3. 3. Задачи• инструментирование• профилирование• отладка 3
  4. 4. Решениебез DTrace c DTrace - динамически!main () { #!/usr/sbin/dtrace... pid$target::f1:entry{printf("%s", varstr); printf("%s",arg0);... }printf("i is %d", i); pid$target::f2:entry{... printf("%d",arg0);} } demo 4
  5. 5. DTrace в спокойствии точки Функция инструментирования 5
  6. 6. DTrace в работе # dtrace -n syscall:::entry {trace(probefunc);} DTrace Функция ECB ECB - execution control block 6
  7. 7. DTrace в разных ОС• Solaris• illumos-based OS (SmartOS, OpenIndiana)• FreeBSD• Mac OS X• QNX 7
  8. 8. Демо-система сегодня Windows VirtualBox SmartOS (guest) SmartOS (host) SmartOS (guest) 8
  9. 9. Синтаксис языка Dprovider:module:function:probe/predicate/{ actions;}syscall:::entry/execname=="mysqld"/{ @counts[probefunc]=count();} 9
  10. 10. Примеры датчиков• syscall syscall::read:entry• proc proc:::exec-success• sysinfo sysinfo:::readch• io io:::start• profile profile:::profile-1000hz• pid pid172:libc:fopen:entry• pid172:a.out:main:entry 10
  11. 11. Измерение времени выполненияsyscall::write:entry{self->ts = timestamp;}syscall::write:return/self->ts/{@time[execname] = avg(timestamp - self->ts);self->ts = 0;} 11
  12. 12. Сбор статистикиsyscall::write:entry{self->ts = timestamp;}syscall::write:return/self->ts/{@time[execname]=quantize(timestamp - self->ts);self->ts = 0;} demo 12
  13. 13. Трассировка вызовов#!/usr/sbin/dtrace -s#pragma D option flowindentpid$target:libc:write:entry{ self->follow = 1; }fbt:::/self->follow/{}pid$target:libc:write:return/self->follow/{ self->follow = 0; exit(0); } demo 13
  14. 14. Вывод аргументовpid$target::write:entry{ printf("%s",copyinsrt(arg1));} demo mysql 14
  15. 15. Больше полезных датчиков! • TCP dtrace -n > tcp:::send { @[args[2]->ip_daddr] = quantize(args[2]->ip_plength); } > tcp:::send { @[execname] = quantize(args[2]->ip_plength); }https://wikis.oracle.com/display/DTrace/tcp+Provider 15
  16. 16. Датчики в Node.js• датчики:gc-start http-server-request http-client-requestgc-done http-server-response http-client-responsenet-socket-read net-socket-writenet-server-connection net-stream-end ПРИМЕР# dtrace -L /var/lib/dtrace -nnode*:::http-server-request{ printf ("%s: %s of %sn",args[1]->remoteAddress, args[0]->method,args[0]->url)} -q demo nodejs 16
  17. 17. Node.js: результат192.168.56.1: GET of /192.168.56.1: GET of /192.168.56.1: GET of /favicon.ico192.168.56.1: GET of /192.168.56.1: GET of /favicon.ico192.168.56.1: GET of / 17
  18. 18. SystemTap DTrace• изменения в ядре • DTrace - часть ядра небезопасны• документация на • много подробной wiki не всегда точна документации• стабильность • все везде одинаково зависит от дистрибутива• компиляция в • компиляция в байт- модуль ядра код proof: http://dtrace.org/blogs/brendan/2011/10/15/using-systemtap/ 18
  19. 19. Где узнать больше?• dtrace.org/guide• brendangregg.com/dtrace.html• smartos.org• yandex.ru :) 19
  20. 20. Спасибо!philip.torchinsky@semonix.ru@philipto 20
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×