Sponsored LinksКатегорииLinksUnix Tutorial
Personal Development Ruslan Valiev Solaris Performance Team Damien Farnham Fintan Ryan Nicky Veitch Niall Mullen Sean McGrath DTrace Bryan Cantrill Brendan Gregg ZFS Tim Foster General Ben Rockwood Learning Solaris 10 Privacy policy |
Thursday, 25 November. 2004Пробы в DTrace
Раз уж начал потихоньку рассказывать про DTrace, попробую самого простого не упускать тоже.
DTrace позволяет отлаживать любые процессы в Solaris 10, посредством проб. В ядро системы встроены модули, которые называются провайдеры - и каждый из них позволяет отлаживать какую-то область операционной системы. Скажем, есть провайдер syscall, который позволяет отслеживать системные вызовы. Есть провайдеры sysinfo или vminfo, о функциональности которых можно догадаться из названия... И так далее. Так вот, каждый провайдер предоставляет DTrace список проб - тех точек перехвата, где провайдер может отдать DTrace какую-то статистику. Скажем, для syscall пробами будут все системные вызовы, которые можно отслеживать с его помощью - read, write, wait, exec - вернее даже, те точки их выполнения, которые данный провайдер позволить отследить. Обычно это момент входа в системный вызов (entry) и возврата после его выполнения (return). Чтобы просмотреть список всех провайдеров и всех проб, доступных DTrace, следует использовать такую команду: dtrace -l CODE: ID PROVIDER MODULE FUNCTION NAME 1 dtrace BEGIN 2 dtrace END 3 dtrace ERROR 4 syscall nosys entry 5 syscall nosys return 6 syscall rexit entry 7 syscall rexit return 8 syscall forkall entry 9 syscall forkall return 10 syscall read entry 11 syscall read return 12 syscall write entry 13 syscall write return 14 syscall open entry 15 syscall open return 16 syscall close entry 17 syscall close return 18 syscall wait entry 19 syscall wait return 20 syscall creat entry 21 syscall creat return 22 syscall link entry 23 syscall link return 24 syscall unlink entry 25 syscall unlink return 26 syscall exec entry 27 syscall exec return 28 syscall chdir entry ... Весь список здесь приводить не стану - он просто огромен - у меня он занимает 36654 строки. Есть ещё один очень полезный вариант команды, который позволяет найти конкретный системный вызов с целью выяснения, каким провайдером он предоставляется: dtrace -l -f read CODE: bash-2.05b# dtrace -l -f read ID PROVIDER MODULE FUNCTION NAME 10 syscall read entry 11 syscall read return 3268 sysinfo genunix read readch 3272 sysinfo genunix read sysread 7043 fbt genunix read entry 7044 fbt genunix read return Из результата выполнения команды сразу же видно, что несколько провайдеров предоставляют возможность перехватывать их функции с именем read. Причём, если бы мы сделали dtrace -l | grep read, то было бы гораздо больше результатов, потому что есть очень много функций, в названии которых включается это слово. Defined tags for this entry: dtrace |





Процесс написания скрипта на языке DTrace - D - очень прост. После того, как вы выяснили, за чем вы хотели бы проследить в системе, нужно просто указать эти критерии в виде простейших фильтров проб, и подсказать, что делать DTrace, когда в процессе отладк
Tracked: Nov 26, 17:40
При исследовании пользовательских процессов, часто нас интересует какой-то конкретный процесс. Поэтому мы используем переменную $target (я о
Tracked: Feb 27, 15:26