From afb632d2028fdc4a37e10e41e1929264ff59f52e Mon Sep 17 00:00:00 2001
From: Hans Bolinder
Fix Table Viewer refresh crash on no more existing ets
- tables (Thanks to Peti Gömori)
Own Id: OTP-10635
-- cgit v1.2.3 From e5875001247e6a6ac4f474157a51a8c54f94ae49 Mon Sep 17 00:00:00 2001 From: Hans BolinderSets all flags.
+Sets all flags except
Fix Table Viewer refresh crash on no more existing ets - tables (Thanks to Peti Gömori)
+ tables (Thanks to Peti Gömori)Own Id: OTP-10635
This document describes the changes made to the Runtime_Tools application.
++ The process trace flag 'silent' is now allowed in call to + dbg:p/2.
++ Own Id: OTP-11222
++ Introduced functionality for inspection of system and + build configuration.
++ Own Id: OTP-11196
+This document describes the changes made to the Runtime_Tools application.
++ Observer did not produce correct result when ERTS + internal memory allocators had been disabled.
++ Own Id: OTP-11520
+Stops the
Same as stop/0, but also clears all trace patterns on local
--
cgit v1.2.3
From e0052804daa336e0d05b8a451e15b07afd085074 Mon Sep 17 00:00:00 2001
From: Rickard Green
Performs a sanity check on the system. If no issues
+ were found,
An application has an invalid
An application has an invalid application version. + The second element identifies the application version that + is invalid.
An application is missing
+
Note that this check use application versions that
+ are loaded, or will be loaded when used. You might have
+ application versions that satisfies all dependencies
+ installed in the system, but if those are not loaded this
+ check will fail. The system will of course also fail when
+ used like this. This may happen when you have multiple
+
Currently the sanity check is limited to verifying
+ runtime dependencies found in the
An
Writes miscellaneous system information to file. This + information will typically be requested by the Erlang/OTP team + at Ericsson AB when reporting an issue.
This document describes the changes made to the Runtime_Tools application.
++ The documentation for the return value of + dbg:{stop,stop_clear} functions are now correct (Thanks + to Luca Favatella)
++ Own Id: OTP-11603
++ Fix DTrace build on Illumos. (Thanks to Ryan Zezeski.)
++ Own Id: OTP-11622
++ Do not turn off scheduler_wall_time, as it can interfere + with other applications usage.
++ Own Id: OTP-11693 Aux Id: seq12528
++ Application upgrade (appup) files are corrected for the + following applications:
+
+
+ A new test utility for testing appup files is added to + test_server. This is now used by most applications in + OTP.
++ (Thanks to Tobias Schlager)
++ Own Id: OTP-11744
++ Allow install path to have unicode characters.
++ Own Id: OTP-10877
+
+ The
+ Own Id: OTP-11662
+
+ The
+ Runtime dependencies have been added to all app-files in + OTP. Note that these may not be completely correct during + OTP 17, but this is actively being worked on.
+
+ The function
+ Own Id: OTP-11773
+This document describes the changes made to the Runtime_Tools application.
+
+ Add
+ Own Id: OTP-12298
+This document describes the changes made to the Runtime_Tools application.
+
+ The trace process started by
+ Own Id: OTP-12517
+If
If a trace port (
If a trace port (see
For details,
For details, see
This document describes the changes made to the Runtime_Tools application.
++ Change license text from Erlang Public License to Apache + Public License v2
++ Own Id: OTP-12845
+This document describes the changes made to the Runtime_Tools application.
+
+ The
+ Own Id: OTP-12890 Aux Id: seq12885
+Stops the
Note that no trace patterns are affected by this +
Note that no global trace patterns are affected by this function.
Same as stop/0, but also clears all trace patterns on local - and global functions calls.
+Same as stop/0, but also clears all trace patterns on global functions calls.
This document describes the changes made to the Runtime_Tools application.
++ Clarified dbg:stop documentation
++ Own Id: OTP-13078
+This module implements some convenience functions for analyzing
+ microstate accounting data. For details about how to use the basic api and
+ what the different states represent see
+
Basic Scenario
+1> msacc:start(1000). +ok +2> msacc:print(). +Average thread real-time : 1000513 us +Accumulated system run-time : 2213 us +Average scheduler run-time : 1076 us + + Thread aux check_io emulator gc other port sleep + +Stats per thread: + async( 0) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00% + async( 1) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00% + aux( 1) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 99.99% + scheduler( 1) 0.00% 0.03% 0.13% 0.00% 0.01% 0.00% 99.82% + scheduler( 2) 0.00% 0.00% 0.00% 0.00% 0.03% 0.00% 99.97% + +Stats per type: + async 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00% + aux 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 99.99% + scheduler 0.00% 0.02% 0.06% 0.00% 0.02% 0.00% 99.89% +ok ++
This first command enables microstate accounting for 1000 milliseconds.
+ See
Then one column per state is printed with a the percentage of time this + thread spent in the state out of it's own real-time. After the thread + specific time, the accumulated time for each type of thread is printed in + a similar format.
+Since we have the average real-time and the percentage spent in each
+ state we can easily calculate the time spent in each state by multiplying
+
A map containing the different microstate accounting states and + the number of microseconds spent in it.
A map containing information about a specific thread. The
+ percentages in the map can be either run-time or real-time depending
+ on if
A map containing the different microstate accounting states. Each
+ value in the map contains another map with the percentage of time that
+ this thread has spent in the specific state. Both the percentage of
+
The different states that a thread can be in. See
+
The different options that can be given to
+
This function checks whether microstate accounting + is available or not.
+Start microstate accounting. Returns whether it was + previously enabled or disabled.
+Resets all counters and then starts microstate accounting + for the given milliseconds.
+Stop microstate accounting. + Returns whether is was previously enabled or disabled.
+Reset microstate accounting counters. + Returns whether is was enabled or disabled.
+
+ Prints the current microstate accounting to standard out.
+ Same as
+
Print the given microstate statistics values to stdout.
+ Same as
+
Print the given microstate statistics values to standard out. + With many states this can be quite verbose. See the top of this + reference manual for a brief description of what the fields mean.
+It is possible to print more specific types of statistics by
+ first manipulating the
msacc:print(msacc:stats(runtime,msacc:stats())).+
If you want to only print run-time per thread type you can do:
+msacc:print(msacc:stats(type,msacc:stats(runtime,msacc:stats()))).+
Options
+Print the given microstate statistics values to the given file
+ or device. The other arguments behave the same way as for
+
Returns a runtime system independent version of the microstate
+ statistics data presented by
+
Returns the system time for the given microstate statistics values. + System time is the accumulated time of all threads.
+Returns fractions of real-time or run-time spent in the various + threads from the given microstate statistics values.
+Returns a list of microstate statistics values where the values + for all threads of the same type has been merged.
+Dumps the current microstate statistics counters to a file that can
+ be parsed with
Read a file dump produced by
This document describes the changes made to the Runtime_Tools application.
++ Own Id: OTP-13279
+This module implements a text based interface to the
-
For some examples of how to use
+ To quickly get started on tracing function calls you can use the following + code in the Erlang shell: +
++1> dbg:tracer(). %% Start the default trace message receiver +{ok,<0.36.0>} +2> dbg:p(all, c). %% Setup call (c) tracing on all processes +{ok,[{matched,nonode@nohost,26}]} +3> dbg:tp(lists, seq, x). %% Setup an exception return trace (x) on lists:seq +{ok,[{matched,nonode@nohost,2},{saved,x}]} +4> lists:seq(1,10). +(<0.34.0>) call lists:seq(1,10) +(<0.34.0>) returned from lists:seq/2 -> [1,2,3,4,5,6,7,8,9,10] +[1,2,3,4,5,6,7,8,9,10] ++
+ For more examples of how to use
The utilities are also suitable to use in system testing on
large systems, where other tools have too much impact on the
system performance. Some primitive support for sequential tracing
@@ -164,53 +180,66 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
Traces When enabling an Traces the messages the process sends. Traces the messages the process or port sends. Traces the messages the process receives. Traces the messages the process or port receives. Traces the messages the process receives and sends. Traces the messages the process or port receives and sends. Traces process related events to the process. Traces port related events to the port. Lets all processes created by the traced
@@ -241,8 +274,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
This is the same as
-
+
+
+
The function returns either an error tuple or a tuple
Displays information about all traced processes. Displays information about all traced processes and ports. This function enables call trace for one or more
- functions. All exported functions matching the For a description of the
The Module, Function and/or Arity parts of the tuple may
be specified as the atom
All nodes added with
All nodes added with
The function returns either an error tuple or a tuple
There may be a tuple
If an error is returned, it can be due to errors in
compilation of the match specification. Such errors are
presented as a list of tuples This function works as This function works as
This function disables call tracing on the specified
functions. The semantics of the parameter is the same
as for the corresponding function specification in
-
The return value reflects how many functions that matched,
- and is constructed as described in
This function works as
This function works as
This function works as
This function works as
Use this function to recall all match specifications previously
used in the session (i. e. previously saved during calls
- to
Match specifications used can be saved in a file (if a
read-write file system is present) for use in later
- debugging sessions, see
There are three built-in trace patterns:
Use this function to "forget" all match specifications
- saved during calls to
Use this function to "forget" a specific match specification
- saved during calls to
This function will save all match specifications saved
- during the session (during calls to
Each match spec in the file ends with a full stop
(
This function reads match specifications from a file
- (possibly) generated by the
The match specifications in the file are merged
with the current match specifications, so that no duplicates
- are generated. Use
The function will return an error, either due to I/O
problems (like a non existing or non readable file) or due
to file format problems. The errors from a bad format file
are in a more or less textual format, which will give a hint
- to what's causing the problem.
The
This function adds a remote node (
If
If a trace port (see
If a trace port (see
The function will also return an error if the node
Clears a node from the list of traced nodes. Subsequent
- calls to
Returns
This function starts a server on the local node that will
be the recipient of all trace messages. All subsequent calls
- to
A trace server started in this way will simply display the
trace messages in a formatted way in the Erlang shell
- (i. e. use io:format). See
To start a similar tracer on a remote node, use
To start a similar tracer on a remote node, use
This function starts a tracer server with additional
parameters on the local node. The first parameter, the
If
If
If
If
if
If an error is returned, it can either be due to a tracer
server already running (
To start a similar tracer on a remote node, use
-
This function is equivalent to
This function is equivalent to
This function is not equivalent to
This function is not equivalent to
For details, see
For details, see
Returns
Returns
This function starts a trace client that reads the output
created by a trace port driver and handles it in mostly the
- same way as a tracer process created by the
If
If
If This function works exactly as This function works exactly as This function shuts down a previously started trace
client. The
%% Using a default line editing shell -- cgit v1.2.3 From 6117ee72af5c0c2973a0f20fb847a216825db03f Mon Sep 17 00:00:00 2001 From: Lukas LarssonDate: Fri, 18 Mar 2016 19:46:04 +0100 Subject: runtime_tools: Make dbg work with erl_tracer modules OTP-13500 --- lib/runtime_tools/doc/src/dbg.xml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'lib/runtime_tools/doc/src') diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml index ccb3bca50e..0128e23a47 100644 --- a/lib/runtime_tools/doc/src/dbg.xml +++ b/lib/runtime_tools/doc/src/dbg.xml @@ -288,7 +288,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ The list can also include any of the flags allowed in -
+erlang:trace/3 erlang:trace/3 The function returns either an error tuple or a tuple
{ok, List} . TheList consists of specifications of how many processes and ports that matched (in the @@ -747,7 +747,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\Error = term() HandlerSpec = {HandlerFun, InitialData} HandlerFun = fun() (two arguments) -ModuleSpec = {TracerModule, TracerState} +ModuleSpec = fun() (no arguments) | {TracerModule, TracerState} ModuleModule = atom() InitialData = TracerState = term() @@ -779,9 +779,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ preferably generated by calling. trace_port/2 if
+ that tracer module or a fun returning the same tuple.Type ismodule , then the second parameter should - be a tuple describing the+ be either a tuple describing the erl_tracer module to be used for tracing and the state to be used for - that tracer module. erl_tracer If an error is returned, it can either be due to a tracer server already running (
{error,already_started} ) or due to theHandlerFun throwing an exception. @@ -800,8 +800,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\This function is equivalent to
, but acts on the given node. A tracer is started on the node - ( tracer/2 Nodename ) and the node is added to the list of traced - nodes. + (Nodename ) and the node is added to the list of traced nodes.This function is not equivalent to
. While @@ -1066,11 +1065,11 @@ hello n/1
Returns the process or port to which all trace - messages are sent.
+Returns the process, port or tracer module to which all trace + messages are sent.
The Linux Trace Toolkit: next generation is an open source system software package + for correlated tracing of the Linux kernel, user applications and libraries.
+For more information, please visit
+ Configure and build Erlang with LTTng support: +
+For LTTng to work properly with Erlang/OTP you need + the following packages installed:
+ +LTTng-tools: a command line interface to control tracing sessions.
LTTng-UST: user space tracing library.
On Ubuntu this can be installed via
$ sudo aptitude install lttng-tools liblttng-ust-dev
+ See
After LTTng is properly installed on the system Erlang/OTP can be built with LTTng support.
+ + +$ ./configure --with-dynamic-trace=lttng
+$ make
+ All tracepoints are in the domain of
All Erlang types are the string equivalent in LTTng.
+ +process_spawn
+Example:
+process_spawn: { cpu_id = 3 }, { pid = "<0.131.0>", parent = "<0.130.0>", entry = "erlang:apply/2" }
process_link
+Example:
+process_link: { cpu_id = 3 }, { from = "<0.130.0>", to = "<0.131.0>", type = "link" }
process_exit
+Example:
+process_exit: { cpu_id = 3 }, { pid = "<0.130.0>", reason = "normal" }
process_register
+Example:
+process_register: { cpu_id = 0 }, { pid = "<0.128.0>", name = "dyntrace_lttng_SUITE" type = "register" }
process_scheduled
+Example:
+process_scheduled: { cpu_id = 0 }, { pid = "<0.136.0>", entry = "erlang:apply/2", type = "in" }
port_open
+Example:
+port_open: { cpu_id = 5 }, { pid = "<0.131.0>", driver = "'/bin/sh -s unix:cmd'", port = "#Port<0.1887>" }
port_exit
+Example:
+port_exit: { cpu_id = 5 }, { port = "#Port<0.1887>", reason = "normal" }
port_link
+Example:
+port_link: { cpu_id = 5 }, { from = "#Port<0.1887>", to = "<0.131.0>", type = "unlink" }
port_scheduled
+Example:
+port_scheduled: { cpu_id = 5 }, { pid = "#Port<0.1905>", entry = "close", type = "out" }
function_call
+Example:
+function_call: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }
function_return
+Example:
+function_return: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }
function_exception
+Example:
+function_exception: { cpu_id = 5 }, { pid = "<0.144.0>", entry = "t:call_exc/1", class = "error" }
message_send
+Example:
+message_send: { cpu_id = 3 }, { from = "#Port<0.1938>", to = "<0.160.0>", message = "{#Port<0.1938>,eof}" }
message_receive
+Example:
+message_receive: { cpu_id = 7 }, { to = "<0.167.0>", message = "{<0.165.0>,ok}" }
gc_minor_start
+Example:
+gc_minor_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 0, heap = 610, old_heap = 0 }
gc_minor_end
+Example:
+gc_minor_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 120, heap = 1598, old_heap = 1598 }
gc_major_start
+Example:
+gc_major_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 8, heap = 2586, old_heap = 1598 }
gc_major_end
+Example:
+gc_major_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 240, heap = 4185, old_heap = 0 }
Runtime Tools
+All tracepoints are in the domain of
All Erlang types are the string equivalent in LTTng.
+ +scheduler_poll
+Example:
+scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }
driver_init
+Example:
+driver_init: { cpu_id = 2 }, { driver = "caller_drv", major = 3, minor = 3, flags = 1 }
driver_start
+Example:
+driver_start: { cpu_id = 2 }, { pid = "<0.198.0>", driver = "caller_drv", port = "#Port<0.3676>" }
driver_output
+Example:
+driver_output: { cpu_id = 2 }, { pid = "<0.198.0>", port = "#Port<0.3677>", driver = "/bin/sh -s unix:cmd", bytes = 36 }
driver_outputv
+Example:
+driver_outputv: { cpu_id = 5 }, { pid = "<0.194.0>", port = "#Port<0.3663>", driver = "tcp_inet", bytes = 3 }
driver_ready_input
+Example:
+driver_ready_input: { cpu_id = 5 }, { pid = "<0.189.0>", port = "#Port<0.3637>", driver = "inet_gethost 4 " }
driver_ready_output
+Example:
+driver_ready_output: { cpu_id = 5 }, { pid = "<0.194.0>", port = "#Port<0.3663>", driver = "tcp_inet" }
driver_timeout
+Example:
+driver_timeout: { cpu_id = 5 }, { pid = "<0.196.0>", port = "#Port<0.3664>", driver = "tcp_inet" }
driver_stop_select
+Example:
+driver_stop_select: { cpu_id = 5 }, { driver = "unknown" }
driver_flush
+Example:
+driver_flush: { cpu_id = 7 }, { pid = "<0.204.0>", port = "#Port<0.3686>", driver = "tcp_inet" }
driver_stop
+Example:
+driver_stop: { cpu_id = 5 }, { pid = "[]", driver = "efile", port = "#Port<0.3673>" }
driver_process_exit
+driver_ready_async
+Example:
+driver_ready_async: { cpu_id = 3 }, { pid = "<0.181.0>", port = "#Port<0.3622>", driver = "efile" }
driver_call
+Example:
+driver_call: { cpu_id = 2 }, { pid = "<0.202.0>", port = "#Port<0.3676>", driver = "caller_drv", command = 0, bytes = 2 }
driver_control
+Example:
+driver_control: { cpu_id = 3 }, { pid = "<0.32767.8191>", port = "#Port<0.0>", driver = "forker", command = 83, bytes = 32 }
aio_pool_get
+Example:
+aio_pool_get: { cpu_id = 4 }, { port = "#Port<0.3614>", length = 0 }
aio_pool_add
+Async queue length is not defined for
Example:
+aio_pool_add: { cpu_id = 3 }, { port = "#Port<0.3614>", length = -1 }
carrier_create
+Example:
+carrier_create: { cpu_id = 2 }, { type = "ets_alloc", instance = 7, size = 2097152, mbc_carriers = 4, mbc_carriers_size = 3440640, mbc_blocks = 526, mbc_blocks_size = 1278576, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }
carrier_destroy
+Example:
+carrier_destroy: { cpu_id = 6 }, { type = "ets_alloc", instance = 7, size = 262144, mbc_carriers = 3, mbc_carriers_size = 3178496, mbc_blocks = 925, mbc_blocks_size = 2305336, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }
carrier_pool_put
+Example:
+carrier_pool_put: { cpu_id = 3 }, { type = "ets_alloc", instance = 5, size = 1048576 }
carrier_pool_get
+Example:
+carrier_pool_get: { cpu_id = 7 }, { type = "ets_alloc", instance = 4, size = 3208 }
driver_stop
Example:
-driver_stop: { cpu_id = 5 }, { pid = "[]", driver = "efile", port = "#Port<0.3673>" }
driver_stop: { cpu_id = 5 }, { pid = "[]", port = "#Port<0.3673>", driver = "efile" }
driver_process_exit
Example:
aio_pool_get: { cpu_id = 4 }, { port = "#Port<0.3614>", length = 0 }
aio_pool_add
+aio_pool_put
Async queue length is not defined for
Async queue length is not defined for
Example:
-aio_pool_add: { cpu_id = 3 }, { port = "#Port<0.3614>", length = -1 }
aio_pool_put: { cpu_id = 3 }, { port = "#Port<0.3614>", length = -1 }
carrier_create
This document describes the changes made to the Runtime_Tools application.
++ Add microstate accounting
++ Microstate accounting is a way to track which state the + different threads within ERTS are in. The main usage area + is to pin point performance bottlenecks by checking which + states the threads are in and then from there figuring + out why and where to optimize.
++ Since checking whether microstate accounting is on or off + is relatively expensive only a few of the states are + enabled by default and more states can be enabled through + configure.
++ There is a convinence module called msacc that has been + added to runtime_tools that can assist in gathering and + interpreting the data from Microstate accounting.
+
+ For more information see
+ Own Id: OTP-12345
++ Update dbg and ttb to work with a tracer module as tracer + and tracing on ports.
++ Own Id: OTP-13500
+
+ Updated dbg to accept the new trace options
+
+ Own Id: OTP-13502
++ Introduce LTTng tracing via Erlang tracing.
+
+ For LTTng to be enabled OTP needs to be built with
+ configure option
The dynamic trace module
This feature also introduces an incompatible change in
+ trace tags. The trace tags
+ *** POTENTIAL INCOMPATIBILITY ***
++ Own Id: OTP-13532
+This document describes the changes made to the Runtime_Tools application.
-- Add microstate accounting
-- Microstate accounting is a way to track which state the - different threads within ERTS are in. The main usage area - is to pin point performance bottlenecks by checking which - states the threads are in and then from there figuring - out why and where to optimize.
-- Since checking whether microstate accounting is on or off - is relatively expensive only a few of the states are - enabled by default and more states can be enabled through - configure.
-- There is a convinence module called msacc that has been - added to runtime_tools that can assist in gathering and - interpreting the data from Microstate accounting.
-
- For more information see
- Own Id: OTP-12345
-- Update dbg and ttb to work with a tracer module as tracer - and tracing on ports.
-- Own Id: OTP-13500
-
- Updated dbg to accept the new trace options
-
- Own Id: OTP-13502
-- Introduce LTTng tracing via Erlang tracing.
-
- For LTTng to be enabled OTP needs to be built with
- configure option
The dynamic trace module
This feature also introduces an incompatible change in
- trace tags. The trace tags
- *** POTENTIAL INCOMPATIBILITY ***
-- Own Id: OTP-13532
-Example:
-process_spawn: { cpu_id = 3 }, { pid = "<0.131.0>", parent = "<0.130.0>", entry = "erlang:apply/2" }
process_spawn: { cpu_id = 3 }, { pid = "<0.131.0>", parent = "<0.130.0>", entry = "erlang:apply/2" }
process_link
Example:
-process_link: { cpu_id = 3 }, { from = "<0.130.0>", to = "<0.131.0>", type = "link" }
process_link: { cpu_id = 3 }, { from = "<0.130.0>", to = "<0.131.0>", type = "link" }
process_exit
@@ -94,7 +94,7 @@ $ makeExample:
-process_exit: { cpu_id = 3 }, { pid = "<0.130.0>", reason = "normal" }
process_exit: { cpu_id = 3 }, { pid = "<0.130.0>", reason = "normal" }
process_register
Example:
-process_register: { cpu_id = 0 }, { pid = "<0.128.0>", name = "dyntrace_lttng_SUITE" type = "register" }
process_register: { cpu_id = 0 }, { pid = "<0.128.0>", name = "dyntrace_lttng_SUITE" type = "register" }
process_scheduled
Example:
-process_scheduled: { cpu_id = 0 }, { pid = "<0.136.0>", entry = "erlang:apply/2", type = "in" }
process_scheduled: { cpu_id = 0 }, { pid = "<0.136.0>", entry = "erlang:apply/2", type = "in" }
port_open
@@ -124,7 +124,7 @@ $ makeExample:
-port_open: { cpu_id = 5 }, { pid = "<0.131.0>", driver = "'/bin/sh -s unix:cmd'", port = "#Port<0.1887>" }
port_open: { cpu_id = 5 }, { pid = "<0.131.0>", driver = "'/bin/sh -s unix:cmd'", port = "#Port<0.1887>" }
port_exit
Example:
-port_exit: { cpu_id = 5 }, { port = "#Port<0.1887>", reason = "normal" }
port_exit: { cpu_id = 5 }, { port = "#Port<0.1887>", reason = "normal" }
port_link
Example:
-port_link: { cpu_id = 5 }, { from = "#Port<0.1887>", to = "<0.131.0>", type = "unlink" }
port_link: { cpu_id = 5 }, { from = "#Port<0.1887>", to = "<0.131.0>", type = "unlink" }
port_scheduled
Example:
-port_scheduled: { cpu_id = 5 }, { pid = "#Port<0.1905>", entry = "close", type = "out" }
port_scheduled: { cpu_id = 5 }, { pid = "#Port<0.1905>", entry = "close", type = "out" }
function_call
Example:
-function_call: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }
function_call: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }
function_return
Example:
-function_return: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }
function_return: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }
function_exception
Example:
-function_exception: { cpu_id = 5 }, { pid = "<0.144.0>", entry = "t:call_exc/1", class = "error" }
function_exception: { cpu_id = 5 }, { pid = "<0.144.0>", entry = "t:call_exc/1", class = "error" }
message_send
Example:
-message_send: { cpu_id = 3 }, { from = "#Port<0.1938>", to = "<0.160.0>", message = "{#Port<0.1938>,eof}" }
message_send: { cpu_id = 3 }, { from = "#Port<0.1938>", to = "<0.160.0>", message = "{#Port<0.1938>,eof}" }
message_receive
Example:
-message_receive: { cpu_id = 7 }, { to = "<0.167.0>", message = "{<0.165.0>,ok}" }
message_receive: { cpu_id = 7 }, { to = "<0.167.0>", message = "{<0.165.0>,ok}" }
gc_minor_start
Example:
-gc_minor_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 0, heap = 610, old_heap = 0 }
gc_minor_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 0, heap = 610, old_heap = 0 }
gc_minor_end
Example:
-gc_minor_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 120, heap = 1598, old_heap = 1598 }
gc_minor_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 120, heap = 1598, old_heap = 1598 }
gc_major_start
Example:
-gc_major_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 8, heap = 2586, old_heap = 1598 }
gc_major_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 8, heap = 2586, old_heap = 1598 }
gc_major_end
Example:
-gc_major_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 240, heap = 4185, old_heap = 0 }
gc_major_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 240, heap = 4185, old_heap = 0 }
@@ -250,7 +250,7 @@ $ make
Example:
-scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }
scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }
driver_init
Example:
-driver_init: { cpu_id = 2 }, { driver = "caller_drv", major = 3, minor = 3, flags = 1 }
driver_init: { cpu_id = 2 }, { driver = "caller_drv", major = 3, minor = 3, flags = 1 }
driver_start
Example:
-driver_start: { cpu_id = 2 }, { pid = "<0.198.0>", driver = "caller_drv", port = "#Port<0.3676>" }
driver_start: { cpu_id = 2 }, { pid = "<0.198.0>", driver = "caller_drv", port = "#Port<0.3676>" }
driver_output
Example:
-driver_output: { cpu_id = 2 }, { pid = "<0.198.0>", port = "#Port<0.3677>", driver = "/bin/sh -s unix:cmd", bytes = 36 }
driver_output: { cpu_id = 2 }, { pid = "<0.198.0>", port = "#Port<0.3677>", driver = "/bin/sh -s unix:cmd", bytes = 36 }
driver_outputv
Example:
-driver_outputv: { cpu_id = 5 }, { pid = "<0.194.0>", port = "#Port<0.3663>", driver = "tcp_inet", bytes = 3 }
driver_outputv: { cpu_id = 5 }, { pid = "<0.194.0>", port = "#Port<0.3663>", driver = "tcp_inet", bytes = 3 }
driver_ready_input
Example:
-driver_ready_input: { cpu_id = 5 }, { pid = "<0.189.0>", port = "#Port<0.3637>", driver = "inet_gethost 4 " }
driver_ready_input: { cpu_id = 5 }, { pid = "<0.189.0>", port = "#Port<0.3637>", driver = "inet_gethost 4 " }
driver_ready_output
Example:
-driver_ready_output: { cpu_id = 5 }, { pid = "<0.194.0>", port = "#Port<0.3663>", driver = "tcp_inet" }
driver_ready_output: { cpu_id = 5 }, { pid = "<0.194.0>", port = "#Port<0.3663>", driver = "tcp_inet" }
driver_timeout
Example:
-driver_timeout: { cpu_id = 5 }, { pid = "<0.196.0>", port = "#Port<0.3664>", driver = "tcp_inet" }
driver_timeout: { cpu_id = 5 }, { pid = "<0.196.0>", port = "#Port<0.3664>", driver = "tcp_inet" }
driver_stop_select
Example:
-driver_stop_select: { cpu_id = 5 }, { driver = "unknown" }
driver_stop_select: { cpu_id = 5 }, { driver = "unknown" }
driver_flush
Example:
-driver_flush: { cpu_id = 7 }, { pid = "<0.204.0>", port = "#Port<0.3686>", driver = "tcp_inet" }
driver_flush: { cpu_id = 7 }, { pid = "<0.204.0>", port = "#Port<0.3686>", driver = "tcp_inet" }
driver_stop
Example:
-driver_stop: { cpu_id = 5 }, { pid = "[]", port = "#Port<0.3673>", driver = "efile" }
driver_stop: { cpu_id = 5 }, { pid = "[]", port = "#Port<0.3673>", driver = "efile" }
driver_process_exit
Example:
-driver_ready_async: { cpu_id = 3 }, { pid = "<0.181.0>", port = "#Port<0.3622>", driver = "efile" }
driver_ready_async: { cpu_id = 3 }, { pid = "<0.181.0>", port = "#Port<0.3622>", driver = "efile" }
driver_call
Example:
-driver_call: { cpu_id = 2 }, { pid = "<0.202.0>", port = "#Port<0.3676>", driver = "caller_drv", command = 0, bytes = 2 }
driver_call: { cpu_id = 2 }, { pid = "<0.202.0>", port = "#Port<0.3676>", driver = "caller_drv", command = 0, bytes = 2 }
driver_control
Example:
-driver_control: { cpu_id = 3 }, { pid = "<0.32767.8191>", port = "#Port<0.0>", driver = "forker", command = 83, bytes = 32 }
driver_control: { cpu_id = 3 }, { pid = "<0.32767.8191>", port = "#Port<0.0>", driver = "forker", command = 83, bytes = 32 }
aio_pool_get
Example:
-aio_pool_get: { cpu_id = 4 }, { port = "#Port<0.3614>", length = 0 }
aio_pool_get: { cpu_id = 4 }, { port = "#Port<0.3614>", length = 0 }
aio_pool_put
Async queue length is not defined for
Example:
-aio_pool_put: { cpu_id = 3 }, { port = "#Port<0.3614>", length = -1 }
aio_pool_put: { cpu_id = 3 }, { port = "#Port<0.3614>", length = -1 }
carrier_create
Example:
-carrier_create: { cpu_id = 2 }, { type = "ets_alloc", instance = 7, size = 2097152, mbc_carriers = 4, mbc_carriers_size = 3440640, mbc_blocks = 526, mbc_blocks_size = 1278576, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }
carrier_create: { cpu_id = 2 }, { type = "ets_alloc", instance = 7, size = 2097152, mbc_carriers = 4, mbc_carriers_size = 3440640, mbc_blocks = 526, mbc_blocks_size = 1278576, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }
carrier_destroy
Example:
-carrier_destroy: { cpu_id = 6 }, { type = "ets_alloc", instance = 7, size = 262144, mbc_carriers = 3, mbc_carriers_size = 3178496, mbc_blocks = 925, mbc_blocks_size = 2305336, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }
carrier_destroy: { cpu_id = 6 }, { type = "ets_alloc", instance = 7, size = 262144, mbc_carriers = 3, mbc_carriers_size = 3178496, mbc_blocks = 925, mbc_blocks_size = 2305336, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }
carrier_pool_put
Example:
-carrier_pool_put: { cpu_id = 3 }, { type = "ets_alloc", instance = 5, size = 1048576 }
carrier_pool_put: { cpu_id = 3 }, { type = "ets_alloc", instance = 5, size = 1048576 }
carrier_pool_get
Example:
-carrier_pool_get: { cpu_id = 7 }, { type = "ets_alloc", instance = 4, size = 3208 }
carrier_pool_get: { cpu_id = 7 }, { type = "ets_alloc", instance = 4, size = 3208 }
-
This function associates a match specification with trace event
+
For a description of the
For
For
All nodes added with
The return value is the same as for
+
This function clears match specifications for the specified
+ trace event (
The return value follow the same style as for
+
This module implements a text based interface to the
-
@@ -185,7 +185,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
When enabling an
This is the same as
The list can also include any of the flags allowed in
-
The function returns either an error tuple or a tuple
The Module, Function and/or Arity parts of the tuple may
be specified as the atom
All nodes added with
All nodes added with
The function returns either an error tuple or a tuple
There may be a tuple
If an error is returned, it can be due to errors in
compilation of the match specification. Such errors are
presented as a list of tuples This function works as This function works as
This function disables call tracing on the specified
functions. The semantics of the parameter is the same
as for the corresponding function specification in
-
The return value reflects how many functions that matched,
- and is constructed as described in
This function works as
This function works as
This function works as
This function works as
Use this function to recall all match specifications previously
used in the session (i. e. previously saved during calls
- to
Match specifications used can be saved in a file (if a
read-write file system is present) for use in later
- debugging sessions, see
There are three built-in trace patterns:
Use this function to "forget" all match specifications
- saved during calls to
Use this function to "forget" a specific match specification
- saved during calls to
This function will save all match specifications saved
- during the session (during calls to
Each match spec in the file ends with a full stop
(
This function reads match specifications from a file
- (possibly) generated by the
The match specifications in the file are merged
with the current match specifications, so that no duplicates
- are generated. Use
The function will return an error, either due to I/O
problems (like a non existing or non readable file) or due
@@ -670,9 +676,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
The If The function will also return an error if the node
Clears a node from the list of traced nodes. Subsequent
- calls to
Returns
This function starts a server on the local node that will
be the recipient of all trace messages. All subsequent calls
- to
A trace server started in this way will simply display the
trace messages in a formatted way in the Erlang shell
- (i. e. use io:format). See
To start a similar tracer on a remote node, use
To start a similar tracer on a remote node, use
If
If
if
If an error is returned, it can either be due to a tracer
@@ -787,7 +794,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
due to the
To start a similar tracer on a remote node, use
-
This function is equivalent to
This function is equivalent to
This function is not equivalent to
This function is not equivalent to
For details, see
For details, see
This function starts a trace client that reads the output
created by a trace port driver and handles it in mostly the
- same way as a tracer process created by the
If
If
If This function works exactly as This function works exactly as This function shuts down a previously started trace
client. The
+ Available through
+
Example:
process_spawn: { cpu_id = 3 }, { pid = "<0.131.0>", parent = "<0.130.0>", entry = "erlang:apply/2" }
@@ -84,6 +88,10 @@ $ make
+ Available through
+
Example:
process_link: { cpu_id = 3 }, { from = "<0.130.0>", to = "<0.131.0>", type = "link" }
@@ -93,6 +101,10 @@ $ make
+ Available through
+
Example:
process_exit: { cpu_id = 3 }, { pid = "<0.130.0>", reason = "normal" }
@@ -111,7 +123,10 @@ $ make
+ Available through
+
Example:
process_scheduled: { cpu_id = 0 }, { pid = "<0.136.0>", entry = "erlang:apply/2", type = "in" }
@@ -122,7 +137,10 @@ $ make
+ Available through
+
Example:
port_open: { cpu_id = 5 }, { pid = "<0.131.0>", driver = "'/bin/sh -s unix:cmd'", port = "#Port<0.1887>" }
@@ -131,6 +149,10 @@ $ make
+ Available through
+
Example:
port_exit: { cpu_id = 5 }, { port = "#Port<0.1887>", reason = "normal" }
@@ -140,10 +162,18 @@ $ make
+ Available through
+
Example:
port_link: { cpu_id = 5 }, { from = "#Port<0.1887>", to = "<0.131.0>", type = "unlink" }
port_scheduled
+
+ Available through
+
Example:
port_scheduled: { cpu_id = 5 }, { pid = "#Port<0.1905>", entry = "close", type = "out" }
-
+
+ Available through
+
function_call
+ Available through
+
Example:
function_call: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }
@@ -168,6 +205,10 @@ $ make
+ Available through
+
Example:
function_return: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }
@@ -177,6 +218,10 @@ $ make
+ Available through
+
Example:
function_exception: { cpu_id = 5 }, { pid = "<0.144.0>", entry = "t:call_exc/1", class = "error" }
@@ -186,6 +231,10 @@ $ make
+ Available through
+
Example:
message_send: { cpu_id = 3 }, { from = "#Port<0.1938>", to = "<0.160.0>", message = "{#Port<0.1938>,eof}" }
@@ -194,6 +243,10 @@ $ make
+ Available through
+
Example:
message_receive: { cpu_id = 7 }, { to = "<0.167.0>", message = "{<0.165.0>,ok}" }
@@ -204,6 +257,10 @@ $ make
+ Available through
+
Example:
gc_minor_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 0, heap = 610, old_heap = 0 }
@@ -214,6 +271,10 @@ $ make
+ Available through
+
Example:
gc_minor_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 120, heap = 1598, old_heap = 1598 }
@@ -224,6 +285,10 @@ $ make
+ Available through
+
Example:
gc_major_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 8, heap = 2586, old_heap = 1598 }
@@ -234,6 +299,10 @@ $ make
+ Available through
+
Example:
gc_major_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 240, heap = 4185, old_heap = 0 }
@@ -454,6 +523,73 @@ $ make
An example of process tracing of
Clean start of lttng in a bash shell.
+ +$ lttng create erlang-demo +Spawning a session daemon +Session erlang-demo created. +Traces will be written in /home/egil/lttng-traces/erlang-demo-20160526-165920+ +
Start an Erlang node with lttng enabled.
+ +$ erl +Erlang/OTP 19 [erts-8.0] [source-4d7b24d] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [lttng] + +Eshell V8.0 (abort with ^G) +1>+ +
Load the
1> l(dyntrace). +{module,dyntrace}+ +
All tracepoints via dyntrace are now visibile and can be listed through
Enable the process_register LTTng tracepoint for Erlang.
+ +$ lttng enable-event -u com_ericsson_dyntrace:process_register +UST event com_ericsson_dyntrace:process_register created in channel channel0+ +
Enable process tracing for new processes and use
2> erlang:trace(new,true,[procs,{tracer,dyntrace,[]}]). +0+ +
Start LTTng tracing.
+ +$ lttng start +Tracing started for session erlang-demo+ +
Start the
3> application:ensure_all_started(os_mon). +{ok,[sasl,os_mon]}+ +
Stop LTTng tracing and view the result.
+ +$ lttng stop +Tracing stopped for session erlang-demo +$ lttng view +[17:20:42.561168759] (+?.?????????) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.66.0>", name = "sasl_sup", type = "register" } +[17:20:42.561215519] (+0.000046760) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.67.0>", name = "sasl_safe_sup", type = "register" } +[17:20:42.562149024] (+0.000933505) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.68.0>", name = "alarm_handler", type = "register" } +[17:20:42.571035803] (+0.008886779) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.69.0>", name = "release_handler", type = "register" } +[17:20:42.574939868] (+0.003904065) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.74.0>", name = "os_mon_sup", type = "register" } +[17:20:42.576818712] (+0.001878844) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.75.0>", name = "disksup", type = "register" } +[17:20:42.580032013] (+0.003213301) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.76.0>", name = "memsup", type = "register" } +[17:20:42.583046339] (+0.003014326) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.78.0>", name = "cpu_sup", type = "register" } +[17:20:42.586206242] (+0.003159903) elxd1168lx9 com_ericsson_dyntrace:process_register: \ + { cpu_id = 5 }, { pid = "<0.82.0>", name = "timer_server", type = "register" }
This document describes the changes made to the Runtime_Tools application.
++ Fix bug in dbg:trace_port/2 that could cause the trace ip + driver to produce faulty error reports "...(re)selected + before stop_select was called for driver trace_ip_drv".
++ Own Id: OTP-13576 Aux Id: ERL-119
++ Add microstate accounting
++ Microstate accounting is a way to track which state the + different threads within ERTS are in. The main usage area + is to pin point performance bottlenecks by checking which + states the threads are in and then from there figuring + out why and where to optimize.
++ Since checking whether microstate accounting is on or off + is relatively expensive only a few of the states are + enabled by default and more states can be enabled through + configure.
++ There is a convinence module called msacc that has been + added to runtime_tools that can assist in gathering and + interpreting the data from Microstate accounting.
+
+ For more information see
+ Own Id: OTP-12345
++ Update observer GUI to support tracing on ports, and to + set matchspecs for send/receive. This required some minor + bugfixes in runtime_tools/dbg.
++ Own Id: OTP-13481
++ Update dbg and ttb to work with a tracer module as tracer + and tracing on ports.
++ Own Id: OTP-13500
+
+ Updated dbg to accept the new trace options
+
+ Own Id: OTP-13502
++ Introduce LTTng tracing via Erlang tracing.
+
+ For LTTng to be enabled OTP needs to be built with
+ configure option
The dynamic trace module
This feature also introduces an incompatible change in
+ trace tags. The trace tags
+ *** POTENTIAL INCOMPATIBILITY ***
++ Own Id: OTP-13532
+This document describes the changes made to the Runtime_Tools application.
-- Fix bug in dbg:trace_port/2 that could cause the trace ip - driver to produce faulty error reports "...(re)selected - before stop_select was called for driver trace_ip_drv".
-- Own Id: OTP-13576 Aux Id: ERL-119
-- Add microstate accounting
-- Microstate accounting is a way to track which state the - different threads within ERTS are in. The main usage area - is to pin point performance bottlenecks by checking which - states the threads are in and then from there figuring - out why and where to optimize.
-- Since checking whether microstate accounting is on or off - is relatively expensive only a few of the states are - enabled by default and more states can be enabled through - configure.
-- There is a convinence module called msacc that has been - added to runtime_tools that can assist in gathering and - interpreting the data from Microstate accounting.
-
- For more information see
- Own Id: OTP-12345
-- Update observer GUI to support tracing on ports, and to - set matchspecs for send/receive. This required some minor - bugfixes in runtime_tools/dbg.
-- Own Id: OTP-13481
-- Update dbg and ttb to work with a tracer module as tracer - and tracing on ports.
-- Own Id: OTP-13500
-
- Updated dbg to accept the new trace options
-
- Own Id: OTP-13502
-- Introduce LTTng tracing via Erlang tracing.
-
- For LTTng to be enabled OTP needs to be built with
- configure option
The dynamic trace module
This feature also introduces an incompatible change in
- trace tags. The trace tags
- *** POTENTIAL INCOMPATIBILITY ***
-- Own Id: OTP-13532
-All tracepoints are in the domain of
All tracepoints are in the domain of
All Erlang types are the string equivalent in LTTng.
scheduler_poll
-- cgit v1.2.3 From 14da65f27d5eb714630dfdc0086d50a6a44bac1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?=All tracepoints are in the domain of
All tracepoints are in the domain of
All Erlang types are the string equivalent in LTTng.
process_spawn
@@ -550,8 +550,8 @@ Eshell V8.0 (abort with ^G)Enable the process_register LTTng tracepoint for Erlang.
-$ lttng enable-event -u com_ericsson_dyntrace:process_register -UST event com_ericsson_dyntrace:process_register created in channel channel0+
$ lttng enable-event -u org_erlang_dyntrace:process_register +UST event org_erlang_dyntrace:process_register created in channel channel0
Enable process tracing for new processes and use
$ lttng stop Tracing stopped for session erlang-demo $ lttng view -[17:20:42.561168759] (+?.?????????) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.561168759] (+?.?????????) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.66.0>", name = "sasl_sup", type = "register" } -[17:20:42.561215519] (+0.000046760) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.561215519] (+0.000046760) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.67.0>", name = "sasl_safe_sup", type = "register" } -[17:20:42.562149024] (+0.000933505) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.562149024] (+0.000933505) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.68.0>", name = "alarm_handler", type = "register" } -[17:20:42.571035803] (+0.008886779) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.571035803] (+0.008886779) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.69.0>", name = "release_handler", type = "register" } -[17:20:42.574939868] (+0.003904065) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.574939868] (+0.003904065) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.74.0>", name = "os_mon_sup", type = "register" } -[17:20:42.576818712] (+0.001878844) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.576818712] (+0.001878844) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.75.0>", name = "disksup", type = "register" } -[17:20:42.580032013] (+0.003213301) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.580032013] (+0.003213301) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.76.0>", name = "memsup", type = "register" } -[17:20:42.583046339] (+0.003014326) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.583046339] (+0.003014326) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.78.0>", name = "cpu_sup", type = "register" } -[17:20:42.586206242] (+0.003159903) elxd1168lx9 com_ericsson_dyntrace:process_register: \ +[17:20:42.586206242] (+0.003159903) elxd1168lx9 org_erlang_dyntrace:process_register: \ { cpu_id = 5 }, { pid = "<0.82.0>", name = "timer_server", type = "register" }
This document describes the changes made to the Runtime_Tools application.
++ Fix bug in dbg:trace_port/2 that could cause the trace ip + driver to produce faulty error reports "...(re)selected + before stop_select was called for driver trace_ip_drv".
++ Own Id: OTP-13576 Aux Id: ERL-119
++ Add microstate accounting
++ Microstate accounting is a way to track which state the + different threads within ERTS are in. The main usage area + is to pin point performance bottlenecks by checking which + states the threads are in and then from there figuring + out why and where to optimize.
++ Since checking whether microstate accounting is on or off + is relatively expensive only a few of the states are + enabled by default and more states can be enabled through + configure.
++ There is a convenience module called msacc that has been + added to runtime_tools that can assist in gathering and + interpreting the data from Microstate accounting.
+
+ For more information see
+ Own Id: OTP-12345
++ Update observer GUI to support tracing on ports, and to + set matchspecs for send/receive. This required some minor + bugfixes in runtime_tools/dbg.
++ Own Id: OTP-13481
++ Update dbg and ttb to work with a tracer module as tracer + and tracing on ports.
++ Own Id: OTP-13500
+
+ Updated dbg to accept the new trace options
+
+ Own Id: OTP-13502
++ Introduce LTTng tracing via Erlang tracing.
+
+ For LTTng to be enabled OTP needs to be built with
+ configure option
The dynamic trace module
This feature also introduces an incompatible change in
+ trace tags. The trace tags
+ *** POTENTIAL INCOMPATIBILITY ***
++ Own Id: OTP-13532
+