DTrace language preview
1. Tracing read latency
a shebang, a pragma, probe descriptions, and an aggregation
horizon-dark
#!/usr/sbin/dtrace -s
/* trace slow reads */
#pragma D option quiet
syscall::read:entry
{
self->start = timestamp;
}
syscall::read:return
/self->start/
{
@counts[execname] = count();
printf("%s took %d ns\n", execname, timestamp - self->start);
self->start = 0;
}
atom-one-dark
#!/usr/sbin/dtrace -s
/* trace slow reads */
#pragma D option quiet
syscall::read:entry
{
self->start = timestamp;
}
syscall::read:return
/self->start/
{
@counts[execname] = count();
printf("%s took %d ns\n", execname, timestamp - self->start);
self->start = 0;
}
github-dark
#!/usr/sbin/dtrace -s
/* trace slow reads */
#pragma D option quiet
syscall::read:entry
{
self->start = timestamp;
}
syscall::read:return
/self->start/
{
@counts[execname] = count();
printf("%s took %d ns\n", execname, timestamp - self->start);
self->start = 0;
}
dracula
#!/usr/sbin/dtrace -s
/* trace slow reads */
#pragma D option quiet
syscall::read:entry
{
self->start = timestamp;
}
syscall::read:return
/self->start/
{
@counts[execname] = count();
printf("%s took %d ns\n", execname, timestamp - self->start);
self->start = 0;
}
nord
#!/usr/sbin/dtrace -s
/* trace slow reads */
#pragma D option quiet
syscall::read:entry
{
self->start = timestamp;
}
syscall::read:return
/self->start/
{
@counts[execname] = count();
printf("%s took %d ns\n", execname, timestamp - self->start);
self->start = 0;
}
github
#!/usr/sbin/dtrace -s
/* trace slow reads */
#pragma D option quiet
syscall::read:entry
{
self->start = timestamp;
}
syscall::read:return
/self->start/
{
@counts[execname] = count();
printf("%s took %d ns\n", execname, timestamp - self->start);
self->start = 0;
}
2. Process-scoped probes
the pid$target provider and positional arguments
horizon-dark
pid$target:::entry
{
printf("entered %s\n", probefunc);
}
pid$target:::return
{
printf("returned from %s\n", probefunc);
} atom-one-dark
pid$target:::entry
{
printf("entered %s\n", probefunc);
}
pid$target:::return
{
printf("returned from %s\n", probefunc);
} github-dark
pid$target:::entry
{
printf("entered %s\n", probefunc);
}
pid$target:::return
{
printf("returned from %s\n", probefunc);
} dracula
pid$target:::entry
{
printf("entered %s\n", probefunc);
}
pid$target:::return
{
printf("returned from %s\n", probefunc);
} nord
pid$target:::entry
{
printf("entered %s\n", probefunc);
}
pid$target:::return
{
printf("returned from %s\n", probefunc);
} github
pid$target:::entry
{
printf("entered %s\n", probefunc);
}
pid$target:::return
{
printf("returned from %s\n", probefunc);
} 3. Aggregation functions
quantize and sum aggregations
horizon-dark
syscall:::entry
{
@dist[probefunc] = quantize(timestamp);
@total = sum(1);
} atom-one-dark
syscall:::entry
{
@dist[probefunc] = quantize(timestamp);
@total = sum(1);
} github-dark
syscall:::entry
{
@dist[probefunc] = quantize(timestamp);
@total = sum(1);
} dracula
syscall:::entry
{
@dist[probefunc] = quantize(timestamp);
@total = sum(1);
} nord
syscall:::entry
{
@dist[probefunc] = quantize(timestamp);
@total = sum(1);
} github
syscall:::entry
{
@dist[probefunc] = quantize(timestamp);
@total = sum(1);
}