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 |
Tuesday, 7 December. 2004Встроенные переменные DTrace
В DTrace есть довольно много очень полезных встроенных переменных.
Полный их список приведён здесь, а пока я расскажу лишь про несколько из них. В этой заметке мы рассмотрим простейшие переменные, а в последующих записях постепенно научимся использовать и более сложные. Позволю себе разбить переменные на несколько групп. Помимо имени переменной, я также приведу её тип. Итак: 1) Имена файлов и каталогов string cwd - имя текущего каталога того процесса, которому принадлежит текущий thread string execname - символьное имя, которое было передано функции exec(2) для исполнения текущего процесса. 2) Процессы id_t tid - номер текущего thread'а. Для thread'ов пользовательских процессов, это значение будет равно результату вызова pthread_self(3C). pid_t pid - идентификатор процесса (PID) текущего процесса pid_t ppid - parent PID текущего процесса uid_t uid - пользовательский ID текущего процесса gid_t gid - идентификатор группы (group ID) текущего процесса 3) Пробы uint_t id - ID номер текущей пробы. Это тот самый номерок, что видно в таблице доступны проб при вызове команды dtrace -l string probefunc - имя функции согласно описанию текущей пробы string probemod - имя модуля согласно описанию текущей пробы string probename - имя пробы согласно описанию текущей пробы string probeprov - имя провайдера согласно описанию текущей пробы 4) Прочее int errno - код ошибки, возвращённый последним системным вызовом, выполненным текущим thread'ом uint64_t timestamp - текущее время счётчика наносекунд. Данный счётчик не привязан к текущему времени в системе, и потому должен использоваться только для относительных вычислений. Использовать эти переменные можно как угодно - один из простейших вариантов применения приведён ниже. Я привожу полный текст скрипта, поэтому если вы его сохраните под именем script.d и сделаете этому файлу chmod u+x ./script.d, то его можно будет запускать прямо из командной строки. Пока не обращайте внимания на строку с pragma D option, про несколько полезных опций DTrace я расскажу через несколько дней. ВНИМАНИЕ: в целях компактного размещения кода, я разбил длинные строки с printf на несколько строк. Если вы хотите запустить данный скрипт, вам следует склеить такие строки. CODE: #!/usr/sbin/dtrace -s #pragma D option quiet :::write:entry { printf("\nProcess info:\ntid=%d, pid=%d, ppid=%d, uid=%d, gid=%d\n", tid, pid, ppid, uid, gid); printf("CWD=%s, execname=%s\n", cwd, execname); printf("Probe info:\nid=%d, probeprov=%s, probemod=%s, probefunc=%s, probename=%s\n", id, probeprov, probemod, probefunc, probename); } Запущенный на вашей машине, данный скрипт выдаст вам примерно следующее (будет ОЧЕНЬ много строк, так как мы ловим, согласно шаблону, все обращения к вызову write): CODE: Process info:
tid=1, pid=22157, ppid=21995, uid=123, gid=10 CWD=/export/greys/./dtrace, execname=dtrace Probe info: id=6295, probeprov=fbt, probemod=genunix, probefunc=write, probename=entry Process info: tid=1, pid=21993, ppid=21450, uid=123, gid=10 CWD=/home/gr128638, execname=rxvt Probe info: id=12, probeprov=syscall, probemod=, probefunc=write, probename=entry Defined tags for this entry: dtrace Обратные ссылки
URI этой записи для создания обратных ссылок (trackback)
Нет обратных ссылок
|




