Giter Club home page Giter Club logo

libusdt's Introduction

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.

libusdt's People

Contributors

chrisa avatar sax avatar

Watchers

steviejames avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.