From ac1a648ff518e0aa92cb14773b617829081a75d0 Mon Sep 17 00:00:00 2001 From: Siri Hansen Date: Wed, 14 Sep 2016 18:19:16 +0200 Subject: [ttb] Add option queue_size to tracer/2 This sets the maximum queue size for the IP trace driver which is used when tracing to shell and/or {local,File}. Also, change the default queue size set by dbg:trace_port/2 to 200. --- lib/observer/doc/src/ttb.xml | 16 +++++++++++++++- lib/observer/src/ttb.erl | 9 ++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) (limited to 'lib/observer') diff --git a/lib/observer/doc/src/ttb.xml b/lib/observer/doc/src/ttb.xml index 42b0fa1d8a..7cd15e15d3 100644 --- a/lib/observer/doc/src/ttb.xml +++ b/lib/observer/doc/src/ttb.xml @@ -114,7 +114,8 @@ ttb:p(all, call). Opt = {file,Client} | {handler, FormatHandler} | {process_info,PI} | shell | {shell, ShellSpec} | {timer, TimerSpec} | {overload_check, {MSec, Module, Function}} | - {flush, MSec} | resume | {resume, FetchTimeout} + {flush, MSec} | resume | {resume, FetchTimeout} | + {queue_size, QueueSize} TimerSpec = MSec | {MSec, StopOpts} MSec = FetchTimeout = integer() Module = Function = atom() @@ -126,6 +127,7 @@ ttb:p(all, call). FormatHandler = See format/2 PI = true | false ShellSpec = true | false | only + QueueSize = non_neg_integer()

Starts a file trace port on all specified nodes @@ -147,6 +149,18 @@ ttb:p(all, call). Client must be {local, File}. All trace information is then sent to the trace control node where it is written to file.

+ queue_size +

When tracing to shell or {local,File}, an ip + trace driver is used internally. The ip trace driver has a + queue of maximum QueueSize messages waiting to be + delivered. If the driver cannot deliver messages as fast as + they are produced, the queue size might be exceeded and + messages are dropped. This parameter is optional, and is + only useful if many {drop,N} trace messages are + received by the trace handler. It has no meaning if shell + or {local,File} is not used. See + dbg:trace_port/2 + for more information about the ip trace driver.

process_info

Indicates if process information is to be collected. If PI = true (which is diff --git a/lib/observer/src/ttb.erl b/lib/observer/src/ttb.erl index ac6c4572eb..87a50e046b 100644 --- a/lib/observer/src/ttb.erl +++ b/lib/observer/src/ttb.erl @@ -78,6 +78,11 @@ do_tracer(Nodes0,PI,Client,Traci) -> do_tracer(Clients,PI,Traci) -> Shell = proplists:get_value(shell, Traci, false), + IpPortSpec = + case proplists:get_value(queue_size, Traci) of + undefined -> 0; + QS -> {0,QS} + end, DefShell = fun(Trace) -> dbg:dhandler(Trace, standard_io) end, {ClientSucc,Succ} = lists:foldl( @@ -98,7 +103,7 @@ do_tracer(Clients,PI,Traci) -> [_,H] = string:tokens(atom_to_list(N),"@"), H end, - case catch dbg:tracer(N,port,dbg:trace_port(ip,0)) of + case catch dbg:tracer(N,port,dbg:trace_port(ip,IpPortSpec)) of {ok,N} -> {ok,Port} = dbg:trace_port_control(N,get_listen_port), {ok,T} = dbg:get_tracer(N), @@ -160,6 +165,8 @@ opt([{resume,MSec}|O],{PI,Client,Traci}) -> opt(O,{PI,Client,[{resume, {true, MSec}}|Traci]}); opt([{flush,MSec}|O],{PI,Client,Traci}) -> opt(O,{PI,Client,[{flush, MSec}|Traci]}); +opt([{queue_size,QueueSize}|O],{PI,Client,Traci}) -> + opt(O,{PI,Client,[{queue_size,QueueSize}|Traci]}); opt([],Opt) -> ensure_opt(Opt). -- cgit v1.2.3