[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.