# Awesome DTrace

A curated list of awesome DTrace books, articles, videos, tools and resources.

## Contents

- Learn
- Articles
- Videos
- Software
- Tools
- Community
- Contributing

## Learn

Recommended reading for learning DTrace.

### Books

- Dynamic Tracing Guide - Illumos.org DTrace guide.
- DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X, and FreeBSD - Official DTrace book.
- Dynamic Tracing with DTrace & SystemTap - A book introduces both DTrace and SystemTap.

### Other

- dtrace(1m) man page - DTrace manual page.
- DTrace cheatsheet - DTrace cheatsheet by Brendan Gregg.
- DTrace one-liners - DTrace one liners. Handy commands.
- DTrace one-liners (FreeBSD) - DTrace one liners from FreeBSD.
- DTrace QuickStart - DTrace quick starting guide.
- Using DTrace stories - A collection of using DTrace to debug system stories.
- Advanced DTrace Tips, Tricks and Gotchas - A collection of advanced tips for using DTrace.

## Articles

Interesting articles about DTrace and real-world use cases.

### PID Provider

- pid provider: entry probe - DTrace PID Provider.
- pid provider: entry arguments - DTrace PID Provider Arguments.
- pid provider: return - DTrace PID Provider return.
- pid provider: instructions - DTrace PID Provider Instructions.
- pid provider: overhead - DTrace PID Provider Overhead.
- pid provider exposed - PID providers internals by Adam Leventhal.
- When magic collides - PID provider bug deep dive by Bryan Cantrill.

### USDT provider

- Understanding DTrace ustack helpers - DTrace ustack helpers.
- USDT Providers Redux - Reference for building USDT providers in custom applications.

### Sysevent provider

- DTrace sysevent provider - Solaris/illumos sysevent provider for DTrace.

### Ruby and DTrace

- Using DTrace to measure mutex contention in Ruby - Mutex contention measuring in Ruby.

### Visualization methods

- Flamegraphs - A visualization of profiled software, allowing the most frequent code-paths to be identified quickly and accurately.
- Heat Maps - Heat maps allow three dimensions of data to be visualized, similar to weather radar maps where color is used as a dimension.

## Videos

Interesting videos about DTrace.

- DTrace review - Bryan Cantrill explains how to significantly improve debugging both for development and live systems with DTrace.

### dtrace.conf

- dtrace.conf 2008
  - NFSv3 and iSCSI providers
  - DTrace for hardware
  - Zones & DTrace
  - DTracing a Solaris build
  - War Stories
  - Sun Benchmarks
  - Erlang
  - Erlang (continued)
  - Instrumenting Adobe AIR
  - HotSpot Runtime & Java
  - PostgreSQL: Looking Under the Hood with Solaris
  - PostgreSQL Provider
  - Distributed DTrace
  - Apple Port of DTrace
- dtrace.conf 2012
  - DTrace State of the Union
  - User-Level CTF
  - Dynamic Translators
  - Clang Parser for DTrace
  - Visualizations
  - Visualizations, Enabling Toolchain for Seamless USDT
  - More Visualizations
  - DTrace in Node.js
  - DTrace and Erlang
  - DTrace on Linux
  - ZFS Provider
  - DTrace on FreeBSD
  - Barriers to DTrace Adoption
- dtrace.conf 2016
  - Introduction
  - (Useful!) DTrace intro
  - CTF Everywhere!
  - Distributed DTrace
  - DTracign Apps
  - DTrace and JSON: Together at last!
  - ASSERT() as a DTrace probe (and why I need some help)
  - Implementing (or not) fds[] in FreeBSD
  - OpenDTrace
  - DTrace Performance Improvements with Always-on Instrumentation
  - D language improvements
  - D Syntactic Sugar
  - DTrace and Go
  - DTrace and Postgres
  - DTrace in the Zone
  - DTrace ustack() performance improvements
  - DTrace Exploitation

## Software

List of software with DTrace support.

### Programming languages

#### Erlang

- Erlang - DTrace and Erlang/OTP.

#### Lua

- lua-usdt - Libusdt bindings for Lua.

#### Node.js

- node-dtrace-provider - Native DTrace probes for Node.js apps.

#### Perl

- perl-Devel-DTrace-Provider - Perl wrapper for libusdt.

#### PHP

- PHP - Using PHP and DTrace.

#### Python

- Python - DTrace patch for Python 2.7.x and 3.x.
- python-usdt - Libusdt bindings for Python.

#### Ruby

- Ruby - Ruby DTrace probes.
- ruby-usdt - Native DTrace probes for ruby apps.

### Databases

- MySQL - MySQL DTrace probes.
- PostgreSQL - PostgreSQL DTrace probes.

### Webservers

- mod_usdt - “httpd” DTrace provider.

### Visualization

- FlameGraph - Stack trace visualizer.
- node-stackvis - Stack trace visualizer.

## Tools

- DTraceToolkit - A collection of useful documented DTrace scripts.
- dtrace-cloud-tools - DTrace tools written for the SmartOS/SmartDataCenter cloud (illumos-based).
- pgsql tools - Report top-level PostgreSQL stats.
- portsnoop - Trace event port activity.
- storage tools - Report NFS, CIFS and iSCSI stats.

## Community

- Community site - DTrace community site.
- Mailing list - DTrace community mailing list.
- FreeBSD DTrace mailing list - FreeBSD DTrace community mailing list.
- China DTrace - A Chinese DTrace site.

## Contributing

Contributions are more than welcome! Please see contribution guidelines first.