]> xenbits.xensource.com Git - xen.git/commitdiff
xen: make tracebuffer configurable
authorBaodong Chen <chenbaodong@mxnavi.com>
Wed, 17 Jul 2019 13:35:22 +0000 (15:35 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 17 Jul 2019 13:35:22 +0000 (15:35 +0200)
Xen internal running status(trace event at pre-defined trace point)
will be saved to trace memory when enabled.
Trace event data and config params can be read/changed
by system control hypercall at run time.

Can be disabled for smaller code footprint.

Signed-off-by: Baodong Chen <chenbaodong@mxnavi.com>
Acked-by: George Dunlap <george.dunlap@citrix.com> [tracing]
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/common/Kconfig
xen/common/Makefile
xen/include/xen/trace.h

index 4497224addec60e9a30f2eab6762bb1791abf91f..912630a4fba5ace8fd78fbf2dfc0bdd92d6a85af 100644 (file)
@@ -357,4 +357,13 @@ config DOM0_MEM
 
          Leave empty if you are not sure what to specify.
 
+config TRACEBUFFER
+       bool "Enable tracing infrastructure" if EXPERT = "y"
+       default y
+       ---help---
+         Enable tracing infrastructure and pre-defined tracepoints within Xen.
+         This will allow live information about Xen\92s execution and performance
+         to be collected at run time for debugging or performance analysis.
+         Memory and execution overhead when not active is minimal.
+
 endmenu
index 33d03b862ffcc1354ff608cb6bc7afb3ac00212b..eddda5daa6d25a0ed06281f16bfdf296e5417733 100644 (file)
@@ -55,7 +55,7 @@ obj-y += sysctl.o
 obj-y += tasklet.o
 obj-y += time.o
 obj-y += timer.o
-obj-y += trace.o
+obj-$(CONFIG_TRACEBUFFER) += trace.o
 obj-y += version.o
 obj-y += virtual_region.o
 obj-y += vm_event.o
index 12966eaa1dbc41271cee9d44edbd5beaa104a194..fad92c784a11555604679f7f463a0d8ade4b114d 100644 (file)
 #ifndef __XEN_TRACE_H__
 #define __XEN_TRACE_H__
 
+/* Put 'tb_init_done' here because 'asm/trace.h' may use it */
+#ifdef CONFIG_TRACEBUFFER
 extern int tb_init_done;
+#else
+#define tb_init_done false
+#endif
 
 #include <public/sysctl.h>
 #include <public/trace.h>
 #include <asm/trace.h>
 
+#ifdef CONFIG_TRACEBUFFER
 /* Used to initialise trace buffer functionality */
 void init_trace_bufs(void);
 
@@ -47,6 +53,26 @@ static inline void trace_var(u32 event, int cycles, int extra,
 void __trace_hypercall(uint32_t event, unsigned long op,
                        const xen_ulong_t *args);
 
+#else
+static inline void init_trace_bufs(void) {}
+static inline int tb_control(struct xen_sysctl_tbuf_op *tbc)
+{
+    return -ENOSYS;
+}
+
+static inline int trace_will_trace_event(uint32_t event)
+{
+    return 0;
+}
+
+static inline void trace_var(uint32_t event, int cycles, int extra,
+                             const void *extra_data) {}
+static inline void __trace_var(uint32_t event, bool cycles, unsigned int extra,
+                               const void *extra_data) {}
+static inline void __trace_hypercall(uint32_t event, unsigned long op,
+                                     const xen_ulong_t *args) {}
+#endif
+
 /* Convenience macros for calling the trace function. */
 #define TRACE_0D(_e)                            \
     do {                                        \