#!/usr/sbin/dtrace -CZs /* * moz_getaddbyname.d - trace what's happening during this dns lookup call, check elasped time, syscalls, cpu usage * and print out stack when going off cpu in this function * */ dtrace:::BEGIN { printf("\nGather timings, syscalls, CPU time and stack when off CPU for getaddrinfo()\n\n"); self->last = 0; } pid$target::*getaddrinfo*:entry { self->last = timestamp; } pid$target::*getaddrinfo*:return /self->last/ { trace(timestamp - self->last); self->last = 0; } syscall:::entry /self->last/ { self->start = vtimestamp; } syscall:::return /self->start/ { this->time = vtimestamp - self->start; @[probefunc] = sum(this->time); @["Total Syscalls"] = sum(this->time); self->start = 0; } sched:::on-cpu /self->last/ { self->on = timestamp; } sched:::off-cpu /self->on/ { @stack[ustack()] = count(); @["Total CPU"] = sum(timestamp - self->on); self->on = 0; } dtrace:::END { /* URI Stats */ printf("\n%-15s %10s\n", "Syscalls", "COUNT"); printa("%-15s %@10d\n", @); printf("\nStack trace when going Off CPU\n\n"); printa(@stack); }