17
Copyright Garry Bulmer 2008 Erlang-DTrace Garry Bulmer Team DTrace: Tim Becker Copyright Garry Bulmer 2008

Erlang-DTrace · Erlang DTrace Implementation DTrace Statically DeÞned Tracing (SDT) Probes Insert SDT probes (C) into Erlang VM Probes in key parts of Erlang VM

  • Upload
    vubao

  • View
    240

  • Download
    0

Embed Size (px)

Citation preview

Copyright Garry Bulmer 2008

Erlang-DTraceGarry Bulmer

Team DTrace: Tim Becker

Copyright Garry Bulmer 2008

Copyright Garry Bulmer 2008

What I'm going to talk about

Introduction to DTrace & DTrace Architecture

Demo of DTrace with ‘one liners’

Erlang-Dtrace Vision & ‘Fit’

Erlang VM Architecture

Current Erlang DTrace Scope

Erlang-DTrace Demo

Future

Copyright Garry Bulmer 2008

What is DTrace?

“DTrace is a comprehensive dynamic tracing facility ... that can be used by administrators and developers on live production systems to examine the behavior of both user programs and of the operating system itself. DTrace enables you to explore your system to understand how it works, track down performance problems across many layers of software, or locate the cause of aberrant behavior.

DTrace lets you create your own custom programs to dynamically instrument the system and provide immediate, concise answers to arbitrary questions”

Source: Sun Microsystems “Solaris Dynamic Tracing Guide”

Copyright Garry Bulmer 2008

How does DTrace work?

KEY: Dynamically enabled - even in Production

Probes within OS kernel - ‘Zero cost’ when disabled

‘Providers’ - subsystem managing a group of Probes

Probes observe events, and capture data

Providers forward events and data to ‘D programs’

User applications - observed by ‘PID’ Provider

Probes observe function entry, exit & parameters

Copyright Garry Bulmer 2008

Apache

Kernel

DTrace End-to-End

syscall

profile fbt

pid

proc

sched

io

vminfo

sysinfo

DTrace

dtrace

libdtrace

dtrace

myprog.d

sdt

Firefox

myprog.d

JVM MySQLJavascript

Copyright Garry Bulmer 2008

DTrace Demo - ‘one liners’

Copyright Garry Bulmer 2008

Firefox MySQLJavascript

Erlang(Yaws)

Erlang(App.)

Erlang-DTrace End-to-End

Kernel

syscall

profile fbt

pid

proc

sched

io

vminfo

sysinfo

DTrace

dtrace

libdtrace

dtrace

myprog.d

sdt

myprog.d

Copyright Garry Bulmer 2008

fib(0) ->fib(N) ->

module(fibn)

tag("<") ->tag([H|T]) ->

module(xml)

Erlang code

C code

Erlang VM Architecture

Erlang VM (Node)syscall

Erlang Processes

TraceMemory

Allocation & GC

Messaging & Process

'EXIT'

Process Spawn &

Scheduling

Dynamic Code

Update

Built in Functions

(BIFs)

GlobalState

Copyright Garry Bulmer 2008

Erlang’s DTrace ‘Fit’

DTrace ‘PID’ Provider can observe C programs

Good: Erlang VM is C

Bad: user needs to understand Erlang VM internals !

Erlang VM-managed, Fine-Grain ‘Process’

Erlang processes are invisible to DTrace

Erlang data is dynamically typed

DTrace uses static ‘C-style’ data types

Erlang scripts are opaque data to DTrace

Copyright Garry Bulmer 2008

Erlang DTrace Implementation

DTrace Statically Defined Tracing (SDT) Probes

Insert SDT probes (C) into Erlang VM

Probes in key parts of Erlang VM

Process management, GC, Messaging, Code Load ...

‘Decode’ Erlang scripts (?)

Add new DTrace functions for Erlang Developers

Copyright Garry Bulmer 2008

Erlang has Dynamic Tracing !

Aim to complement, not replace

Longer term integrate Erlang tracing and DTrace

Provide Erlang DTrace interface functions

Exploit Erlang’s Dynamic Code Update

Can load Erlang code in production

Copyright Garry Bulmer 2008

V002 Erlang-DTrace Scope

New DTrace BIFs (explicitly use DTrace probes in Erlang)

Statically Defined Tracing Probes inserted into Erlang VM

Processes, Memory (GC),

Global State (Registry)

Use Erlang VM Trace facilities from Erlang DTrace BIF’s

Copyright Garry Bulmer 2008

Erlang-Dtrace Demo

Erlang VM'Proxy'

AdiumJabber/XMPP

Client

ejabberdJabber/XMPP

Server

DTrace

Copyright Garry Bulmer 2008

'Proxy' Code

Copyright Garry Bulmer 2008

Future Directions

Better use of existing Erlang Trace facilities

Dynamic DTrace Probes

Correlate Messages across Erlang Processes

Like to handle Erlang Data Types (e.g. Lists) in DTrace ...

... and not flatten to strings in probe code

Dynamic DTrace Type extensions

Distributed/Clustered DTrace (one day ...)

Copyright Garry Bulmer 2008

More Information

Erlang-DTrace google group

Source hosted at opensolaris.org

Co-developer is Tim Becker

Thanks to Bryan Cantrill, Sun Microsystems for encouragement and support

Copyright Garry Bulmer 2008

Questions