diff options
Diffstat (limited to 'lib/runtime_tools')
-rw-r--r-- | lib/runtime_tools/Makefile | 2 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/LTTng.xml | 61 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/Makefile | 77 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/dbg.xml | 158 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/dyntrace.xml | 34 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/erts_alloc_config.xml | 42 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/msacc.xml | 44 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/notes.xml | 78 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/scheduler.xml | 42 | ||||
-rw-r--r-- | lib/runtime_tools/doc/src/system_information.xml | 12 | ||||
-rw-r--r-- | lib/runtime_tools/examples/function-calls.d | 46 | ||||
-rw-r--r-- | lib/runtime_tools/examples/function-calls.systemtap | 46 | ||||
-rw-r--r-- | lib/runtime_tools/src/appmon_info.erl | 6 | ||||
-rw-r--r-- | lib/runtime_tools/src/erts_alloc_config.erl | 25 | ||||
-rw-r--r-- | lib/runtime_tools/src/observer_backend.erl | 23 | ||||
-rw-r--r-- | lib/runtime_tools/src/runtime_tools.app.src | 4 | ||||
-rw-r--r-- | lib/runtime_tools/test/erts_alloc_config_SUITE.erl | 16 | ||||
-rw-r--r-- | lib/runtime_tools/vsn.mk | 2 |
18 files changed, 420 insertions, 298 deletions
diff --git a/lib/runtime_tools/Makefile b/lib/runtime_tools/Makefile index eec1ff379b..4b0f1633ab 100644 --- a/lib/runtime_tools/Makefile +++ b/lib/runtime_tools/Makefile @@ -36,4 +36,6 @@ SPECIAL_TARGETS = # include $(ERL_TOP)/make/otp_subdir.mk +DIA_PLT_APPS=mnesia +include $(ERL_TOP)/make/app_targets.mk diff --git a/lib/runtime_tools/doc/src/LTTng.xml b/lib/runtime_tools/doc/src/LTTng.xml index 89cbc805d8..c12de0c6e9 100644 --- a/lib/runtime_tools/doc/src/LTTng.xml +++ b/lib/runtime_tools/doc/src/LTTng.xml @@ -77,7 +77,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">process_spawn: { cpu_id = 3 }, { pid = "<0.131.0>", parent = "<0.130.0>", entry = "erlang:apply/2" }</code> @@ -90,7 +90,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">process_link: { cpu_id = 3 }, { from = "<0.130.0>", to = "<0.131.0>", type = "link" }</code> @@ -103,7 +103,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">process_exit: { cpu_id = 3 }, { pid = "<0.130.0>", reason = "normal" }</code> @@ -125,7 +125,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">process_scheduled: { cpu_id = 0 }, { pid = "<0.136.0>", entry = "erlang:apply/2", type = "in" }</code> @@ -139,7 +139,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">port_open: { cpu_id = 5 }, { pid = "<0.131.0>", driver = "'/bin/sh -s unix:cmd'", port = "#Port<0.1887>" }</code> @@ -151,7 +151,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">port_exit: { cpu_id = 5 }, { port = "#Port<0.1887>", reason = "normal" }</code> @@ -164,7 +164,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">port_link: { cpu_id = 5 }, { from = "#Port<0.1887>", to = "<0.131.0>", type = "unlink" }</code> @@ -172,7 +172,7 @@ $ make </code> <p><em>port_scheduled</em></p> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <list type="bulleted"> <item><c>port : string</c> :: Port ID. Ex. <c>"#Port<0.1031>"</c></item> @@ -184,7 +184,7 @@ $ make </code> <code type="none">port_scheduled: { cpu_id = 5 }, { pid = "#Port<0.1905>", entry = "close", type = "out" }</code> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p><em>function_call</em></p> <list type="bulleted"> @@ -194,7 +194,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">function_call: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }</code> @@ -207,7 +207,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> or <c>return_to</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>call</c> or <c>return_to</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">function_return: { cpu_id = 5 }, { pid = "<0.145.0>", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }</code> @@ -220,7 +220,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">function_exception: { cpu_id = 5 }, { pid = "<0.144.0>", entry = "t:call_exc/1", class = "error" }</code> @@ -233,7 +233,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>send</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>send</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">message_send: { cpu_id = 3 }, { from = "#Port<0.1938>", to = "<0.160.0>", message = "{#Port<0.1938>,eof}" }</code> @@ -245,7 +245,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>'receive'</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>'receive'</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">message_receive: { cpu_id = 7 }, { to = "<0.167.0>", message = "{<0.165.0>,ok}" }</code> @@ -259,7 +259,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">gc_minor_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 0, heap = 610, old_heap = 0 }</code> @@ -273,7 +273,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">gc_minor_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 120, heap = 1598, old_heap = 1598 }</code> @@ -287,7 +287,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">gc_major_start: { cpu_id = 0 }, { pid = "<0.172.0>", need = 8, heap = 2586, old_heap = 1598 }</code> @@ -301,7 +301,7 @@ $ make </code> </list> <p> Available through - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module. </p> <p>Example:</p> <code type="none">gc_major_end: { cpu_id = 0 }, { pid = "<0.172.0>", reclaimed = 240, heap = 4185, old_heap = 0 }</code> @@ -313,14 +313,6 @@ $ make </code> <p>All tracepoints are in the domain of <c>org_erlang_otp</c></p> <p>All Erlang types are the string equivalent in LTTng.</p> - <p><em>scheduler_poll</em></p> - <list type="bulleted"> - <item><c>scheduler : integer</c> :: Scheduler ID. Ex. <c>1</c></item> - <item><c>runnable : integer</c> :: Runnable. Ex. <c>1</c></item> - </list> - <p>Example:</p> - <code type="none">scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }</code> - <p><em>driver_init</em></p> <list type="bulleted"> <item><c>driver : string</c> :: Driver name. Ex. <c>"tcp_inet"</c></item> @@ -450,23 +442,6 @@ $ make </code> <p>Example:</p> <code type="none">driver_control: { cpu_id = 3 }, { pid = "<0.32767.8191>", port = "#Port<0.0>", driver = "forker", command = 83, bytes = 32 }</code> - <p><em>aio_pool_get</em></p> - <list type="bulleted"> - <item><c>port : string</c> :: Port ID. Ex. <c>"#Port<0.1031>"</c></item> - <item><c>length : integer</c> :: Async queue length. Ex. <c>0</c></item> - </list> - <p>Example:</p> - <code type="none">aio_pool_get: { cpu_id = 4 }, { port = "#Port<0.3614>", length = 0 }</code> - - <p><em>aio_pool_put</em></p> - <list type="bulleted"> - <item><c>port : string</c> :: Port ID. Ex. <c>"#Port<0.1031>"</c></item> - <item><c>length : integer</c> :: Async queue length. Ex. <c>-1</c></item> - </list> - <p>Async queue length is not defined for <c>put</c> operations.</p> - <p>Example:</p> - <code type="none">aio_pool_put: { cpu_id = 3 }, { port = "#Port<0.3614>", length = -1 }</code> - <p><em>carrier_create</em></p> <list type="bulleted"> <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item> diff --git a/lib/runtime_tools/doc/src/Makefile b/lib/runtime_tools/doc/src/Makefile index 2399ed51e0..53c3cc9d26 100644 --- a/lib/runtime_tools/doc/src/Makefile +++ b/lib/runtime_tools/doc/src/Makefile @@ -33,11 +33,6 @@ VSN=$(RUNTIME_TOOLS_VSN) APPLICATION=runtime_tools # ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) - -# ---------------------------------------------------- # Target Specs # ---------------------------------------------------- XML_APPLICATION_FILES = ref_man.xml @@ -64,83 +59,17 @@ XML_FILES = \ XML_GEN_FILES = $(GENERATED_XML_FILES:%=$(XMLDIR)/%) -GIF_FILES = - -# ---------------------------------------------------- - -HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \ - $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) - -INFO_FILE = ../../info - -MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) -MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6) - -HTML_REF_MAN_FILE = $(HTMLDIR)/index.html - -TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf - -SPECS_FILES = $(XML_REF3_FILES:%.xml=$(SPECDIR)/specs_%.xml) +IMAGE_FILES = TOP_SPECS_FILE = specs.xml # ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -XML_FLAGS += -DVIPS_FLAGS += - -SPECS_ESRC = ../../src - -SPECS_FLAGS = -I../../include -I../../../kernel/src - -# ---------------------------------------------------- # Targets # ---------------------------------------------------- $(XMLDIR)/%.xml: $(ERL_TOP)/HOWTO/%.md $(ERL_TOP)/make/emd2exml $(ERL_TOP)/make/emd2exml $< $@ -$(HTMLDIR)/%.gif: %.gif - $(INSTALL_DATA) $< $@ - -docs: pdf html man - -$(TOP_PDF_FILE): $(XML_FILES) - -pdf: $(TOP_PDF_FILE) - -html: gifs $(HTML_REF_MAN_FILE) - -man: $(MAN3_FILES) $(MAN6_FILES) - -gifs: $(GIF_FILES:%=$(HTMLDIR)/%) - -debug opt: - -clean clean_docs: - rm -rf $(HTMLDIR)/* - rm -rf $(XMLDIR) - rm -f $(MAN3DIR)/* - rm -f $(MAN6DIR)/* - rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) - rm -f errs core *~ - -# ---------------------------------------------------- -# Release Target # ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_docs_spec: docs - $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DIR) "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(HTMLDIR)/* \ - "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)" - $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3" - $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3" - $(INSTALL_DIR) "$(RELEASE_PATH)/man/man6" - $(INSTALL_DATA) $(MAN6_FILES) "$(RELEASE_PATH)/man/man6" - -release_spec: + +include $(ERL_TOP)/make/doc.mk diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml index e15fc3efe6..168e89b7f0 100644 --- a/lib/runtime_tools/doc/src/dbg.xml +++ b/lib/runtime_tools/doc/src/dbg.xml @@ -36,8 +36,8 @@ <modulesummary>The Text Based Trace Facility</modulesummary> <description> <p>This module implements a text based interface to the - <seealso marker="erts:erlang#trace-3"><c>trace/3</c></seealso> and the - <seealso marker="erts:erlang#trace_pattern-2"><c>trace_pattern/2</c></seealso> BIFs. It makes it + <seemfa marker="erts:erlang#trace/3"><c>trace/3</c></seemfa> and the + <seemfa marker="erts:erlang#trace_pattern/2"><c>trace_pattern/2</c></seemfa> BIFs. It makes it possible to trace functions, processes, ports and messages. </p> <p> @@ -58,12 +58,12 @@ </pre> <p> For more examples of how to use <c>dbg</c> from the Erlang - shell, see the <seealso marker="#simple_example">simple example</seealso> section. + shell, see the <seeerl marker="#simple_example">simple example</seeerl> section. </p> <p>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 - is also included, see the <seealso marker="#advanced">advanced topics</seealso> section. + is also included, see the <seeerl marker="#advanced">advanced topics</seeerl> section. </p> </description> <funcs> @@ -76,10 +76,10 @@ </type> <desc> <p>Pseudo function that by means of a <c>parse_transform</c> - translates the <em>literal</em><c>fun()</c> typed as parameter in + translates the <em>literal</em> <c>fun()</c> typed as parameter in the function call to a match specification as described in the <c>match_spec</c> manual of ERTS users guide. - (with literal I mean that the <c>fun()</c> needs to + (With literal I mean that the <c>fun()</c> needs to textually be written as the parameter of the function, it cannot be held in a variable which in turn is passed to the function). </p> @@ -184,8 +184,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <tag><c>pid()</c> or <c>port()</c></tag> <item>The corresponding process or port is traced. The process or port may be a remote process or port (on another Erlang node). The node must - be in the list of traced nodes (see <seealso marker="#n-1"><c>n/1</c></seealso> - and <seealso marker="#tracer-3"><c>tracer/3</c></seealso>).</item> + be in the list of traced nodes (see <seemfa marker="#n/1"><c>n/1</c></seemfa> + and <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa>).</item> <tag><c>all</c></tag> <item>All processes and ports in the system as well as all processes and ports created hereafter are to be traced.</item> @@ -208,23 +208,23 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <tag><c>atom()</c></tag> <item>The process or port with the corresponding registered name is traced. The process or port may be a remote process (on another Erlang node). The node must be - added with the <seealso marker="#n-1"><c>n/1</c></seealso> or - <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</item> + added with the <seemfa marker="#n/1"><c>n/1</c></seemfa> or + <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> function.</item> <tag><c>integer()</c></tag> <item>The process <c><![CDATA[<0.Item.0>]]></c> is traced.</item> <tag><c>{X, Y, Z}</c></tag> <item>The process <c><![CDATA[<X.Y.Z>]]></c> is traced. </item> <tag><c>string()</c></tag> <item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]> - as returned from <seealso marker="erts:erlang#pid_to_list-1"><c>pid_to_list/1</c></seealso>, + as returned from <seemfa marker="erts:erlang#pid_to_list/1"><c>pid_to_list/1</c></seemfa>, the process <c><![CDATA[<X.Y.Z>]]></c> is traced. </item> </taglist> <p>When enabling an <c>Item</c> that represents a group of processes, the <c>Item</c> is enabled on all nodes added with the - <seealso marker="#n-1"><c>n/1</c></seealso> or - <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</p> + <seemfa marker="#n/1"><c>n/1</c></seemfa> or + <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> function.</p> <p><c>Flags</c> can be a single atom, or a list of flags. The available flags are: @@ -276,7 +276,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <item> <p>This is the same as <c>sol</c>, but only for the first call to - <seealso marker="erts:erlang#link-1"><c>link/1</c></seealso> by the traced process.</p> + <seemfa marker="erts:erlang#link/1"><c>link/1</c></seemfa> by the traced process.</p> </item> <tag><c>all</c></tag> <item> @@ -289,13 +289,13 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </item> </taglist> <p>The list can also include any of the flags allowed in - <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso></p> + <seemfa marker="erts:erlang#trace/3"><c>erlang:trace/3</c></seemfa></p> <p>The function returns either an error tuple or a tuple <c>{ok, List}</c>. The <c>List</c> consists of specifications of how many processes and ports that matched (in the case of a pure pid() exactly 1). The specification of matched processes is <c>{matched, Node, N}</c>. If the - remote processor call,<c>rpc</c>, to a remote node fails, + remote processor call, <c>rpc</c>, to a remote node fails, the <c>rpc</c> error message is delivered as a fourth argument and the number of matched processes are 0. Note that the result {ok, List} may contain a list where @@ -369,11 +369,11 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ please turn to the <em>User's guide</em> part of the online documentation for the runtime system (<em>erts</em>). The - chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso> + chapter <seeguide marker="erts:match_spec"><em>Match Specifications in Erlang</em></seeguide> explains the general match specification "language". The most common generic match specifications used can be found as <c>Built-inAlias</c>', see - <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details. + <seemfa marker="#ltp/0"><c>ltp/0</c></seemfa> below for details. </p> <p>The Module, Function and/or Arity parts of the tuple may be specified as the atom <c>'_'</c> which is a "wild-card" @@ -381,21 +381,21 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ Module is specified as <c>'_'</c>, the Function and Arity parts have to be specified as '_' too. The same holds for the Functions relation to the Arity.</p> - <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or - <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will + <p>All nodes added with <seemfa marker="#n/1"><c>n/1</c></seemfa> or + <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> will be affected by this call, and if Module is not <c>'_'</c> the module will be loaded on all nodes.</p> <p>The function returns either an error tuple or a tuple <c>{ok, List}</c>. The <c>List</c> consists of specifications of how many functions that matched, in the same way as the processes and ports - are presented in the return value of <seealso marker="#p-2"><c>p/2</c></seealso>. </p> + are presented in the return value of <seemfa marker="#p/2"><c>p/2</c></seemfa>. </p> <p>There may be a tuple <c>{saved, N}</c> in the return value, if the MatchSpec is other than []. The integer <c>N</c> may then be used in subsequent calls to this function and will stand as an "alias" for the given expression. There are also a couple of built-in aliases for common expressions, see - <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.</p> + <seemfa marker="#ltp/0"><c>ltp/0</c></seemfa> below for details.</p> <p>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 <c>{error, string()}</c> where @@ -434,7 +434,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <name since="">tpl({Module, Function, Arity}, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name> <fsummary>Set pattern for traced local (as well as global) function calls</fsummary> <desc> - <p>This function works as <seealso marker="#tp-2"><c>tp/2</c></seealso>, but enables + <p>This function works as <seemfa marker="#tp/2"><c>tp/2</c></seemfa>, but enables tracing for local calls (and local functions) as well as for global calls (and functions).</p> </desc> @@ -461,7 +461,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <p>For a description of the <c>match_spec()</c> syntax, please turn to the <em>User's guide</em> part of the online documentation for the runtime system (<em>erts</em>). The - chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso> + chapter <seeguide marker="erts:match_spec"><em>Match Specifications in Erlang</em></seeguide> explains the general match specification "language".</p> <p>For <c>send</c>, the matching is done on the list <c>[Receiver, Msg]</c>. <c>Receiver</c> is the process or port identity of the receiver and @@ -474,11 +474,11 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ be the case for remote senders). <c>Msg</c> is the message term. The pid of the receiving process can be accessed with the guard function <c>self/0</c>.</p> - <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or - <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will + <p>All nodes added with <seemfa marker="#n/1"><c>n/1</c></seemfa> or + <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> will be affected by this call.</p> <p>The return value is the same as for - <seealso marker="#tp-2"><c>tp/2</c></seealso>. The number of matched + <seemfa marker="#tp/2"><c>tp/2</c></seemfa>. The number of matched events are never larger than 1 as <c>tpe/2</c> does not accept any form of wildcards for argument <c>Event</c>.</p> </desc> @@ -525,10 +525,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <p>This function disables call tracing on the specified functions. The semantics of the parameter is the same as for the corresponding function specification in - <seealso marker="#tp-2"><c>tp/2</c></seealso> or <seealso marker="#tpl-2"><c>tpl/2</c></seealso>. Both local and global call trace + <seemfa marker="#tp/2"><c>tp/2</c></seemfa> or <seemfa marker="#tpl/2"><c>tpl/2</c></seemfa>. Both local and global call trace is disabled. </p> <p>The return value reflects how many functions that matched, - and is constructed as described in <seealso marker="#tp-2"><c>tp/2</c></seealso>. No tuple + and is constructed as described in <seemfa marker="#tp/2"><c>tp/2</c></seemfa>. No tuple <c>{saved, N}</c> is however ever returned (for obvious reasons).</p> </desc> </func> @@ -564,9 +564,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <name since="">ctpl({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name> <fsummary>Clear call trace pattern for the specified functions</fsummary> <desc> - <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables - tracing set up with <seealso marker="#tpl-2"><c>tpl/2</c></seealso> - (not with <seealso marker="#tp-2"><c>tp/2</c></seealso>).</p> + <p>This function works as <seemfa marker="#ctp/1"><c>ctp/1</c></seemfa>, but only disables + tracing set up with <seemfa marker="#tpl/2"><c>tpl/2</c></seemfa> + (not with <seemfa marker="#tp/2"><c>tp/2</c></seemfa>).</p> </desc> </func> <func> @@ -601,9 +601,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <name since="">ctpg({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name> <fsummary>Clear call trace pattern for the specified functions</fsummary> <desc> - <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables - tracing set up with <seealso marker="#tp-2"><c>tp/2</c></seealso> - (not with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>).</p> + <p>This function works as <seemfa marker="#ctp/1"><c>ctp/1</c></seemfa>, but only disables + tracing set up with <seemfa marker="#tp/2"><c>tp/2</c></seemfa> + (not with <seemfa marker="#tpl/2"><c>tpl/2</c></seemfa>).</p> </desc> </func> <func> @@ -619,7 +619,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ trace event (<c>send</c> or <c>'receive'</c>). It will revert back to the default behavior of tracing all triggered events.</p> <p>The return value follow the same style as for - <seealso marker="#ctp-1"><c>ctp/1</c></seealso>.</p> + <seemfa marker="#ctp/1"><c>ctp/1</c></seemfa>.</p> </desc> </func> <func> @@ -628,14 +628,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <desc> <p>Use this function to recall all match specifications previously used in the session (i. e. previously saved during calls - to <seealso marker="#tp-2"><c>tp/2</c></seealso>, and built-in match specifications. + to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>, and built-in match specifications. This is very useful, as a complicated match_spec can be quite awkward to write. Note that the - match specifications are lost if <seealso marker="#stop-0"><c>stop/0</c></seealso> is called.</p> + match specifications are lost if <seemfa marker="#stop/0"><c>stop/0</c></seemfa> is called.</p> <p>Match specifications used can be saved in a file (if a read-write file system is present) for use in later - debugging sessions, see <seealso marker="#wtp-1"><c>wtp/1</c></seealso> - and <seealso marker="#rtp-1"><c>rtp/1</c></seealso></p> + debugging sessions, see <seemfa marker="#wtp/1"><c>wtp/1</c></seemfa> + and <seemfa marker="#rtp/1"><c>rtp/1</c></seemfa></p> <p>There are three built-in trace patterns: <c>exception_trace</c>, <c>caller_trace</c> and <c>caller_exception_trace</c> (or <c>x</c>, <c>c</c> and @@ -658,10 +658,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <fsummary>Delete all saved match specifications.</fsummary> <desc> <p>Use this function to "forget" all match specifications - saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>. + saved during calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>. This is useful when one wants to restore other match - specifications from a file with <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. Use - <seealso marker="#dtp-1"><c>dtp/1</c></seealso> to delete specific saved match specifications.</p> + specifications from a file with <seemfa marker="#rtp/1"><c>rtp/1</c></seemfa>. Use + <seemfa marker="#dtp/1"><c>dtp/1</c></seemfa> to delete specific saved match specifications.</p> </desc> </func> <func> @@ -672,7 +672,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </type> <desc> <p>Use this function to "forget" a specific match specification - saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.</p> + saved during calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>.</p> </desc> </func> <func> @@ -684,12 +684,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </type> <desc> <p>This function will save all match specifications saved - during the session (during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>) + during the session (during calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa>) and built-in match specifications in a text file with the name designated by <c>Name</c>. The format of the file is textual, why it can be edited with an ordinary text editor, and then restored with - <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. </p> + <seemfa marker="#rtp/1"><c>rtp/1</c></seemfa>. </p> <p>Each match spec in the file ends with a full stop (<c>.</c>) and new (syntactically correct) match specifications can be added to the file manually.</p> @@ -707,7 +707,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </type> <desc> <p>This function reads match specifications from a file - (possibly) generated by the <seealso marker="#wtp-1"><c>wtp/1</c></seealso> + (possibly) generated by the <seemfa marker="#wtp/1"><c>wtp/1</c></seemfa> function. It checks the syntax of all match specifications and verifies that they are correct. The error handling principle is "all or @@ -716,7 +716,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ saved match specifications for the running system. </p> <p>The match specifications in the file are <em>merged</em> with the current match specifications, so that no duplicates - are generated. Use <seealso marker="#ltp-0"><c>ltp/0</c></seealso> + are generated. Use <seemfa marker="#ltp/0"><c>ltp/0</c></seemfa> to see what numbers were assigned to the specifications from the file.</p> <p>The function will return an error, either due to I/O @@ -736,9 +736,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </type> <desc> <p>The <c>dbg</c> server keeps a list of nodes where tracing - should be performed. Whenever a <seealso marker="#tp-2"><c>tp/2</c></seealso> call or a - <seealso marker="#p-2"><c>p/2</c></seealso> call is made, it is executed for all nodes in this - list including the local node (except for <seealso marker="#p-2"><c>p/2</c></seealso> with a + should be performed. Whenever a <seemfa marker="#tp/2"><c>tp/2</c></seemfa> call or a + <seemfa marker="#p/2"><c>p/2</c></seemfa> call is made, it is executed for all nodes in this + list including the local node (except for <seemfa marker="#p/2"><c>p/2</c></seemfa> with a specific <c>pid()</c> or <c>port()</c> as first argument, in which case the command is executed only on the node where the designated process or port resides). @@ -750,17 +750,17 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ distribution). If no tracer process is running on the local node, the error reason <c>no_local_tracer</c> is returned. The tracer process on the local node must be started with the - <seealso marker="#tracer-2"><c>tracer/0/2</c></seealso> function. + <seemfa marker="#tracer/2"><c>tracer/0/2</c></seemfa> function. </p> <p>If <c>Nodename</c> is the local node, the error reason <c>cant_add_local_node</c> is returned. </p> - <p>If a trace port (see <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>) is + <p>If a trace port (see <seemfa marker="#trace_port/2"><c>trace_port/2</c></seemfa>) is running on the local node, remote nodes cannot be traced with a tracer process. The error reason <c>cant_trace_remote_pid_to_local_port</c> is returned. A trace port can however be started on the remote node with the - <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function. + <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> function. </p> <p>The function will also return an error if the node <c>Nodename</c> is not reachable.</p> @@ -774,8 +774,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </type> <desc> <p>Clears a node from the list of traced nodes. Subsequent - calls to <seealso marker="#tp-2"><c>tp/2</c></seealso> and - <seealso marker="#p-2"><c>p/2</c></seealso> will not consider that + calls to <seemfa marker="#tp/2"><c>tp/2</c></seemfa> and + <seemfa marker="#p/2"><c>p/2</c></seemfa> will not consider that node, but tracing already activated on the node will continue to be in effect.</p> <p>Returns <c>ok</c>, cannot fail.</p> @@ -794,14 +794,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <desc> <p>This function starts a server on the local node that will be the recipient of all trace messages. All subsequent calls - to <seealso marker="#p-2"><c>p/2</c></seealso> will result in messages sent to the newly + to <seemfa marker="#p/2"><c>p/2</c></seemfa> will result in messages sent to the newly started trace server.</p> <p>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 <seealso marker="#tracer-2"><c>tracer/2</c></seealso> + (i. e. use io:format). See <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa> for a description of how the trace message handler can be customized. </p> - <p>To start a similar tracer on a remote node, use <seealso marker="#n-1"><c>n/1</c></seealso>.</p> + <p>To start a similar tracer on a remote node, use <seemfa marker="#n/1"><c>n/1</c></seemfa>.</p> </desc> </func> <func> @@ -825,9 +825,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ by a receiving process (<c>process</c>), by a tracer port (<c>port</c>) or by a tracer module (<c>module</c>). For a description about tracer ports see - <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso> + <seemfa marker="#trace_port/2"><c>trace_port/2</c></seemfa> and for a tracer modules see - <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>. + <seeerl marker="erts:erl_tracer"><c>erl_tracer</c></seeerl>. </p> <p>If <c>Type</c> is <c>process</c>, a message handler function can be specified (<c>HandlerSpec</c>). The handler function, which @@ -843,10 +843,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <p>If <c>Type</c> is <c>port</c>, then the second parameter should be a <em>fun</em> which takes no arguments and returns a newly opened trace port when called. Such a <em>fun</em> is - preferably generated by calling <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>. + preferably generated by calling <seemfa marker="#trace_port/2"><c>trace_port/2</c></seemfa>. </p> <p>if <c>Type</c> is <c>module</c>, then the second parameter should - be either a tuple describing the <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso> + be either a tuple describing the <seeerl marker="erts:erl_tracer"><c>erl_tracer</c></seeerl> module to be used for tracing and the state to be used for that tracer module or a fun returning the same tuple.</p> <p>If an error is returned, it can either be due to a tracer @@ -854,7 +854,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ due to the <c>HandlerFun</c> throwing an exception. </p> <p>To start a similar tracer on a remote node, use - <seealso marker="#tracer-3"><c>tracer/3</c></seealso>. + <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa>. </p> </desc> </func> @@ -865,19 +865,19 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <v>Nodename = atom()</v> </type> <desc> - <p>This function is equivalent to <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but acts on + <p>This function is equivalent to <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa>, but acts on the given node. A tracer is started on the node (<c>Nodename</c>) and the node is added to the list of traced nodes. </p> <note> - <p>This function is not equivalent to <seealso marker="#n-1"><c>n/1</c></seealso>. While - <seealso marker="#n-1"><c>n/1</c></seealso> starts a process tracer which redirects all trace + <p>This function is not equivalent to <seemfa marker="#n/1"><c>n/1</c></seemfa>. While + <seemfa marker="#n/1"><c>n/1</c></seemfa> starts a process tracer which redirects all trace information to a process tracer on the local node (i.e. the - trace control node), <seealso marker="#tracer-3"><c>tracer/3</c></seealso> starts a tracer of any + trace control node), <seemfa marker="#tracer/3"><c>tracer/3</c></seemfa> starts a tracer of any type which is independent of the tracer on the trace control node.</p> </note> - <p>For details, see <seealso marker="#tracer-2"><c>tracer/2</c></seealso>.</p> + <p>For details, see <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa>.</p> </desc> </func> <func> @@ -909,9 +909,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <c>file</c> and the <c>ip</c> trace drivers. The file driver sends all trace messages into one or several binary files, from where they later can be fetched and processed with the - <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> function. The ip driver opens a TCP/IP + <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa> function. The ip driver opens a TCP/IP port where it listens for connections. When a client - (preferably started by calling <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> on + (preferably started by calling <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa> on another Erlang node) connects, all trace messages are sent over the IP network for further processing by the remote client. </p> @@ -950,7 +950,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ as fast as they are produced by the runtime system, a special message is sent, which indicates how many messages that are dropped. That message will arrive at the handler function - specified in <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso> + specified in <seemfa marker="#trace_client/3"><c>trace_client/3</c></seemfa> as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages dropped. In case of heavy tracing, drop's are likely to occur, and they surely occur if no client is reading the trace @@ -1029,7 +1029,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <p>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 - <seealso marker="#tracer-0"><c>tracer/0</c></seealso> function.</p> + <seemfa marker="#tracer/0"><c>tracer/0</c></seemfa> function.</p> <p>If <c>Type</c> is <c>file</c>, the client reads all trace messages stored in the file named <c>Filename</c> or specified by <c>WrapFilesSpec</c> (must be the same as used @@ -1040,7 +1040,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ <p>If <c>Type</c> is <c>follow_file</c>, the client behaves as in the <c>file</c> case, but keeps trying to read (and process) more data - from the file until stopped by <seealso marker="#stop_trace_client-1"><c>stop_trace_client/1</c></seealso>. + from the file until stopped by <seemfa marker="#stop_trace_client/1"><c>stop_trace_client/1</c></seemfa>. <c>WrapFilesSpec</c> is not allowed as second argument for this <c>Type</c>.</p> <p>If <c>Type</c> is <c>ip</c>, the client connects to the @@ -1096,10 +1096,10 @@ hello</pre> <v>InitialData = term()</v> </type> <desc> - <p>This function works exactly as <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>, + <p>This function works exactly as <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa>, but allows you to write your own handler function. The handler function works mostly as the one described in - <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but will also have to be prepared to handle + <seemfa marker="#tracer/2"><c>tracer/2</c></seemfa>, but will also have to be prepared to handle trace messages of the form <c>{drop, N}</c>, where <c>N</c> is the number of dropped messages. This pseudo trace message will only occur if the ip trace driver is used.</p> @@ -1118,8 +1118,8 @@ hello</pre> <desc> <p>This function shuts down a previously started trace client. The <c>Pid</c> argument is the process id returned - from the <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> - or <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso> call.</p> + from the <seemfa marker="#trace_client/2"><c>trace_client/2</c></seemfa> + or <seemfa marker="#trace_client/3"><c>trace_client/3</c></seemfa> call.</p> </desc> </func> <func> @@ -1272,7 +1272,7 @@ SeqTrace [0]: (<0.30.0>) <0.25.0> ! {dbg,{ok,<0.31.0>}} [Serial: {4,5}] of causing a deadlock. This will happen if a group leader process generates a trace message and the tracer process, by calling the trace handler function, sends an IO request to the same group leader. The problem can only occur if the trace handler - prints to tty using an <c>io</c> function such as <seealso marker="stdlib:io#format-2"><c>format/2</c></seealso>. + prints to tty using an <c>io</c> function such as <seemfa marker="stdlib:io#format/2"><c>format/2</c></seemfa>. Note that when <c>dbg:p(all,call)</c> is called, IO processes are also traced. Here's an example:</p> diff --git a/lib/runtime_tools/doc/src/dyntrace.xml b/lib/runtime_tools/doc/src/dyntrace.xml index 4935dfcd71..85e9ed8899 100644 --- a/lib/runtime_tools/doc/src/dyntrace.xml +++ b/lib/runtime_tools/doc/src/dyntrace.xml @@ -43,7 +43,7 @@ </list> <p>Both building with dynamic trace probes and using them is experimental and unsupported by Erlang/OTP. It is included as an option for the developer to trace and debug performance issues in their systems.</p> <p>The original implementation is mostly done by Scott Lystiger Fritchie as an Open Source Contribution and it should be viewed as such even though the source for dynamic tracing as well as this module is included in the main distribution. However, the ability to use dynamic tracing of the virtual machine is a very valuable contribution which OTP has every intention to maintain as a tool for the developer.</p> - <p>How to write <c>d</c> programs or <c>systemtap</c> scripts can be learned from books and from a lot of pages on the Internet. This manual page does not include any documentation about using the dynamic trace tools of respective platform. The <c>examples</c> directory of the <c>runtime_tools</c> application however contains comprehensive examples of both <c>d</c> and <c>systemtap</c> programs that will help you get started. Another source of information is the <seealso marker="DTRACE">dtrace</seealso> and <seealso marker="SYSTEMTAP">systemtap</seealso> chapters in the Runtime Tools Users' Guide.</p> + <p>How to write <c>d</c> programs or <c>systemtap</c> scripts can be learned from books and from a lot of pages on the Internet. This manual page does not include any documentation about using the dynamic trace tools of respective platform. The <c>examples</c> directory of the <c>runtime_tools</c> application however contains comprehensive examples of both <c>d</c> and <c>systemtap</c> programs that will help you get started. Another source of information is the <seeguide marker="DTRACE">dtrace</seeguide> and <seeguide marker="SYSTEMTAP">systemtap</seeguide> chapters in the Runtime Tools Users' Guide.</p> </description> <funcs> <func> @@ -51,8 +51,8 @@ <fsummary>Check if dynamic tracing is available</fsummary> <desc> <p>This function uses the NIF library to determine if dynamic - tracing is available. Usually calling <seealso - marker="erts:erlang#system_info/1">erlang:system_info/1</seealso> + tracing is available. Usually calling <seemfa + marker="erts:erlang#system_info/1">erlang:system_info/1</seemfa> is a better indicator of the availability of dynamic tracing.</p> <p>The function will throw an exception if the <c>dyntrace</c> NIF library could not be loaded by the on_load function of this module.</p> @@ -83,21 +83,21 @@ <name since="OTP R15B01">p(integer() | string(), integer() | string(), integer() | string()) -> true | false | error | badarg</name> <fsummary>Trigger the user trace probe.</fsummary> <desc> - <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p> + <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p> </desc> </func> <func> <name since="OTP R15B01">p(integer() | string(), integer() | string(), integer() | string(), integer() | string()) -> true | false | error | badarg</name> <fsummary>Trigger the user trace probe.</fsummary> <desc> - <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p> + <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p> </desc> </func> <func> <name since="OTP R15B01">p(integer(), integer() | string(), integer() | string(), integer() | string(), string()) -> true | false | error | badarg</name> <fsummary>Trigger the user trace probe.</fsummary> <desc> - <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p> + <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p> <p>There can be no more than four parameters of any type (integer() or string()), so the first parameter has to be an integer() and the last a string().</p> </desc> </func> @@ -105,7 +105,7 @@ <name since="OTP R15B01">p(integer(), integer(), integer() | string(), integer() | string(), string(), string()) -> true | false | error | badarg</name> <fsummary>Trigger the user trace probe.</fsummary> <desc> - <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p> + <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p> <p>There can be no more than four parameters of any type (integer() or string()), so the first two parameters has to be integer()'s and the last two string()'s.</p> </desc> </func> @@ -113,7 +113,7 @@ <name since="OTP R15B01">p(integer(), integer(), integer(), integer() | string(), string(), string(), string()) -> true | false | error | badarg</name> <fsummary>Trigger the user trace probe.</fsummary> <desc> - <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seealso marker="#p/2">p/2</seealso>.</p> + <p>Calling this function will trigger the "user" trace probe user_trace_i4s4 in the dyntrace NIF module, sending a trace message containing the user tag and the integer() or string() parameters as the first fields of respective type. integer() parameters should be put before any string() parameters, as in <seemfa marker="#p/2">p/2</seemfa>.</p> <p>There can be no more than four parameters of any type (integer() or string()), so the first three parameters has to be integer()'s and the last three string()'s.</p> </desc> </func> @@ -140,11 +140,11 @@ <p>This function returns the user tag set in the current process or, if no user tag is present, the last user tag sent to the process together with a message (in the same way as - <seealso marker="kernel:seq_trace">sequential trace - tokens</seealso> are spread to other processes together with + <seeerl marker="kernel:seq_trace">sequential trace + tokens</seeerl> are spread to other processes together with messages. For an explanation of how user tags can be spread - together with messages, see <seealso - marker="#spread_tag/1">spread_tag/1</seealso>. If no tag is + together with messages, see <seemfa + marker="#spread_tag/1">spread_tag/1</seemfa>. If no tag is found or dynamic tracing is not available, it returns <c>undefined</c></p> </desc> @@ -166,13 +166,13 @@ <name since="OTP R15B01">spread_tag(boolean()) -> TagData</name> <fsummary>Start or stop spreading dynamic trace user tags with the next message.</fsummary> <type> - <v>TagData = opaque data that can be used as parameter to <seealso marker="#restore_tag/1">restore_tag/1</seealso></v> + <v>TagData = opaque data that can be used as parameter to <seemfa marker="#restore_tag/1">restore_tag/1</seemfa></v> </type> <desc> <p>This function controls if user tags are to be spread to other processes with the next message. Spreading of user tags work like spreading of sequential trace tokens, so that a received user tag will be active in the process until the next message arrives (if that message does not also contain the user tag.</p> <p>This functionality is used when a client process communicates with a file i/o-server to spread the user tag to the I/O-server and then down to the efile_drv driver. By using <c>spread_tag/1</c> and <c>restore_tag/1</c>, one can enable or disable spreading of user tags to other processes and then restore the previous state of the user tag. The TagData returned from this call contains all previous information so the state (including any previously spread user tags) will be completely restored by a later call to <c>restore_tag/1</c>.</p> - <p>The <seealso marker="kernel:file">file</seealso> module already spread's tags, so there is noo need to manually call these function to get user tags spread to the efile driver through that module.</p> - <p>The most use of this function would be if one for example uses the <seealso marker="stdlib:io">io</seealso> module to communicate with an I/O-server for a regular file, like in the following example:</p> + <p>The <seeerl marker="kernel:file">file</seeerl> module already spread's tags, so there is noo need to manually call these function to get user tags spread to the efile driver through that module.</p> + <p>The most use of this function would be if one for example uses the <seeerl marker="stdlib:io">io</seeerl> module to communicate with an I/O-server for a regular file, like in the following example:</p> <pre> f() -> {ok, F} = file:open("test.tst",[write]), @@ -188,10 +188,10 @@ f() -> <name since="OTP R15B01">restore_tag(TagData) -> true</name> <fsummary>Restore to a previous state of user tag spreading.</fsummary> <type> - <v>TagData = opaque data returned by <seealso marker="#spread_tag/1">spread_tag/1</seealso></v> + <v>TagData = opaque data returned by <seemfa marker="#spread_tag/1">spread_tag/1</seemfa></v> </type> <desc> - <p>Restores the previous state of user tags and their spreading as it was before a call to <seealso marker="#spread_tag/1">spread_tag/1</seealso>. Note that the restoring is not limited to the same process, one can utilize this to turn off spreding in one process and restore it in a newly created, the one that actually is going to send messages:</p> + <p>Restores the previous state of user tags and their spreading as it was before a call to <seemfa marker="#spread_tag/1">spread_tag/1</seemfa>. Note that the restoring is not limited to the same process, one can utilize this to turn off spreding in one process and restore it in a newly created, the one that actually is going to send messages:</p> <pre> f() -> TagData=dyntrace:spread_tag(false), diff --git a/lib/runtime_tools/doc/src/erts_alloc_config.xml b/lib/runtime_tools/doc/src/erts_alloc_config.xml index 5bcce1b5e3..f26721b9e9 100644 --- a/lib/runtime_tools/doc/src/erts_alloc_config.xml +++ b/lib/runtime_tools/doc/src/erts_alloc_config.xml @@ -37,10 +37,10 @@ tool and might be subject to backward incompatible changes.</p> </note> - <p><seealso marker="erts:erts_alloc">erts_alloc(3)</seealso> is an + <p><seecref marker="erts:erts_alloc">erts_alloc(3)</seecref> is an Erlang Run-Time System internal memory allocator library. <c>erts_alloc_config</c> is intended to be used to aid creation - of an <seealso marker="erts:erts_alloc">erts_alloc(3)</seealso> + of an <seecref marker="erts:erts_alloc">erts_alloc(3)</seecref> configuration that is suitable for a limited number of runtime scenarios. The configuration that <c>erts_alloc_config</c> produce is intended as a suggestion, and may need to be @@ -65,25 +65,25 @@ <p>A configuration is created in the following way:</p> <list type="bulleted"> <item> - <p>Pass the <seealso marker="erts:erts_alloc#Mea">+Mea config</seealso> + <p>Pass the <seecref marker="erts:erts_alloc#Mea">+Mea config</seecref> command-line flag to the Erlang runtime system you are going to use for creation of the allocator configuration. It will disable features that prevent <c>erts_alloc_config</c> from doing its job. Note, you should <em>not</em> use this flag when using the created configuration. Also note that it is important that you use the same - <seealso marker="erts:erl#+S">amount of schedulers</seealso> + <seecom marker="erts:erl#+S">amount of schedulers</seecom> when creating the configuration as you are going the use on the system using the configuration.</p> </item> <item> <p>Run your applications with different scenarios (the more the better) and save information about each scenario by calling - <seealso marker="#save_scenario/0">save_scenario/0</seealso>. + <seemfa marker="#save_scenario/0">save_scenario/0</seemfa>. It may be hard to know when the applications are at an (for <c>erts_alloc_config</c>) important runtime scenario. A good approach may therefore be to call - <seealso marker="#save_scenario/0">save_scenario/0</seealso> + <seemfa marker="#save_scenario/0">save_scenario/0</seemfa> repeatedly, e.g. once every tenth second. Note that it is important that your applications reach the runtime scenarios that are important for <c>erts_alloc_config</c> when you are @@ -92,13 +92,13 @@ </item> <item> <p>When you have covered all scenarios, call - <seealso marker="#make_config/1">make_config/1</seealso> + <seemfa marker="#make_config/1">make_config/1</seemfa> in order to create a configuration. The configuration is written to a file that you have chosen. This configuration file can later be read by an Erlang runtime-system at startup. Pass the command line argument - <seealso marker="erts:erl#args_file">-args_file FileName</seealso> - to the <seealso marker="erts:erl">erl(1)</seealso> command.</p> + <seecom marker="erts:erl#args_file">-args_file FileName</seecom> + to the <seecom marker="erts:erl">erl(1)</seecom> command.</p> </item> <item> <p>The configuration produced by <c>erts_alloc_config</c> may @@ -106,10 +106,10 @@ file produced by <c>erts_alloc_config</c>; instead, put your modifications in another file and load this file after the file produced by <c>erts_alloc_config</c>. That is, put the - <seealso marker="erts:erl#args_file">-args_file FileName</seealso> + <seecom marker="erts:erl#args_file">-args_file FileName</seecom> argument that reads your modification file later on the command-line than the - <seealso marker="erts:erl#args_file">-args_file FileName</seealso> + <seecom marker="erts:erl#args_file">-args_file FileName</seecom> argument that reads the configuration file produced by <c>erts_alloc_config</c>. If a memory allocation parameter appear multiple times, the last version of will be used, i.e., @@ -144,13 +144,13 @@ <desc> <p><c>save_scenario/0</c> saves information about the current runtime scenario. This information will later be used when - <seealso marker="#make_config/0">make_config/0</seealso>, - or <seealso marker="#make_config/1">make_config/1</seealso> + <seemfa marker="#make_config/0">make_config/0</seemfa>, + or <seemfa marker="#make_config/1">make_config/1</seemfa> is called.</p> <p>The first time <c>save_scenario/0</c> is called a server will be started. This server will save runtime scenarios. All saved scenarios can be removed by calling - <seealso marker="#make_config/0">stop/0</seealso>.</p> + <seemfa marker="#make_config/0">stop/0</seemfa>.</p> </desc> </func> <func> @@ -161,7 +161,7 @@ </type> <desc> <p>This is the same as calling - <seealso marker="#make_config/1">make_config(group_leader())</seealso>.</p> + <seemfa marker="#make_config/1">make_config(group_leader())</seemfa>.</p> </desc> </func> <func> @@ -173,7 +173,7 @@ </type> <desc> <p><c>make_config/1</c> uses the information previously saved by - <seealso marker="#save_scenario/0">save_scenario/0</seealso> + <seemfa marker="#save_scenario/0">save_scenario/0</seemfa> in order to produce an <c>erts_alloc</c> configuration. At least one scenario have had to be saved. All scenarios previously saved will be used when creating the @@ -183,9 +183,9 @@ filename. A file named <c>FileNameOrIODev</c> is created and the configuration will be written to that file. If <c>FileNameOrIODev</c> is an - <seealso marker="stdlib:io">io_device()</seealso> (see the + <seeerl marker="stdlib:io">io_device()</seeerl> (see the documentation of the module - <seealso marker="stdlib:io">io</seealso>), the configuration + <seeerl marker="stdlib:io">io</seeerl>), the configuration will be written to the io device.</p> </desc> </func> @@ -203,9 +203,9 @@ <section> <title>See Also</title> - <p><seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>, - <seealso marker="erts:erl">erl(1)</seealso>, - <seealso marker="stdlib:io">io(3)</seealso></p> + <p><seecref marker="erts:erts_alloc">erts_alloc(3)</seecref>, + <seecom marker="erts:erl">erl(1)</seecom>, + <seeerl marker="stdlib:io">io(3)</seeerl></p> </section> </erlref> diff --git a/lib/runtime_tools/doc/src/msacc.xml b/lib/runtime_tools/doc/src/msacc.xml index ae089de8d0..0a716136fd 100644 --- a/lib/runtime_tools/doc/src/msacc.xml +++ b/lib/runtime_tools/doc/src/msacc.xml @@ -37,8 +37,8 @@ <p>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 - <seealso marker="erts:erlang#statistics_microstate_accounting"><c> - erlang:statistics(microstate_accounting)</c></seealso>.</p> + <seeerl marker="erts:erlang#statistics_microstate_accounting"><c> + erlang:statistics(microstate_accounting)</c></seeerl>.</p> <marker id="msacc_print_example"></marker> <p><em>Basic Scenario</em></p> <pre>1> <input>msacc:start(1000).</input> @@ -64,10 +64,10 @@ Stats per type: ok </pre> <p>This first command enables microstate accounting for 1000 milliseconds. - See <seealso marker="#start-0"><c>start/0</c></seealso>, - <seealso marker="#stop-0"><c>stop/0</c></seealso>, - <seealso marker="#reset-0"><c>reset/0</c></seealso> and - <seealso marker="#start-1"><c>start/1</c></seealso> for more details. + See <seemfa marker="#start/0"><c>start/0</c></seemfa>, + <seemfa marker="#stop/0"><c>stop/0</c></seemfa>, + <seemfa marker="#reset/0"><c>reset/0</c></seemfa> and + <seemfa marker="#start/1"><c>start/1</c></seemfa> for more details. The second command prints the statistics gathered during that time. First three general statistics are printed.</p> <taglist> @@ -113,7 +113,7 @@ ok <desc><p>A map containing information about a specific thread. The percentages in the map can be either run-time or real-time depending on if <c>runtime</c> or <c>realtime</c> was requested from - <seealso marker="#stats-2">stats/2</seealso>. <c>system</c> is the + <seemfa marker="#stats/2">stats/2</seemfa>. <c>system</c> is the percentage of total system time for this specific thread.</p></desc> </datatype> <datatype> @@ -133,14 +133,14 @@ ok <datatype> <name name="msacc_state"/> <desc><p>The different states that a thread can be in. See - <seealso marker="erts:erlang#statistics_microstate_accounting"> - erlang:statistics(microstate_accounting)</seealso> for details. + <seeerl marker="erts:erlang#statistics_microstate_accounting"> + erlang:statistics(microstate_accounting)</seeerl> for details. </p></desc> </datatype> <datatype> <name name="msacc_print_options"/> <desc><p>The different options that can be given to - <seealso marker="#print-2"><c>print/2</c></seealso>. + <seemfa marker="#print/2"><c>print/2</c></seemfa>. </p></desc> </datatype> </datatypes> @@ -192,9 +192,9 @@ ok <p> Prints the current microstate accounting to standard out. Same as - <seealso marker="#print-1"> + <seemfa marker="#print/1"> <c>msacc:print(msacc:stats(),#{}).</c> - </seealso> + </seemfa> </p> </desc> </func> @@ -204,9 +204,9 @@ ok <desc> <p>Print the given microstate statistics values to stdout. Same as - <seealso marker="#print-1"> + <seemfa marker="#print/1"> <c>msacc:print(DataOrStats,#{}).</c> - </seealso> + </seemfa> </p> </desc> </func> @@ -219,7 +219,7 @@ ok reference manual for a brief description of what the fields mean.</p> <p>It is possible to print more specific types of statistics by first manipulating the <c>DataOrStats</c> using - <seealso marker="#stats-2"><c>stats/2</c></seealso>. + <seemfa marker="#stats/2"><c>stats/2</c></seemfa>. For instance if you want to print the percentage of run-time for each thread you can do:</p> <pre><input>msacc:print(msacc:stats(runtime,msacc:stats())).</input></pre> @@ -239,7 +239,7 @@ ok <desc> <p>Print the given microstate statistics values to the given file or device. The other arguments behave the same way as for - <seealso marker="#print-2"><c>print/2</c></seealso>.</p> + <seemfa marker="#print/2"><c>print/2</c></seemfa>.</p> </desc> </func> <func> @@ -248,8 +248,8 @@ ok <desc> <p>Returns a runtime system independent version of the microstate statistics data presented by - <seealso marker="erts:erlang#statistics_microstate_accounting"> - <c>erlang:statistics(microstate_accounting)</c></seealso>. + <seeerl marker="erts:erlang#statistics_microstate_accounting"> + <c>erlang:statistics(microstate_accounting)</c></seeerl>. All counters have been normalized to be in microsecond resolution.</p> </desc> </func> @@ -289,16 +289,16 @@ ok <fsummary></fsummary> <desc> <p>Dumps the current microstate statistics counters to a file that can - be parsed with <seealso marker="kernel:file#consult/1"> - file:consult/1</seealso>.</p> + be parsed with <seemfa marker="kernel:file#consult/1"> + file:consult/1</seemfa>.</p> </desc> </func> <func> <name name="from_file" arity="1" since="OTP 19.0"/> <fsummary></fsummary> <desc> - <p>Read a file dump produced by <seealso marker="#to_file/1"> - to_file(Filename)</seealso>.</p> + <p>Read a file dump produced by <seemfa marker="#to_file/1"> + to_file(Filename)</seemfa>.</p> </desc> </func> </funcs> diff --git a/lib/runtime_tools/doc/src/notes.xml b/lib/runtime_tools/doc/src/notes.xml index 210d63687c..6303397f57 100644 --- a/lib/runtime_tools/doc/src/notes.xml +++ b/lib/runtime_tools/doc/src/notes.xml @@ -32,6 +32,62 @@ <p>This document describes the changes made to the Runtime_Tools application.</p> +<section><title>Runtime_Tools 1.16</title> + + <section><title>Improvements and New Features</title> + <list> + <item> + <p> + Clarify documentation of module 'scheduler'.</p> + <p> + Own Id: OTP-17208 Aux Id: GH-4502, PR-4532 </p> + </item> + </list> + </section> + +</section> + +<section><title>Runtime_Tools 1.15.1</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + Fixed a crash in <c>appmon_info</c> triggered by trying + to read port info from a port that was in the process of + terminating.</p> + <p> + <c>appmon_info</c> is used by <c>observer</c> to get + information from the observed node.</p> + <p> + Own Id: OTP-16787 Aux Id: PR-2673 </p> + </item> + </list> + </section> + +</section> + +<section><title>Runtime_Tools 1.15</title> + + <section><title>Improvements and New Features</title> + <list> + <item> + <p>Improved the presentation of allocations and carriers + in the <c>instrument</c> module.</p> + <p> + Own Id: OTP-16327</p> + </item> + <item> + <p> + Minor updates due to the new spawn improvements made.</p> + <p> + Own Id: OTP-16368 Aux Id: OTP-15251 </p> + </item> + </list> + </section> + +</section> + <section><title>Runtime_Tools 1.14</title> <section><title>Improvements and New Features</title> @@ -327,10 +383,10 @@ added to runtime_tools that can assist in gathering and interpreting the data from Microstate accounting.</p> <p> - For more information see <seealso + For more information see <seeerl marker="erts:erlang#statistics_microstate_accounting">erlang:statistics(microstate_accounting, - _)</seealso> and the <seealso - marker="runtime_tools:msacc">msacc</seealso> module in + _)</seeerl> and the <seeerl + marker="runtime_tools:msacc">msacc</seeerl> module in runtime_tools.</p> <p> Own Id: OTP-12345</p> @@ -366,9 +422,9 @@ configure option <c>--with-dynamic-trace=lttng</c>.</p> <p>The dynamic trace module <c>dyntrace</c> is now capable to be used as a LTTng sink for Erlang tracing. - For a list of all tracepoints, see <seealso + For a list of all tracepoints, see <seeguide marker="runtime_tools:LTTng">Runtime Tools User's - Guide</seealso> .</p> + Guide</seeguide> .</p> <p>This feature also introduces an incompatible change in trace tags. The trace tags <c>gc_start</c> and <c>gc_end</c> has been split into <c>gc_minor_start</c>, @@ -547,18 +603,18 @@ </item> <item> <p> - The <seealso - marker="kernel:app"><c>app</c></seealso>-file key - <seealso - marker="kernel:app#runtime_dependencies"><c>runtime_dependencies</c></seealso> + The <seefile + marker="kernel:app"><c>app</c></seefile>-file key + <seefile + marker="kernel:app#runtime_dependencies"><c>runtime_dependencies</c></seefile> has been introduced.</p> <p> 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.</p> <p> - The function <seealso - marker="runtime_tools:system_information#sanity_check/0"><c>system_information:sanity_check/0</c></seealso> + The function <seemfa + marker="runtime_tools:system_information#sanity_check/0"><c>system_information:sanity_check/0</c></seemfa> will verify all declared runtime dependencies in the system when called.</p> <p> diff --git a/lib/runtime_tools/doc/src/scheduler.xml b/lib/runtime_tools/doc/src/scheduler.xml index b033430183..d539ccb1c6 100644 --- a/lib/runtime_tools/doc/src/scheduler.xml +++ b/lib/runtime_tools/doc/src/scheduler.xml @@ -37,10 +37,10 @@ <description> <p>This module contains utility functions for easier measurement and calculation of scheduler utilization, otherwise obtained from calling the - more primitive <seealso marker="erts:erlang#statistics_scheduler_wall_time"> - <c>statistics(scheduler_wall_time)</c></seealso>.</p> - <p>The simplest usage is to call <seealso marker="#utilization-1"> - <c>scheduler:utilization(Seconds)</c></seealso>.</p> + more primitive <seeerl marker="erts:erlang#statistics_scheduler_wall_time"> + <c>statistics(scheduler_wall_time)</c></seeerl>.</p> + <p>The simplest usage is to call <seemfa marker="#utilization/1"> + <c>scheduler:utilization(Seconds)</c></seemfa>.</p> </description> <datatypes> @@ -63,14 +63,17 @@ <taglist> <tag><c>{normal, SchedulerId, Util, Percent}</c></tag> <item>Scheduler utilization of a normal scheduler with number - <c>SchedulerId</c>.</item> + <c>SchedulerId</c>. Schedulers that are not online will also be + included. + <seeerl marker="erts:erlang#system_info_schedulers_online">Online + schedulers</seeerl> have the lowest <c>SchedulerId</c>.</item> <tag><c>{cpu, SchedulerId, Util, Percent}</c></tag> <item>Scheduler utilization of a dirty-cpu scheduler with number <c>SchedulerId</c>.</item> <tag><c>{io, SchedulerId, Util, Percent}</c></tag> <item>Scheduler utilization of a dirty-io scheduler with number <c>SchedulerId</c>. This tuple will only exist if both samples were - taken with <seealso marker="#sample_all-0"><c>sample_all/0</c></seealso>.</item> + taken with <seemfa marker="#sample_all/0"><c>sample_all/0</c></seemfa>.</item> <tag><c>{total, Util, Percent}</c></tag> <item>Total utilization of all normal and dirty-cpu schedulers.</item> <tag><c>{weighted, Util, Percent}</c></tag> @@ -117,6 +120,29 @@ <p>Calculate scheduler utilizations for the time interval from when <c><anno>Sample</anno></c> was taken and "now". The same as calling <c>scheduler:utilization(Sample, scheduler:sample_all())</c>.</p> + <note> + <p> + Scheduler utilization is measured as an average value over a time + interval, calculated as the difference between two samples. To get + good useful utilization values at least a couple of seconds should + have passed between the two samples. For this reason, you should not + do + </p> +<pre> +scheduler:utilization(scheduler:sample()). % DO NOT DO THIS! +</pre> + <p> + The above example takes two samples in rapid succession and calculates + the scheduler utilization between them. The resulting values will + probably be more misleading than informative. + </p> + <p> + Instead use <seemfa marker="#utilization/1"> + <c>scheduler:utilization(Seconds)</c></seemfa> or let some time pass + between <c>Sample=scheduler:sample()</c> and + <c>scheduler:utilization(Sample)</c>. + </p> + </note> </desc> </func> @@ -126,8 +152,8 @@ <desc> <p>Calculates scheduler utilizations for the time interval between the two samples obtained from calling - <seealso marker="#sample-0"><c>sample/0</c></seealso> or - <seealso marker="#sample_all-0"><c>sample_all/0</c></seealso>.</p> + <seemfa marker="#sample/0"><c>sample/0</c></seemfa> or + <seemfa marker="#sample_all/0"><c>sample_all/0</c></seemfa>.</p> </desc> </func> diff --git a/lib/runtime_tools/doc/src/system_information.xml b/lib/runtime_tools/doc/src/system_information.xml index a356b5c6f8..8cb43ed520 100644 --- a/lib/runtime_tools/doc/src/system_information.xml +++ b/lib/runtime_tools/doc/src/system_information.xml @@ -60,8 +60,8 @@ is invalid.</p></item> <tag><c><anno>MissingRuntimeDependencies</anno></c></tag> <item><p>An application is missing - <seealso marker="kernel:app#runtime_dependencies">runtime - dependencies</seealso>. The second element identifies the + <seefile marker="kernel:app#runtime_dependencies">runtime + dependencies</seefile>. The second element identifies the application (with version) that has missing dependencies. The third element contains the missing dependencies.</p> <p>Note that this check use application versions that @@ -70,11 +70,11 @@ 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 - <seealso marker="doc/system_principles:versions">branched - versions</seealso> of the same application installed in the + <seeguide marker="system/system_principles:versions">branched + versions</seeguide> of the same application installed in the system, but you do not use a - <seealso marker="doc/system_principles:system_principles#BOOTSCRIPT">boot - script</seealso> identifing the correct application version.</p> + <seeguide marker="system/system_principles:system_principles#BOOTSCRIPT">boot + script</seeguide> identifing the correct application version.</p> </item> </taglist> <p>Currently the sanity check is limited to verifying diff --git a/lib/runtime_tools/examples/function-calls.d b/lib/runtime_tools/examples/function-calls.d index f8ca388228..a51ff51253 100644 --- a/lib/runtime_tools/examples/function-calls.d +++ b/lib/runtime_tools/examples/function-calls.d @@ -19,39 +19,85 @@ * %CopyrightEnd% */ +/** + * Triggered on local function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + * @param arg2 depth + */ erlang*:::local-function-entry { printf("pid %s enter (local) %s depth %d\n", copyinstr(arg0), copyinstr(arg1), arg2); } +/** + * Triggered on global function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + * @param arg2 depth + */ erlang*:::global-function-entry { printf("pid %s enter (global) %s depth %d\n", copyinstr(arg0), copyinstr(arg1), arg2); } +/** + * Triggered upon function return, either global or + * local + * + * @param arg0 pid + * @param arg1 MFA of the returned from function + * @param arg2 depth + */ erlang*:::function-return { printf("pid %s return %s depth %d\n", copyinstr(arg0), copyinstr(arg1), arg2); } +/** + * Triggered on built-in function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + */ erlang*:::bif-entry { printf("pid %s BIF entry mfa %s\n", copyinstr(arg0), copyinstr(arg1)); } +/** + * Triggered on built-in function return + * + * @param arg0 pid + * @param arg1 MFA of the returned from function + */ erlang*:::bif-return { printf("pid %s BIF return mfa %s\n", copyinstr(arg0), copyinstr(arg1)); } +/** + * Triggered on native function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + */ erlang*:::nif-entry { printf("pid %s NIF entry mfa %s\n", copyinstr(arg0), copyinstr(arg1)); } +/** + * Triggered upon native function return + * + * @param arg0 pid + * @param arg1 MFA of the returned from function + */ erlang*:::nif-return { printf("pid %s NIF return mfa %s\n", copyinstr(arg0), copyinstr(arg1)); diff --git a/lib/runtime_tools/examples/function-calls.systemtap b/lib/runtime_tools/examples/function-calls.systemtap index 6bb173b3ec..8f748ce0d1 100644 --- a/lib/runtime_tools/examples/function-calls.systemtap +++ b/lib/runtime_tools/examples/function-calls.systemtap @@ -29,39 +29,85 @@ * to your environment. */ +/** + * Triggered on local function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + * @param arg2 depth + */ probe process("beam.smp").mark("local-function-entry") { printf("pid %s enter (local) %s depth %d\n", user_string($arg1), user_string($arg2), $arg3); } +/** + * Triggered on global function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + * @param arg2 depth + */ probe process("beam.smp").mark("global-function-entry") { printf("pid %s enter (global) %s depth %d\n", user_string($arg1), user_string($arg2), $arg3); } +/** + * Triggered upon function return, either global or + * local + * + * @param arg0 pid + * @param arg1 MFA of the returned from function + * @param arg2 depth + */ probe process("beam.smp").mark("function-return") { printf("pid %s return %s depth %d\n", user_string($arg1), user_string($arg2), $arg3); } +/** + * Triggered on built-in function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + */ probe process("beam.smp").mark("bif-entry") { printf("pid %s BIF entry mfa %s\n", user_string($arg1), user_string($arg2)); } +/** + * Triggered on built-in function return + * + * @param arg0 pid + * @param arg1 MFA of the returned from function + */ probe process("beam.smp").mark("bif-return") { printf("pid %s BIF return mfa %s\n", user_string($arg1), user_string($arg2)); } +/** + * Triggered on native function entry + * + * @param arg0 pid + * @param arg1 MFA of the function + */ probe process("beam.smp").mark("nif-entry") { printf("pid %s NIF entry mfa %s\n", user_string($arg1), user_string($arg2)); } +/** + * Triggered upon native function return + * + * @param arg0 pid + * @param arg1 MFA of the returned from function + */ probe process("beam.smp").mark("nif-return") { printf("pid %s NIF return mfa %s\n", user_string($arg1), user_string($arg2)); diff --git a/lib/runtime_tools/src/appmon_info.erl b/lib/runtime_tools/src/appmon_info.erl index d64206decf..a12cea8f15 100644 --- a/lib/runtime_tools/src/appmon_info.erl +++ b/lib/runtime_tools/src/appmon_info.erl @@ -713,7 +713,11 @@ format(P) when is_pid(P) -> _ -> pid_to_list(P) end; format(P) when is_port(P) -> - "port " ++ integer_to_list(element(2, erlang:port_info(P, id))); + case erlang:port_info(P, id) of + undefined -> "port closed"; + {_, Pid} -> + "port " ++ integer_to_list(Pid) + end; format(X) -> io:format("What: ~p~n", [X]), "???". diff --git a/lib/runtime_tools/src/erts_alloc_config.erl b/lib/runtime_tools/src/erts_alloc_config.erl index 845efaf9ef..d8133ee14f 100644 --- a/lib/runtime_tools/src/erts_alloc_config.erl +++ b/lib/runtime_tools/src/erts_alloc_config.erl @@ -356,14 +356,23 @@ save_scenario(AlcList) -> process_flag(priority, OP), Res. -save_ai2(Alc, AI) -> - Alc1 = chk_sbct(Alc, AI), - case ai_value(mbcs, blocks_size, AI) of - {blocks_size, MinBS, _, MaxBS} -> - set_alloc_util(chk_mbcs_blocks_size(Alc1, MinBS, MaxBS), true); - _ -> - set_alloc_util(Alc, false) - end. +save_ai2(#alloc{name=Name}=Alc0, AI) -> + Alc1 = chk_sbct(Alc0, AI), + + {Alc, IsAUtil} = + case ai_value(mbcs, blocks, AI) of + {blocks, Bs} -> + case ai_value(Name, size, Bs) of + {size, MinBS, _, MaxBS} -> + {chk_mbcs_blocks_size(Alc1, MinBS, MaxBS), true}; + _ -> + {Alc1, false} + end; + _ -> + {Alc1, false} + end, + + set_alloc_util(Alc, IsAUtil). save_ai(Alc, [{instance, 0, AI}]) -> save_ai2(Alc, AI); diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl index 3a24986381..e38757b939 100644 --- a/lib/runtime_tools/src/observer_backend.erl +++ b/lib/runtime_tools/src/observer_backend.erl @@ -433,7 +433,9 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) -> ReturnMS = [{'_',[],[{return_trace}]}], erlang:trace_pattern({erlang,spawn,3},ReturnMS,[meta]), erlang:trace_pattern({erlang,spawn_link,3},ReturnMS,[meta]), - erlang:trace_pattern({erlang,spawn_opt,1},ReturnMS,[meta]), + erlang:trace_pattern({erlang,spawn_opt,4},ReturnMS,[meta]), + erlang:trace_pattern({erts_internal,spawn_init,1},[],[meta]), + erlang:trace_pattern({erts_internal,dist_spawn_init,1},[],[meta]), erlang:trace_pattern({erlang,register,2},[],[meta]), erlang:trace_pattern({global,register_name,2},[],[meta]), ok; @@ -459,7 +461,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) -> {trace_ts,_,call,{global,register_name,[Name,Pid]},_} -> ok = ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile), ttb_meta_tracer_loop(MetaFile,PI,Acc,State); - {trace_ts,CallingPid,call,{erlang,spawn_opt,[{M,F,Args,_}]},_} -> + {trace_ts,CallingPid,call,{erlang,spawn_opt,[M,F,Args,_]},_} -> MFA = {M,F,length(Args)}, NewAcc = dict:update(CallingPid, fun(Old) -> [MFA|Old] end, [MFA], @@ -497,6 +499,16 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) -> Acc), ttb_meta_tracer_loop(MetaFile,PI,NewAcc,State); + {trace_ts,CallingPid,call,{erts_internal,spawn_init,[{M,F,Args}]},_} -> + %% Local spawn_request()... + ok = ttb_store_meta({pid,{CallingPid,{M,F,length(Args)}}},MetaFile), + ttb_meta_tracer_loop(MetaFile,PI,Acc,State); + + {trace_ts,CallingPid,call,{erts_internal, dist_spawn_init, [MFnoA]},_} -> + %% Distributed spawn_request()... + ok = ttb_store_meta({pid,{CallingPid,MFnoA}},MetaFile), + ttb_meta_tracer_loop(MetaFile,PI,Acc,State); + {metadata,Data} when is_list(Data) -> ok = ttb_store_meta(Data,MetaFile), ttb_meta_tracer_loop(MetaFile,PI,Acc,State); @@ -530,7 +542,9 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) -> try_stop_overload_check(State), erlang:trace_pattern({erlang,spawn,3},false,[meta]), erlang:trace_pattern({erlang,spawn_link,3},false,[meta]), - erlang:trace_pattern({erlang,spawn_opt,1},false,[meta]), + erlang:trace_pattern({erlang,spawn_opt,4},false,[meta]), + erlang:trace_pattern({erts_internal,spawn_init,1},false,[meta]), + erlang:trace_pattern({erts_internal,dist_spawn_init,1},false,[meta]), erlang:trace_pattern({erlang,register,2},false,[meta]), erlang:trace_pattern({global,register_name,2},false,[meta]); stop -> @@ -752,6 +766,7 @@ sys_tables() -> mnesia_gvar, mnesia_stats, % mnesia_transient_decision, pg2_table, + pg, queue, schema, shell_records, @@ -763,7 +778,7 @@ sys_tables() -> sys_processes() -> [auth, code_server, global_name_server, inet_db, - mnesia_recover, net_kernel, timer_server, wxe_master]. + mnesia_recover, net_kernel, pg, timer_server, wxe_master]. mnesia_tables() -> [ir_AliasDef, ir_ArrayDef, ir_AttributeDef, ir_ConstantDef, diff --git a/lib/runtime_tools/src/runtime_tools.app.src b/lib/runtime_tools/src/runtime_tools.app.src index b026048b94..d7c2975a5b 100644 --- a/lib/runtime_tools/src/runtime_tools.app.src +++ b/lib/runtime_tools/src/runtime_tools.app.src @@ -29,5 +29,5 @@ {applications, [kernel, stdlib]}, {env, []}, {mod, {runtime_tools, []}}, - {runtime_dependencies, ["stdlib-3.0","mnesia-4.12","kernel-5.0", - "erts-8.0"]}]}. + {runtime_dependencies, ["stdlib-3.13","mnesia-4.12","kernel-7.0", + "erts-11.0"]}]}. diff --git a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl index 6ae51d9a26..9ab61b89d2 100644 --- a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl +++ b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl @@ -25,7 +25,9 @@ -include_lib("common_test/include/ct.hrl"). %-compile(export_all). --export([all/0, suite/0, init_per_testcase/2, end_per_testcase/2]). +-export([all/0, suite/0, + init_per_suite/1, end_per_suite/1, + init_per_testcase/2, end_per_testcase/2]). %% Testcases -export([basic/1]). @@ -40,6 +42,18 @@ suite() -> all() -> [basic]. +init_per_suite(Config) -> + case test_server:is_asan() of + true -> + %% No point testing own allocators under address sanitizer. + {skip, "Address sanitizer"}; + false -> + Config + end. + +end_per_suite(_Config) -> + ok. + init_per_testcase(Case, Config) when is_list(Config) -> [{testcase, Case}, {erl_flags_env, save_env()} | Config]. diff --git a/lib/runtime_tools/vsn.mk b/lib/runtime_tools/vsn.mk index c01dd60009..e62d59acf6 100644 --- a/lib/runtime_tools/vsn.mk +++ b/lib/runtime_tools/vsn.mk @@ -1 +1 @@ -RUNTIME_TOOLS_VSN = 1.14 +RUNTIME_TOOLS_VSN = 1.16 |