[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xentrace: Trace IRQs and entry/exit timestamps.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1242695281 -3600 # Node ID 4e7c5eb717749b043b12a3e8c43487d264276dda # Parent fad68a77af5c71e36130eea1ec8bf967c9495763 xentrace: Trace IRQs and entry/exit timestamps. From: Dulloor <dulloor@xxxxxxxxx> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- tools/xentrace/formats | 1 + tools/xentrace/xentrace_format | 17 +++++++++++++++++ xen/arch/x86/irq.c | 6 ++++++ xen/include/public/trace.h | 1 + 4 files changed, 25 insertions(+) diff -r fad68a77af5c -r 4e7c5eb71774 tools/xentrace/formats --- a/tools/xentrace/formats Tue May 19 01:50:00 2009 +0100 +++ b/tools/xentrace/formats Tue May 19 02:08:01 2009 +0100 @@ -3,6 +3,7 @@ 0x0001f001 CPU%(cpu)d %(tsc)d (+%(relt 0x0001f001 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) lost_records 0x%(1)08x 0x0001f002 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) wrap_buffer 0x%(1)08x 0x0001f003 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) cpu_change 0x%(1)08x +0x0001f004 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) trace_irq [ vector = %(1)d, count = %(2)d, tot_cycles = 0x%(3)08x, max_cycles = 0x%(4)08x ] 0x00021011 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) running_to_runnable [ dom:vcpu = 0x%(1)08x ] 0x00021021 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) running_to_blocked [ dom:vcpu = 0x%(1)08x ] diff -r fad68a77af5c -r 4e7c5eb71774 tools/xentrace/xentrace_format --- a/tools/xentrace/xentrace_format Tue May 19 01:50:00 2009 +0100 +++ b/tools/xentrace/xentrace_format Tue May 19 02:08:01 2009 +0100 @@ -110,6 +110,10 @@ D7REC = "IIIIIII" last_tsc = [0] +TRC_TRACE_IRQ = 0x1f004 +NR_VECTORS = 256 +irq_measure = [{'count':0, 'tot_cycles':0, 'max_cycles':0}] * NR_VECTORS + i=0 while not interrupted: @@ -179,6 +183,19 @@ while not interrupted: if event == 0x1f003: cpu = d1 + if event == TRC_TRACE_IRQ: + # IN - d1:vector, d2:tsc_in, d3:tsc_out + # OUT - d1:vector, d2:count, d3:tot_cycles, d4:max_cycles + tsc_diff = d3 - d2 + if tsc_diff < 0: + break + irq_measure[d1]['count'] += 1 + irq_measure[d1]['tot_cycles'] += tsc_diff + if irq_measure[d1]['max_cycles'] < tsc_diff: + irq_measure[d1]['max_cycles'] = tsc_diff + d2 = irq_measure[d1]['count'] + d3 = irq_measure[d1]['tot_cycles'] + d4 = irq_measure[d1]['max_cycles'] #tsc = (tscH<<32) | tscL diff -r fad68a77af5c -r 4e7c5eb71774 xen/arch/x86/irq.c --- a/xen/arch/x86/irq.c Tue May 19 01:50:00 2009 +0100 +++ b/xen/arch/x86/irq.c Tue May 19 02:08:01 2009 +0100 @@ -16,6 +16,7 @@ #include <xen/compat.h> #include <xen/iocap.h> #include <xen/iommu.h> +#include <xen/trace.h> #include <asm/msi.h> #include <asm/current.h> #include <asm/flushtlb.h> @@ -114,6 +115,7 @@ asmlinkage void do_IRQ(struct cpu_user_r unsigned int vector = regs->entry_vector; irq_desc_t *desc = &irq_desc[vector]; struct irqaction *action; + uint32_t tsc_in; perfc_incr(irqs); @@ -123,7 +125,9 @@ asmlinkage void do_IRQ(struct cpu_user_r if ( likely(desc->status & IRQ_GUEST) ) { irq_enter(); + tsc_in = tb_init_done ? get_cycles() : 0; __do_IRQ_guest(vector); + TRACE_3D(TRC_TRACE_IRQ, vector, tsc_in, get_cycles()); irq_exit(); spin_unlock(&desc->lock); return; @@ -147,7 +151,9 @@ asmlinkage void do_IRQ(struct cpu_user_r desc->status &= ~IRQ_PENDING; irq_enter(); spin_unlock_irq(&desc->lock); + tsc_in = tb_init_done ? get_cycles() : 0; action->handler(vector_to_irq(vector), action->dev_id, regs); + TRACE_3D(TRC_TRACE_IRQ, vector, tsc_in, get_cycles()); spin_lock_irq(&desc->lock); irq_exit(); } diff -r fad68a77af5c -r 4e7c5eb71774 xen/include/public/trace.h --- a/xen/include/public/trace.h Tue May 19 01:50:00 2009 +0100 +++ b/xen/include/public/trace.h Tue May 19 02:08:01 2009 +0100 @@ -59,6 +59,7 @@ #define TRC_LOST_RECORDS (TRC_GEN + 1) #define TRC_TRACE_WRAP_BUFFER (TRC_GEN + 2) #define TRC_TRACE_CPU_CHANGE (TRC_GEN + 3) +#define TRC_TRACE_IRQ (TRC_GEN + 4) #define TRC_SCHED_RUNSTATE_CHANGE (TRC_SCHED_MIN + 1) #define TRC_SCHED_CONTINUE_RUNNING (TRC_SCHED_MIN + 2) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |