78 lines
2.1 KiB
Markdown
78 lines
2.1 KiB
Markdown
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.
|