Hypervisor changes for XenMon
PATCH 1/1 Hypervisor changes for XenMon
This patch is only the small changes needed in the hypervisor to support XenMon. The user space tools will be sent out as another patch very shortly.
This has been tested on x86-32 and x86-64, and x86-32/smp.
# HG changeset patch
# User [email protected]
# Node ID f8bdbd78249667b300a9b73a2c4b9e5909eaa9e7 # Parent 1444adb1c407d6030a2c294976991414b47487d5 Several new trace calls added to support XenMon.
xen/common/grant_table.c Fri Nov 11 23:13:49 2005 renamed from xen/common/grant_table.c Fri Nov 11 16:04:17 2005 +0 -0
@@ -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 @@
}
}+ TRACE_1D(TRC_MEM_PAGE_FLIP, dom);
+
ld->grant_table->maptrack[handle].domid = dom;
ld->grant_table->maptrack[handle].ref_and_flags =
(ref << MAPTRACK_REF_SHIFT) |
@@ -462,6 +465,8 @@
(void)__put_user(GNTST_bad_domain, &uop->status);
return GNTST_bad_domain;
}+
+ TRACE_1D(TRC_MEM_PAGE_FLIP, dom);
act = &rd->grant_table->active[ref];
sha = &rd->grant_table->shared[ref];xen/common/schedule.c Fri Nov 11 23:13:49 2005 renamed from xen/common/schedule.c Fri Nov 11 16:04:17 2005 +21 -0
@@ -398,6 +398,9 @@ prev->cpu_time += now - prev->lastschd; + TRACE_2D(TRC_SCHED_SWITCH_INFPREV, + prev->domain->domain_id, (unsigned long)(now - prev->lastschd)); + /* get policy-specific decision on scheduling... */ next_slice = ops.do_schedule(now);
@@ -413,13 +416,31 @@ if ( unlikely(prev == next) ) { spin_unlock_irq(&schedule_data[cpu].schedule_lock); + TRACE_3D(TRC_SCHED_SWITCH_INFNEXT, + next->domain->domain_id, 0, r_time); return continue_running(prev); } + else { + TRACE_3D(TRC_SCHED_SWITCH_INFNEXT, + next->domain->domain_id, (unsigned long)(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 by XenMon to calculate "waiting time", which is the time that a + * domain spends being "runnable", but not actually running. wokenup is + * set whenever a domain wakes from sleeping, and also whenever a domain + * *stops* running. Perhaps a better thing to call it for this purpose + * would be "time_when_domain_became_runnable". If wokenup is not set here + * when a domain stops running, then it will retain its stale value and + * ruin the calculation. + */ + prev->wokenup = NOW();
#if defined(WAKE_HISTO)
if ( !is_idle_task(next->domain) && next->wokenup )xen/include/public/trace.h Fri Nov 11 23:13:49 2005 renamed from xen/include/public/trace.h Fri Nov 11 16:04:17 2005 +0 -0
@@ -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,13 @@
#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_BVT_INFO (TRC_SCHED + 14)
+#define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED + 15) +#define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED + 16) +
+#define TRC_DOM0OP_DOM0WORK (TRC_DOM0OP + 1)
+
+#define TRC_MEM_PAGE_FLIP (TRC_MEM + 1)
/* trace events per subclass */
#define TRC_VMX_VMEXIT (TRC_VMXEXIT + 1)
# HG changeset patch
# User [email protected]
# Node ID f8bdbd78249667b300a9b73a2c4b9e5909eaa9e7 # Parent 1444adb1c407d6030a2c294976991414b47487d5 Several new trace calls added to support XenMon.
xen/common/grant_table.c +5 -0
@@ -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 @@ } } +TRACE_1D (TRC_MEM_PAGE_FLIP , dom); + ld->grant_table->maptrack[handle].domid = dom; ld->grant_table->maptrack[handle].ref_and_flags = (ref << MAPTRACK_REF_SHIFT) |
@@ -462,6 +465,8 @@ (void )__put_user (GNTST_bad_domain, &uop->status);return GNTST_bad_domain; } + +TRACE_1D (TRC_MEM_PAGE_FLIP , dom); act = &rd->grant_table->active[ref]; sha = &rd->grant_table->shared[ref];
xen/common/schedule.c +21 -0
@@ -398,6 +398,9 @@ prev->cpu_time += now - prev->lastschd; +TRACE_2D (TRC_SCHED_SWITCH_INFPREV , + prev->domain->domain_id, (unsigned long )(now - prev->lastschd)); +/* get policy-specific decision on scheduling... */ next_slice = ops.do_schedule (now);
@@ -413,13 +416,31 @@if (unlikely (prev == next) ) {spin_unlock_irq (&schedule_data[cpu].schedule_lock); +TRACE_3D (TRC_SCHED_SWITCH_INFNEXT , + next->domain->domain_id,0 , r_time);return continue_running (prev); } +else { +TRACE_3D (TRC_SCHED_SWITCH_INFNEXT , + next->domain->domain_id, (unsigned long )(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 by XenMon to calculate "waiting time", which is the time that a +* domain spends being "runnable", but not actually running. wokenup is +* set whenever a domain wakes from sleeping, and also whenever a domain +* *stops* running. Perhaps a better thing to call it for this purpose +* would be "time_when_domain_became_runnable". If wokenup is not set here +* when a domain stops running, then it will retain its stale value and +* ruin the calculation. +*/ + prev->wokenup =NOW ();#if defined(WAKE_HISTO )if ( !is_idle_task (next->domain) && next->wokenup )
xen/include/public/trace.h +8 -0
@@ -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,13 @@#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_BVT_INFO (TRC_SCHED + 14) +#define TRC_SCHED_SWITCH_INFPREV (TRC_SCHED + 15) +#define TRC_SCHED_SWITCH_INFNEXT (TRC_SCHED + 16) + +#define TRC_DOM0OP_DOM0WORK (TRC_DOM0OP + 1) + +#define TRC_MEM_PAGE_FLIP (TRC_MEM + 1)/* trace events per subclass */ #define TRC_VMX_VMEXIT (TRC_VMXEXIT + 1)
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel