struct csched2_vcpu * const svc = CSCHED2_VCPU(vc);
BUG_ON( is_idle_vcpu(vc) );
+ SCHED_STAT_CRANK(vcpu_sleep);
if ( curr_on_cpu(vc->processor) == vc )
cpu_raise_softirq(vc->processor, SCHEDULE_SOFTIRQ);
BUG_ON( is_idle_vcpu(vc) );
- /* Make sure svc priority mod happens before runq check */
if ( unlikely(curr_on_cpu(vc->processor) == vc) )
{
+ SCHED_STAT_CRANK(vcpu_wake_running);
goto out;
}
if ( unlikely(__vcpu_on_runq(svc)) )
{
- /* If we've boosted someone that's already on a runqueue, prioritize
- * it and inform the cpu in question. */
+ SCHED_STAT_CRANK(vcpu_wake_onrunq);
goto out;
}
+ if ( likely(vcpu_runnable(vc)) )
+ SCHED_STAT_CRANK(vcpu_wake_runnable);
+ else
+ SCHED_STAT_CRANK(vcpu_wake_not_runnable);
+
/* If the context hasn't been saved for this vcpu yet, we can't put it on
* another runqueue. Instead, we set a flag so that it will be put on the runqueue
* after the context has been saved. */
struct rt_vcpu * const svc = rt_vcpu(vc);
BUG_ON( is_idle_vcpu(vc) );
+ SCHED_STAT_CRANK(vcpu_sleep);
if ( curr_on_cpu(vc->processor) == vc )
cpu_raise_softirq(vc->processor, SCHEDULE_SOFTIRQ);
BUG_ON( is_idle_vcpu(vc) );
if ( unlikely(curr_on_cpu(vc->processor) == vc) )
+ {
+ SCHED_STAT_CRANK(vcpu_wake_running);
return;
+ }
/* on RunQ/DepletedQ, just update info is ok */
if ( unlikely(__vcpu_on_q(svc)) )
+ {
+ SCHED_STAT_CRANK(vcpu_wake_onrunq);
return;
+ }
+
+ if ( likely(vcpu_runnable(vc)) )
+ SCHED_STAT_CRANK(vcpu_wake_runnable);
+ else
+ SCHED_STAT_CRANK(vcpu_wake_not_runnable);
/* If context hasn't been saved for this vcpu yet, we can't put it on
* the Runqueue/DepletedQ. Instead, we set a flag so that it will be
PERFCOUNTER(dom_destroy, "sched: dom_destroy")
PERFCOUNTER(vcpu_init, "sched: vcpu_init")
PERFCOUNTER(vcpu_destroy, "sched: vcpu_destroy")
+PERFCOUNTER(vcpu_sleep, "sched: vcpu_sleep")
+PERFCOUNTER(vcpu_wake_running, "sched: vcpu_wake_running")
+PERFCOUNTER(vcpu_wake_onrunq, "sched: vcpu_wake_onrunq")
+PERFCOUNTER(vcpu_wake_runnable, "sched: vcpu_wake_runnable")
+PERFCOUNTER(vcpu_wake_not_runnable, "sched: vcpu_wake_not_runnable")
/* credit specific counters */
PERFCOUNTER(delay_ms, "csched: delay")
PERFCOUNTER(acct_min_credit, "csched: acct_min_credit")
PERFCOUNTER(acct_vcpu_active, "csched: acct_vcpu_active")
PERFCOUNTER(acct_vcpu_idle, "csched: acct_vcpu_idle")
-PERFCOUNTER(vcpu_sleep, "csched: vcpu_sleep")
-PERFCOUNTER(vcpu_wake_running, "csched: vcpu_wake_running")
-PERFCOUNTER(vcpu_wake_onrunq, "csched: vcpu_wake_onrunq")
-PERFCOUNTER(vcpu_wake_runnable, "csched: vcpu_wake_runnable")
-PERFCOUNTER(vcpu_wake_not_runnable, "csched: vcpu_wake_not_runnable")
PERFCOUNTER(vcpu_park, "csched: vcpu_park")
PERFCOUNTER(vcpu_unpark, "csched: vcpu_unpark")
PERFCOUNTER(tickle_idlers_none, "csched: tickle_idlers_none")