linux-trace-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Tzvetomir Stoyanov <tstoyanov@vmware.com>
Cc: "linux-trace-devel@vger.kernel.org"  <linux-trace-devel@vger.kernel.org>
Subject: Re: [PATCH v3 10/46] tools/lib/traceevent: Man page for tep_is_latency_format() and tep_set_latency_format()
Date: Wed, 16 Jan 2019 12:45:33 -0500	[thread overview]
Message-ID: <20190116124533.4ed3f389@gandalf.local.home> (raw)
In-Reply-To: <20181127154153.11315-11-tstoyanov@vmware.com>

On Tue, 27 Nov 2018 15:42:19 +0000
Tzvetomir Stoyanov <tstoyanov@vmware.com> wrote:

> Create man pages for tep_is_latency_format() and tep_set_latency_format()
> as part of the libtraceevent APIs.
> 
> Signed-off-by: Tzvetomir Stoyanov <tstoyanov@vmware.com>
> ---
>  .../libtraceevent-latency_format.txt          | 100 ++++++++++++++++++
>  1 file changed, 100 insertions(+)
>  create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-latency_format.txt
> 
> diff --git a/tools/lib/traceevent/Documentation/libtraceevent-latency_format.txt b/tools/lib/traceevent/Documentation/libtraceevent-latency_format.txt
> new file mode 100644
> index 000000000000..4b0d7d3f6ae9
> --- /dev/null
> +++ b/tools/lib/traceevent/Documentation/libtraceevent-latency_format.txt
> @@ -0,0 +1,100 @@
> +libtraceevent(3)
> +================
> +
> +NAME
> +----
> +tep_set_latency_format,tep_is_latency_format - Get / set "latency output" format.
> +
> +SYNOPSIS
> +--------
> +[verse]
> +--
> +*#include <event-parse.h>*
> +
> +void *tep_set_latency_format*(struct tep_handle pass:[*]_tep_, int _lat_);
> +int *tep_is_latency_format*(struct tep_handle pass:[*]_tep_);
> +
> +--
> +
> +DESCRIPTION
> +-----------
> +"Latency output" format prints information about interrupts being disabled, 
> +soft irq being disabled, the "need_resched" flag being set and preempt count. 
> +This information is recorded with every event, but by default is not printed.
> +
> +The _tep_set_latency_format()_ function enables the "latency output" printing.
> +The _tep_ argument is trace event parser context. The _lat_ argument can be zero,
> +for "latency output" disabled, or non zero for "latency output" enabled.
> +Information is displayed with 6 characters. When a field is zero, or N/A, a pass:['.'] 
> +is printed. Example:
> +[verse]
> +--
> +  <idle>-0       0d.h1. 106467.859747: function:             ktime_get <-- tick_check_idle
> +--
> +The 0d.h1. denotes this information. The first character is never a pass:['.']
> +and represents what CPU the trace was recorded on (CPU 0). The pass:['d'] denotes
> +that interrupts were disabled. The pass:['h'] means that this was called inside
> +an interrupt handler. The pass:['1'] is the preemption disabled (preempt_count)
> +was set to one.  The two pass:['.']s are "need_resched" flag and kernel lock
> +counter. If the "need_resched" flag is set, then that character would be a pass:['N'].

I would like to see a more formal explanation of the output here. Then
we can say "See Latency Format section."

Latency Format
--------------

The latency format displays 5 or more fields:

 CPU #, interrupt state, scheduling state, current context, and
 preemption count.

 Field 1 is the CPU number (starting with zero).

 Field 2 is the interrupt enabled state:

   d : Interrupts are disabled
   . : Interrupts are enabled
   X : The architecture does not support this information

 Field 3 is the "need resched" state.

   N : The task is set to call the scheduler when possible, as another
       higher priority task may need to be scheduled in.
   . : The task is not set to call the scheduler.

 Field 4 is the context state.

   . : Normal context

   s : Soft interrupt context

   h : Hard interrupt context

   H : Hard interrupt context which triggered during soft interrupt
       context.

   z : NMI context

   Z : NMI context which triggered during hard interrupt context

 Field 5 is the preemption count.

   . : The preempt count is zero.

   On preemptible kernels (where the task can be scheduled out in
   arbitrary locations while in kernel context), The preempt count,
   when non zero, will prevent the kernel from scheduling out the
   current task. The preempt count number is displayed when it is not
   zero.

Depending on the kernel, it may show other fields (lock depth,
or migration disabled, which are unique to specialized kernels).

-- Steve


> +
> +The _tep_is_latency_format()_ function returns if "latency output" is enabled.
> +
> +This "Latency output" setting affects output of _tep_print_event_task()_
> +and _tep_print_event_time()_ APIs. 
> +
> +RETURN VALUE
> +------------
> +
> +The _tep_is_latency_format()_ function returns non zero if "latency output" 
> +is enabled, or zero if it is disabled.
> +
> +EXAMPLE
> +-------
> +[source,c]
> +--
> +#include <event-parse.h>
> +...
> +struct tep_handle *tep = tep_alloc();
> +...
> +	tep_set_latency_format(tep, 1);
> +...
> +	if (tep_is_latency_format(tep)) {
> +		/* latency output format is enabled */
> +	} else {
> +		/* latency output format is disabled */
> +	}
> +--
> +
> +FILES
> +-----
> +[verse]
> +--
> +*event-parse.h*
> +	Header file to include in order to have access to the library APIs.
> +*-ltraceevent*
> +	Linker switch to add when building a program that uses the library.
> +--
> +
> +SEE ALSO
> +--------
> +_libtraceevent(3)_, _trace-cmd(1)_, tep_print_event_task(3), tep_print_event_time(3)
> +
> +AUTHOR
> +------
> +[verse]
> +--
> +*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
> +*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
> +--
> +REPORTING BUGS
> +--------------
> +Report bugs to  <linux-trace-devel@vger.kernel.org>
> +
> +LICENSE
> +-------
> +libtraceevent is Free Software licensed under the GNU LGPL 2.1
> +
> +RESOURCES
> +---------
> +https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


  reply	other threads:[~2019-01-16 17:45 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-27 15:42 [PATCH v3 00/46] Libtraceevent MAN pages Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 01/46] tools/lib/traceevent: Implement libtraceevent man pages Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 02/46] tools/lib/traceevent: Fix libtraceevent/Documentation Makefile Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 03/46] tools/lib/traceevent: Add support for man pages with multiple names Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 04/46] tools/lib/traceevent: libtraceevent Makefile "help" target Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 05/46] tools/lib/traceevent: libtraceevent man pages for tep_handler related APIs Tzvetomir Stoyanov
2018-12-12 17:48   ` Steven Rostedt
2018-11-27 15:42 ` [PATCH v3 06/46] tools/lib/traceevent: Man page for tep_get_header_page_size() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 07/46] tools/lib/traceevent: Man page for tep_get_cpus() and tep_set_cpus() Tzvetomir Stoyanov
2019-01-16 16:32   ` Steven Rostedt
2018-11-27 15:42 ` [PATCH v3 08/46] tools/lib/traceevent: Man page for tep_is_file_bigendian() and tep_set_file_bigendian() Tzvetomir Stoyanov
2019-01-16 16:37   ` Steven Rostedt
2018-11-27 15:42 ` [PATCH v3 09/46] tools/lib/traceevent: Man page for tep_is_host_bigendian() and tep_set_host_bigendian() Tzvetomir Stoyanov
2019-01-16 16:41   ` Steven Rostedt
2018-11-27 15:42 ` [PATCH v3 10/46] tools/lib/traceevent: Man page for tep_is_latency_format() and tep_set_latency_format() Tzvetomir Stoyanov
2019-01-16 17:45   ` Steven Rostedt [this message]
2018-11-27 15:42 ` [PATCH v3 11/46] tools/lib/traceevent: Man page for tep_get_page_size() and tep_set_page_size() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 12/46] tools/lib/traceevent: Man page for tep_strerror() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 13/46] tools/lib/traceevent: Man page for tep_register_trace_clock() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 14/46] tools/lib/traceevent: Man pages for tep_register_event_handler() and tep_unregister_event_handler() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 15/46] tools/lib/traceevent: Man pages for tep_register_function() and tep_register_print_string() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 16/46] tools/lib/traceevent: Man pages for tep_register_print_function() and tep_unregister_print_function() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 17/46] tools/lib/traceevent: Man page for tep_read_number() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 18/46] tools/lib/traceevent: Man pages for tep_find_event(), tep_find_event_by_name() and tep_find_event_by_record() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 19/46] tools/lib/traceevent: Man page for tep_list_events() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 20/46] tools/lib/traceevent: Man pages for tep_print_event(), tep_print_event_data(), tep_event_info(), tep_print_event_task() and tep_print_event_time() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 21/46] tools/lib/traceevent: Man pages tep_get_first_event() and tep_get_events_count() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 22/46] tools/lib/traceevent: Man pages tep_find_common_field(), tep_find_field() and tep_find_any_field() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 23/46] tools/lib/traceevent: Man pages tep_get_any_field_val(), tep_get_common_field_val(), tep_get_field_val() and tep_get_field_raw() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 24/46] tools/lib/traceevent: Man pages for tep_print_field(), tep_print_fields(), tep_print_num_field() and tep_print_func_field() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 25/46] tools/lib/traceevent: Man page for tep_read_number_field() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 26/46] tools/lib/traceevent: Man pages for tep_event_common_fields() and tep_event_fields() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 27/46] tools/lib/traceevent: Man pages for tep_filter_alloc(), tep_filter_free() and tep_filter_reset() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 28/46] tools/lib/traceevent: Man page for tep_filter_add_filter_str() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 29/46] tools/lib/traceevent: Man page for tep_filter_strerror() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 30/46] tools/lib/traceevent: Man pages for tep_event_filtered() and tep_filter_remove_event() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 31/46] tools/lib/traceevent: Man page for tep_filter_match() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 32/46] tools/lib/traceevent: Man pages for tep_filter_copy() and tep_filter_compare() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 33/46] tools/lib/traceevent: Man page for tep_filter_make_string() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 34/46] tools/lib/traceevent: Man pages for tep_filter_event_has_trivial(), tep_update_trivial() and tep_filter_clear_trivial() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 35/46] tools/lib/traceevent: Man pages for tep_find_function() and tep_find_function_address() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 36/46] tools/lib/traceevent: Man pages for tep_set_function_resolver() and tep_reset_function_resolver() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 37/46] tools/lib/traceevent: Man pages for tep_parse_event() and tep_parse_format() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 38/46] tools/lib/traceevent: Man page for tep_parse_header_page() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 39/46] tools/lib/traceevent: Man pages for tep_load_plugins() and tep_unload_plugin() Tzvetomir Stoyanov
2018-11-27 15:42 ` [PATCH v3 40/46] tools/lib/traceevent: Man page for tep_data_lat_fmt() Tzvetomir Stoyanov
2018-11-27 15:43 ` [PATCH v3 41/46] tools/lib/traceevent: Man pages for tep_data_type(), tep_data_pid(), tep_data_preempt_count() and tep_data_flags() Tzvetomir Stoyanov
2018-11-27 15:43 ` [PATCH v3 42/46] tools/lib/traceevent: Man pages for trace_seq_init() and trace_seq_destroy() Tzvetomir Stoyanov
2018-11-27 15:43 ` [PATCH v3 43/46] tools/lib/traceevent: Man pages for trace_seq_do_fprintf() and trace_seq_do_printf() Tzvetomir Stoyanov
2018-11-27 15:43 ` [PATCH v3 44/46] tools/lib/traceevent: Man pages for trace_seq_printf() and trace_seq_vprintf() Tzvetomir Stoyanov
2018-11-27 15:43 ` [PATCH v3 45/46] tools/lib/traceevent: Man pages for trace_seq_putc() and trace_seq_puts() Tzvetomir Stoyanov
2018-11-27 15:43 ` [PATCH v3 46/46] tools/lib/traceevent: Man pages for trace_seq_reset() and trace_seq_terminate() Tzvetomir Stoyanov
2019-02-01 11:21 ` [PATCH v3 00/46] Libtraceevent MAN pages Claudio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190116124533.4ed3f389@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=tstoyanov@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).