xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Dario Faggioli <dario.faggioli@citrix.com>
To: xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wei.liu2@citrix.com>,
	George Dunlap <george.dunlap@eu.citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>, Tim Deegan <tim@xen.org>,
	Julien Grall <julien.grall@arm.com>,
	Jan Beulich <jbeulich@suse.com>,
	Jennifer Herbert <jennifer.herbert@citrix.com>,
	Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH 00/15] xen/tools: add tracing to various Xen subsystems
Date: Thu, 01 Jun 2017 19:33:33 +0200	[thread overview]
Message-ID: <149633614204.12814.14390287626133023934.stgit@Solace.fritz.box> (raw)

Hello,

While chasing and dealing with bugs, over this last period, I've found myself
augmenting Xen with quite a few new tracing capabilities, especially focusing
on:
 - IRQ being disabled and (re)enabled (in addition to the already existing
   tracing of IRQ related activity that we have);
 - RCU;
 - softirqs (I think I sent a preliminary version of this, long ago, but can't
   be sure);
 - tasklets;
 - timers;

And, apart from the first 4 patches (which are random, but still tracing
related, of course, improvements), this is what this patch series does: it adds
tracing to the Xen susystems listed above.

That happens, one subsystem after another, in patches 6 to 15.

Patch 5 deserves special mention. In fact, now that we have Kconfig, I thought
it could be a nice thing to make it possible to select, at build config time,
whether we want tracing or not, in the hypervisor (like, for instance, we do
for performance counters).

To be honest, my goal was to be able to compile tracing off, and run
benchmarks, to assess how much of a overhead tracing introduces, but then I
decided it was worth doing this properly, and now sending it.  I am still
running those benchmarks. Preliminary results seems to be showing that having
tracing support in the hypervisor does not (when it's disabled, of course)
introduce too much overhead. Still, I think it could be useful, to people that
wants a very specificly tailored version of Xen (embedded, small footprint,
etc.), to be able to rip it off nice and easily (e.g., like OpenXT guys did for
schedulers).

Of course, I will report here what I find, when benchmarks will finish running.
(In the meantime, patch 5 has some data about .text section shrinking in its
changelog.)

I also thought, for similar reasons, that it would have been good to be able to
also individually enable or disable the new tracing I'm introducing with this
series.  This potentially applies even to the tracing we already have in tree
(e.g., one may want to have tracing compiled in, for everything except that for
scheduling), and I'd be up for working on this. However, in this series, I am
touching really hot paths (with the exception, maybe, of RCU), and so I think
it is even more important to be able to disable tracing for them, for minimum
overhead.

For instance, the IRQ enabling and disabling tracing, I find it really really
usable for understanding certain class of behavior, and, with some scripting
and some more gnuplot "magic" (which I'll also share shortly) we can also use
it to automatically measure and graph for how long interrupt are kept disabled,
in various places within the hypervisor (Jennifer has done a similar analysis
for XenServer, a while back).  But it is very invasive, so you want to be able
to turn it on and off.
As said, I don't have all the result I need to present conclusions, but what I
see in preliminary data is that, although the tracing we currently have in Xen
is not too bad, performance wise, this new IRQs on/off tracing does have an
impact on performance, just for being there in the code (i.e., even when it is
there in the code but is *disabled*).

Of course, all this fine grain control of tracing options is hidden under
XEN_CONFIG_EXPERT, and all the new tracing is disabled by default.

There is a branch with this series here:
 git://xenbits.xen.org/people/dariof/xen.git  rel/tracing/xen-internals
 http://xenbits.xen.org/gitweb/?p=people/dariof/xen.git;a=shortlog;h=refs/heads/rel/tracing/xen-internals

And Travis is happy about it:
 https://travis-ci.org/fdario/xen/builds/238421024

Let me know what you think.

Thanks and Regards,
Dario
---
Dario Faggioli (15):
      xen: in do_softirq() sample smp_processor_id() once and for all.
      xen: tracing: avoid checking tb_init_done multiple times.
      xen/tools: tracing: several improvements on IRQs tracing
      tools: xenalyze: fix dumping of PM_IDLE events.
      xen: make it possible to disable tracing in Kconfig.
      xen: trace IRQ enabling/disabling
      tools: tracing: handle IRQs on/off events in xentrace and xenalyze
      xen: trace RCU behavior
      tools: tracing: handle RCU events in xentrace and xenalyze
      xen: trace softirqs
      tools: tracing: handle RCU events in xentrace and xenalyze
      xen: trace tasklets
      tools: tracing: handle tasklets events in xentrace and xenalyze
      xen: trace timers
      tools: tracing: handle timers events in xentrace and xenalyze

 tools/xentrace/analyze.h           |    1 
 tools/xentrace/formats             |   39 +++
 tools/xentrace/xenalyze.c          |  525 +++++++++++++++++++++++++++++++++++-
 xen/Kconfig.debug                  |   50 +++
 xen/arch/x86/hvm/svm/entry.S       |    2 
 xen/arch/x86/irq.c                 |   61 +++-
 xen/arch/x86/trace.c               |   23 ++
 xen/common/rcupdate.c              |   82 +++++-
 xen/common/softirq.c               |   66 ++++-
 xen/common/spinlock.c              |   16 +
 xen/common/tasklet.c               |   87 ++++++
 xen/common/timer.c                 |  158 ++++++++++-
 xen/common/trace.c                 |   57 +++-
 xen/drivers/cpufreq/utility.c      |    7 
 xen/include/asm-arm/arm32/system.h |   12 +
 xen/include/asm-arm/arm64/system.h |   12 +
 xen/include/asm-x86/system.h       |   85 +++++-
 xen/include/public/trace.h         |   48 +++
 xen/include/xen/rwlock.h           |   33 ++
 xen/include/xen/trace.h            |   30 ++
 20 files changed, 1320 insertions(+), 74 deletions(-)
--
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

             reply	other threads:[~2017-06-01 17:33 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-01 17:33 Dario Faggioli [this message]
2017-06-01 17:33 ` [PATCH 01/15] xen: in do_softirq() sample smp_processor_id() once and for all Dario Faggioli
2017-06-07 14:38   ` Jan Beulich
2017-06-08 14:12     ` George Dunlap
2017-06-08 14:20   ` George Dunlap
2017-06-08 14:42     ` Jan Beulich
2017-06-01 17:33 ` [PATCH 02/15] xen: tracing: avoid checking tb_init_done multiple times Dario Faggioli
2017-06-01 17:53   ` Andrew Cooper
2017-06-01 23:08     ` Dario Faggioli
2017-06-07 14:46   ` Jan Beulich
2017-06-07 15:55     ` Dario Faggioli
2017-06-07 16:06       ` Jan Beulich
2017-06-08 14:34         ` George Dunlap
2017-06-08 14:37   ` George Dunlap
2017-06-01 17:33 ` [PATCH 03/15] xen/tools: tracing: several improvements on IRQs tracing Dario Faggioli
2017-06-01 18:02   ` Andrew Cooper
2017-06-01 23:12     ` Dario Faggioli
2017-06-07 15:05   ` Jan Beulich
2017-06-07 15:45     ` Dario Faggioli
2017-06-07 15:58       ` Jan Beulich
2017-06-08 14:53         ` George Dunlap
2017-06-08 15:34           ` Jan Beulich
2017-06-08 14:59   ` George Dunlap
2017-06-01 17:34 ` [PATCH 04/15] tools: xenalyze: fix dumping of PM_IDLE events Dario Faggioli
2017-06-08 15:06   ` George Dunlap
2017-06-01 17:34 ` [PATCH 05/15] xen: make it possible to disable tracing in Kconfig Dario Faggioli
2017-06-01 18:43   ` Andrew Cooper
2017-06-07 11:01     ` Julien Grall
2017-06-07 15:14   ` Jan Beulich
2017-06-08 15:16     ` George Dunlap
2017-06-08 15:35       ` Jan Beulich
2017-06-08 15:37         ` George Dunlap
2017-06-08 15:44           ` Jan Beulich
2017-06-08 15:17   ` George Dunlap
2017-06-01 17:34 ` [PATCH 06/15] xen: trace IRQ enabling/disabling Dario Faggioli
2017-06-01 19:08   ` Andrew Cooper
2017-06-01 23:42     ` Dario Faggioli
2017-06-08 15:51       ` George Dunlap
2017-06-08 16:05       ` Jan Beulich
2017-06-07 11:16   ` Julien Grall
2017-06-07 15:22     ` Dario Faggioli
2017-06-09 10:51       ` Julien Grall
2017-06-09 10:53         ` Julien Grall
2017-06-09 10:55         ` George Dunlap
2017-06-09 11:00           ` Julien Grall
2017-06-08 16:01   ` George Dunlap
2017-06-08 16:11     ` Dario Faggioli
2017-06-09 10:41   ` Jan Beulich
2017-06-01 17:34 ` [PATCH 07/15] tools: tracing: handle IRQs on/off events in xentrace and xenalyze Dario Faggioli
2017-06-13 15:58   ` George Dunlap
2017-06-01 17:34 ` [PATCH 08/15] xen: trace RCU behavior Dario Faggioli
2017-06-09 10:48   ` Jan Beulich
2017-06-13 16:05   ` George Dunlap
2017-06-01 17:34 ` [PATCH 09/15] tools: tracing: handle RCU events in xentrace and xenalyze Dario Faggioli
2017-06-13 16:12   ` George Dunlap
2017-06-01 17:34 ` [PATCH 10/15] xen: trace softirqs Dario Faggioli
2017-06-09 10:51   ` Jan Beulich
2017-06-01 17:34 ` [PATCH 11/15] tools: tracing: handle RCU events in xentrace and xenalyze Dario Faggioli
2017-06-01 17:35 ` [PATCH 12/15] xen: trace tasklets Dario Faggioli
2017-06-09 10:59   ` Jan Beulich
2017-06-09 11:17     ` Dario Faggioli
2017-06-09 11:29       ` Jan Beulich
2017-06-01 17:35 ` [PATCH 13/15] tools: tracing: handle tasklets events in xentrace and xenalyze Dario Faggioli
2017-06-01 17:35 ` [PATCH 14/15] xen: trace timers Dario Faggioli
2017-06-01 17:35 ` [PATCH 15/15] tools: tracing: handle timers events in xentrace and xenalyze Dario Faggioli
2017-06-07 14:13 ` [PATCH 00/15] xen/tools: add tracing to various Xen subsystems Konrad Rzeszutek Wilk
2017-06-08 16:45   ` Dario Faggioli
2017-06-13 16:34 ` George Dunlap

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=149633614204.12814.14390287626133023934.stgit@Solace.fritz.box \
    --to=dario.faggioli@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=cardoe@cardoe.com \
    --cc=george.dunlap@eu.citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=jennifer.herbert@citrix.com \
    --cc=julien.grall@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=tim@xen.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /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).