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>,
Julien Grall <julien.grall@arm.com>,
Jan Beulich <jbeulich@suse.com>,
Doug Goldstein <cardoe@cardoe.com>
Subject: [PATCH 05/15] xen: make it possible to disable tracing in Kconfig.
Date: Thu, 01 Jun 2017 19:34:09 +0200 [thread overview]
Message-ID: <149633844944.12814.3257610267149025065.stgit@Solace.fritz.box> (raw)
In-Reply-To: <149633614204.12814.14390287626133023934.stgit@Solace.fritz.box>
And compile it out of the hypervisor entirely.
Code and other sections' sizes change as follows.
Output of `size`:
vanilla patched-Y patched-N
text 1929007 1929007 1902783
data 337784 337784 337688
bss 1310464 1310464 1310336
Output of `size -A`:
vanilla patched-Y patched-N
.text 1372602 1372602 1348026
.rodata 312152 312152 310680
.init.text 244209 244209 244033
.init.data 224576 224576 224576
.data 57472 57472 57376
.bss 1310464 1310464 1310336
Total 23026516 23027008 22858069
No functional change intended.
Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
---
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Julien Grall <julien.grall@arm.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Doug Goldstein <cardoe@cardoe.com>
---
xen/Kconfig.debug | 8 ++++++++
xen/arch/x86/hvm/svm/entry.S | 2 ++
xen/arch/x86/trace.c | 23 +++++++++++++++++++++++
xen/common/trace.c | 39 +++++++++++++++++++++++++++++++++++----
xen/drivers/cpufreq/utility.c | 7 +++++--
xen/include/xen/trace.h | 30 +++++++++++++++++++++++++++++-
6 files changed, 102 insertions(+), 7 deletions(-)
diff --git a/xen/Kconfig.debug b/xen/Kconfig.debug
index 689f297..374c1c0 100644
--- a/xen/Kconfig.debug
+++ b/xen/Kconfig.debug
@@ -98,6 +98,14 @@ config PERF_ARRAYS
---help---
Enables software performance counter array histograms.
+config TRACING
+ bool "Tracing"
+ default y
+ ---help---
+ Enables collecting traces of events occurring in the hypervisor
+ in per-CPU ring buffers. The 'xentrace' tool can be used to read
+ the buffers and dump the content on the disk.
+
config VERBOSE_DEBUG
bool "Verbose debug messages"
diff --git a/xen/arch/x86/hvm/svm/entry.S b/xen/arch/x86/hvm/svm/entry.S
index a4ab40a..ea4a106 100644
--- a/xen/arch/x86/hvm/svm/entry.S
+++ b/xen/arch/x86/hvm/svm/entry.S
@@ -61,10 +61,12 @@ __UNLIKELY_END(nsvm_hap)
call svm_asid_handle_vmrun
+#ifdef CONFIG_TRACING
cmpb $0,tb_init_done(%rip)
UNLIKELY_START(nz, svm_trace)
call svm_trace_vmentry
UNLIKELY_END(svm_trace)
+#endif
mov VCPU_svm_vmcb(%rbx),%rcx
mov UREGS_rax(%rsp),%rax
diff --git a/xen/arch/x86/trace.c b/xen/arch/x86/trace.c
index 4a953c5..411f798 100644
--- a/xen/arch/x86/trace.c
+++ b/xen/arch/x86/trace.c
@@ -1,3 +1,4 @@
+#ifdef CONFIG_TRACING
#include <xen/init.h>
#include <xen/kernel.h>
#include <xen/lib.h>
@@ -157,3 +158,25 @@ void __trace_ptwr_emulation(unsigned long addr, l1_pgentry_t npte)
__trace_var(event, 1/*tsc*/, sizeof(d), &d);
}
}
+#else /* !CONFIG_TRACING */
+#include <xen/kernel.h>
+#include <xen/trace.h>
+
+void __trace_pv_trap(int trapnr, unsigned long eip,
+ int use_error_code, unsigned error_code)
+{
+}
+void __trace_pv_page_fault(unsigned long addr, unsigned error_code)
+{
+}
+void __trace_trap_one_addr(unsigned event, unsigned long va)
+{
+}
+void __trace_trap_two_addr(unsigned event, unsigned long va1,
+ unsigned long va2)
+{
+}
+void __trace_ptwr_emulation(unsigned long addr, l1_pgentry_t npte)
+{
+}
+#endif /* CONFIG_TRACING */
diff --git a/xen/common/trace.c b/xen/common/trace.c
index f29cd4c..2c18462 100644
--- a/xen/common/trace.c
+++ b/xen/common/trace.c
@@ -48,6 +48,11 @@ static unsigned int opt_tevt_mask;
integer_param("tbuf_size", opt_tbuf_size);
integer_param("tevt_mask", opt_tevt_mask);
+#ifdef CONFIG_TRACING
+/* a flag recording whether initialization has been done */
+/* or more properly, if the tbuf subsystem is enabled right now */
+int tb_init_done __read_mostly;
+
/* Pointers to the meta-data objects for all system trace buffers */
static struct t_info *t_info;
static unsigned int t_info_pages;
@@ -64,10 +69,6 @@ static u32 t_buf_highwater;
static DEFINE_PER_CPU(unsigned long, lost_records);
static DEFINE_PER_CPU(unsigned long, lost_records_first_tsc);
-/* a flag recording whether initialization has been done */
-/* or more properly, if the tbuf subsystem is enabled right now */
-int tb_init_done __read_mostly;
-
/* which CPUs tracing is enabled on */
static cpumask_t tb_cpu_mask;
@@ -868,6 +869,36 @@ void __trace_hypercall(uint32_t event, unsigned long op,
__trace_var(event, 1, sizeof(uint32_t) * (1 + (a - d.args)), &d);
}
+#else /* !CONFIG_TRACING */
+void __init init_trace_bufs(void)
+{
+ opt_tbuf_size = 0;
+}
+
+int tb_control(xen_sysctl_tbuf_op_t *tbc)
+{
+ static DEFINE_SPINLOCK(lock);
+ int rc = 0;
+
+ spin_lock(&lock);
+
+ switch ( tbc->cmd )
+ {
+ case XEN_SYSCTL_TBUFOP_get_info:
+ tbc->evt_mask = 0;
+ tbc->buffer_mfn = 0;
+ tbc->size = 0;
+ break;
+ default:
+ rc = -ENOSYS;
+ break;
+ }
+
+ spin_unlock(&lock);
+
+ return rc;
+}
+#endif /* CONFIG_TRACING */
/*
* Local variables:
diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c
index 53879fe..b686a9d 100644
--- a/xen/drivers/cpufreq/utility.c
+++ b/xen/drivers/cpufreq/utility.c
@@ -362,11 +362,14 @@ int __cpufreq_driver_target(struct cpufreq_policy *policy,
if (cpu_online(policy->cpu) && cpufreq_driver->target)
{
- unsigned int prev_freq = policy->cur;
+ uint32_t d[2] = { policy->cur, 0 };
retval = cpufreq_driver->target(policy, target_freq, relation);
if ( retval == 0 )
- TRACE_2D(TRC_PM_FREQ_CHANGE, prev_freq/1000, policy->cur/1000);
+ {
+ d[1] = policy->cur/1000;
+ trace_var(TRC_PM_FREQ_CHANGE, 1, sizeof(d), d);
+ }
}
return retval;
diff --git a/xen/include/xen/trace.h b/xen/include/xen/trace.h
index 12966ea..d1b6c70 100644
--- a/xen/include/xen/trace.h
+++ b/xen/include/xen/trace.h
@@ -21,7 +21,11 @@
#ifndef __XEN_TRACE_H__
#define __XEN_TRACE_H__
+#ifdef CONFIG_TRACING
extern int tb_init_done;
+#else
+#define tb_init_done 0
+#endif
#include <public/sysctl.h>
#include <public/trace.h>
@@ -33,6 +37,7 @@ void init_trace_bufs(void);
/* used to retrieve the physical address of the trace buffers */
int tb_control(struct xen_sysctl_tbuf_op *tbc);
+#ifdef CONFIG_TRACING
int trace_will_trace_event(u32 event);
void __trace_var(u32 event, bool_t cycles, unsigned int extra, const void *);
@@ -113,7 +118,7 @@ void __trace_hypercall(uint32_t event, unsigned long op,
} \
} while ( 0 )
-#define TRACE_6D(_e,d1,d2,d3,d4,d5,d6) \
+#define TRACE_6D(_e,d1,d2,d3,d4,d5,d6) \
do { \
if ( unlikely(tb_init_done) ) \
{ \
@@ -127,5 +132,28 @@ void __trace_hypercall(uint32_t event, unsigned long op,
__trace_var(_e, 1, sizeof(_d), _d); \
} \
} while ( 0 )
+#else /* !CONFIG_TRACING */
+#define trace_will_trace_event(u) (0)
+static inline void __trace_var(u32 event, bool_t cycles, unsigned int extra,
+ const void *extra_data)
+{
+}
+static inline void trace_var(u32 event, int cycles, int extra,
+ const void *extra_data)
+{
+}
+static inline void __trace_hypercall(uint32_t event, unsigned long op,
+ const xen_ulong_t *args)
+{
+}
+
+#define TRACE_0D(e) do {} while ( 0 )
+#define TRACE_1D(e,d1) do {} while ( 0 )
+#define TRACE_2D(e,d1,d2) do {} while ( 0 )
+#define TRACE_3D(e,d1,d2,d3) do {} while ( 0 )
+#define TRACE_4D(e,d1,d2,d3,d4) do {} while ( 0 )
+#define TRACE_5D(e,d1,d2,d3,d4,d5) do {} while ( 0 )
+#define TRACE_6D(e,d1,d2,d3,d4,d5,d6) do {} while ( 0 )
+#endif /* CONFIG_TRACING */
#endif /* __XEN_TRACE_H__ */
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-06-01 17:34 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-01 17:33 [PATCH 00/15] xen/tools: add tracing to various Xen subsystems Dario Faggioli
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 ` Dario Faggioli [this message]
2017-06-01 18:43 ` [PATCH 05/15] xen: make it possible to disable tracing in Kconfig 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=149633844944.12814.3257610267149025065.stgit@Solace.fritz.box \
--to=dario.faggioli@citrix.com \
--cc=George.Dunlap@eu.citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=cardoe@cardoe.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=julien.grall@arm.com \
--cc=sstabellini@kernel.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).