[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [XENTRACE] Remember number of lost trace records when
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Node ID e05d60be5adb22afc42d18d631041cc6e2ccbe91 # Parent 3cdb93867f817243f6e770baf72c58a40d33de5c [XENTRACE] Remember number of lost trace records when trace buffer is full and write a 'number of lost records' entry when space becomes available. From: Rob Gardner <rob.gardner@xxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- xen/common/trace.c | 23 ++++++++++++++++++++--- xen/include/public/trace.h | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff -r 3cdb93867f81 -r e05d60be5adb xen/common/trace.c --- a/xen/common/trace.c Mon Jul 10 16:09:20 2006 +0100 +++ b/xen/common/trace.c Mon Jul 10 17:05:44 2006 +0100 @@ -46,6 +46,8 @@ static int nr_recs; /* Send virtual interrupt when buffer level reaches this point */ static int t_buf_highwater; +/* Number of records lost due to per-CPU trace buffer being full. */ +static DEFINE_PER_CPU(unsigned long, lost_records); /* a flag recording whether initialization has been done */ /* or more properly, if the tbuf subsystem is enabled right now */ @@ -234,7 +236,7 @@ void trace(u32 event, unsigned long d1, struct t_buf *buf; struct t_rec *rec; unsigned long flags; - + BUG_ON(!tb_init_done); if ( (tb_event_mask & event) == 0 ) @@ -259,10 +261,25 @@ void trace(u32 event, unsigned long d1, local_irq_save(flags); - if ( (buf->prod - buf->cons) >= nr_recs ) - { + /* Check if space for two records (we write two if there are lost recs). */ + if ( (buf->prod - buf->cons) >= (nr_recs - 1) ) + { + this_cpu(lost_records)++; local_irq_restore(flags); return; + } + + if ( unlikely(this_cpu(lost_records) != 0) ) + { + rec = &t_recs[smp_processor_id()][buf->prod % nr_recs]; + memset(rec, 0, sizeof(*rec)); + rec->cycles = (u64)get_cycles(); + rec->event = TRC_LOST_RECORDS; + rec->data[0] = this_cpu(lost_records); + this_cpu(lost_records) = 0; + + wmb(); + buf->prod++; } rec = &t_recs[smp_processor_id()][buf->prod % nr_recs]; diff -r 3cdb93867f81 -r e05d60be5adb xen/include/public/trace.h --- a/xen/include/public/trace.h Mon Jul 10 16:09:20 2006 +0100 +++ b/xen/include/public/trace.h Mon Jul 10 17:05:44 2006 +0100 @@ -26,6 +26,7 @@ #define TRC_VMXIO 0x00088000 /* VMX io emulation trace */ /* Trace events per class */ +#define TRC_LOST_RECORDS (TRC_GEN + 1) #define TRC_SCHED_DOM_ADD (TRC_SCHED + 1) #define TRC_SCHED_DOM_REM (TRC_SCHED + 2) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |