mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
Extra tracing in Xen to support XenMon.
Signed-off-by: Rob Gardner <rob.gardner@hp.com> I also appied some fixes and simplifications to the tracing. Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
21b4e1c2a6
commit
0e3a022f8c
3 files changed
+31
-11
No files matched your search
@@ -29,6 +29,7 @@
|
||||
#include <xen/shadow.h>
|
||||
#include <xen/mm.h>
|
||||
#include <acm/acm_hooks.h>
|
||||
#include <xen/trace.h>
|
||||
|
||||
#if defined(CONFIG_X86_64)
|
||||
#define GRANT_PTE_FLAGS (_PAGE_PRESENT|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER)
|
||||
@@ -379,6 +380,8 @@ __gnttab_map_grant_ref(
|
||||
}
|
||||
}
|
||||
|
||||
TRACE_1D(TRC_MEM_PAGE_GRANT_MAP, dom);
|
||||
|
||||
ld->grant_table->maptrack[handle].domid = dom;
|
||||
ld->grant_table->maptrack[handle].ref_and_flags =
|
||||
(ref << MAPTRACK_REF_SHIFT) |
|
||||
@@ -463,6 +466,8 @@ __gnttab_unmap_grant_ref(
|
||||
return GNTST_bad_domain;
|
||||
}
|
||||
|
||||
TRACE_1D(TRC_MEM_PAGE_GRANT_UNMAP, dom);
|
||||
|
||||
act = &rd->grant_table->active[ref];
|
||||
sha = &rd->grant_table->shared[ref];
|
||||
|
||||
@@ -802,6 +807,8 @@ gnttab_transfer(
|
||||
page_set_owner(page, e);
|
||||
|
||||
spin_unlock(&e->page_alloc_lock);
|
||||
|
||||
TRACE_1D(TRC_MEM_PAGE_GRANT_TRANSFER, e->domain_id);
|
||||
|
||||
/* Tell the guest about its new page frame. */
|
||||
sha = &e->grant_table->shared[gop->ref];
|
||||
|
||||
+17
-11
@@ -13,15 +13,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/*#define WAKE_HISTO*/
|
||||
/*#define BLOCKTIME_HISTO*/
|
||||
|
||||
#if defined(WAKE_HISTO)
|
||||
#define BUCKETS 31
|
||||
#elif defined(BLOCKTIME_HISTO)
|
||||
#define BUCKETS 200
|
||||
#endif
|
||||
|
||||
#include <xen/config.h>
|
||||
#include <xen/init.h>
|
||||
#include <xen/lib.h>
|
||||
@@ -45,6 +36,8 @@ extern void arch_getdomaininfo_ctxt(struct vcpu *,
|
||||
static char opt_sched[10] = "sedf";
|
||||
string_param("sched", opt_sched);
|
||||
|
||||
/*#define WAKE_HISTO*/
|
||||
/*#define BLOCKTIME_HISTO*/
|
||||
#if defined(WAKE_HISTO)
|
||||
#define BUCKETS 31
|
||||
#elif defined(BLOCKTIME_HISTO)
|
||||
@@ -205,9 +198,7 @@ void vcpu_wake(struct vcpu *v)
|
||||
if ( likely(domain_runnable(v)) )
|
||||
{
|
||||
SCHED_OP(wake, v);
|
||||
#ifdef WAKE_HISTO
|
||||
v->wokenup = NOW();
|
||||
#endif
|
||||
}
|
||||
clear_bit(_VCPUF_cpu_migrated, &v->vcpu_flags);
|
||||
spin_unlock_irqrestore(&schedule_data[v->processor].schedule_lock, flags);
|
||||
@@ -416,11 +407,26 @@ static void __enter_scheduler(void)
|
||||
return continue_running(prev);
|
||||
}
|
||||
|
||||
TRACE_2D(TRC_SCHED_SWITCH_INFPREV,
|
||||
prev->domain->domain_id, now - prev->lastschd);
|
||||
TRACE_3D(TRC_SCHED_SWITCH_INFNEXT,
|
||||
next->domain->domain_id, now - next->wokenup, r_time);
|
||||
|
||||
clear_bit(_VCPUF_running, &prev->vcpu_flags);
|
||||
set_bit(_VCPUF_running, &next->vcpu_flags);
|
||||
|
||||
perfc_incrc(sched_ctx);
|
||||
|
||||
/*
|
||||
* Logic of wokenup field in domain struct:
|
||||
* Used to calculate "waiting time", which is the time that a domain
|
||||
* spends being "runnable", but not actually running. wokenup is set
|
||||
* set whenever a domain wakes from sleeping. However, if wokenup is not
|
||||
* also set here then a preempted runnable domain will get a screwed up
|
||||
* "waiting time" value next time it is scheduled.
|
||||
*/
|
||||
prev->wokenup = NOW();
|
||||
|
||||
#if defined(WAKE_HISTO)
|
||||
if ( !is_idle_task(next->domain) && next->wokenup )
|
||||
{
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#define TRC_SCHED 0x0002f000 /* Xen Scheduler trace */
|
||||
#define TRC_DOM0OP 0x0004f000 /* Xen DOM0 operation trace */
|
||||
#define TRC_VMX 0x0008f000 /* Xen VMX trace */
|
||||
#define TRC_MEM 0x000af000 /* Xen memory trace */
|
||||
#define TRC_ALL 0xfffff000
|
||||
|
||||
/* Trace subclasses */
|
||||
@@ -40,6 +41,12 @@
|
||||
#define TRC_SCHED_S_TIMER_FN (TRC_SCHED + 11)
|
||||
#define TRC_SCHED_T_TIMER_FN (TRC_SCHED + 12)
|
||||
#define TRC_SCHED_DOM_TIMER_FN (TRC_SCHED + 13)
|
||||
#define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED + 14)
|
||||
#define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED + 15)
|
||||
|
||||
#define TRC_MEM_PAGE_GRANT_MAP (TRC_MEM + 1)
|
||||
#define TRC_MEM_PAGE_GRANT_UNMAP (TRC_MEM + 2)
|
||||
#define TRC_MEM_PAGE_GRANT_TRANSFER (TRC_MEM + 3)
|
||||
|
||||
/* trace events per subclass */
|
||||
#define TRC_VMX_VMEXIT (TRC_VMXEXIT + 1)
|
||||
|
||||