|
libusdt |
|
======= |
|
|
|
This is "libusdt", a library for creating DTrace USDT providers. |
|
|
|
The idea here is to allow the specification of a DTrace provider |
|
dynamically in code and then create the provider at runtime. This |
|
allows providers to be specified in dynamic languages, given suitable |
|
bindings. |
|
|
|
The general approach is to create two stub functions for each probe, |
|
one for the is-enabled check and one for the probe itself. These |
|
contain the appropriate instruction sequences to appear to DTrace as |
|
compiled-in tracepoints. A minimal DOF document is built describing |
|
the provider and indicating these stub functions as the tracepoints, |
|
then submitted to the kernel, creating the provider. The API then |
|
exposes the stubs, through which the probes may be fired. |
|
|
|
Status |
|
------ |
|
|
|
The implementation here works as shown in test_usdt.c on Mac OS X, |
|
i386 and x86_64, on Solaris-like systems, i386 and x86_64 and on |
|
FreeBSD and Oracle Linux, x86_64 only. |
|
|
|
Is-enabled probes are supported and exposed in the API. |
|
|
|
There is a "test" target which runs a number of tests of the library, |
|
for which perl is required. |
|
|
|
OS X builds are Universal by default, and on Solaris, the ARCH |
|
variable may be set to either i386 or x86_64 to force a particular |
|
build. |
|
|
|
FreeBSD builds suffer from broken argument handling; this is a known |
|
issue with the current state of DTrace generally on FreeBSD: only the |
|
first five arguments work reliably. See: |
|
|
|
http://wiki.freebsd.org/DTraceTODO |
|
|
|
See Also |
|
-------- |
|
|
|
There are various language bindings available: |
|
|
|
Lua: |
|
|
|
https://github.com/chrisa/lua-usdt |
|
|
|
Ruby (by Kevin Chan): |
|
|
|
https://github.com/kevinykchan/ruby-usdt |
|
|
|
Node.JS: |
|
|
|
https://github.com/chrisa/node-dtrace-provider |
|
|
|
Perl: |
|
|
|
https://github.com/chrisa/perl-Devel-DTrace-Provider |
|
|
|
To Do |
|
----- |
|
|
|
Platform support: |
|
|
|
* add support for FreeBSD 9.0 i386 |
|
* add support for Mac OS X PowerPC |
|
* add support for Solaris SPARC |
|
|
|
Features: |
|
|
|
* add a "low level" API, allowing alternative provision of |
|
tracepoints for closer integration with language VMs. |
|
|
|
* support structured types, with close integration with the host |
|
DTrace system. |
|
|