From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [PATCH 3 of 3] xen: sched_credit: add some tracing Date: Mon, 03 Dec 2012 17:35:00 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel Cc: Keir Fraser , George Dunlap List-Id: xen-devel@lists.xenproject.org About tickling, and PCPU selection. Signed-off-by: Dario Faggioli diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -21,6 +21,7 @@ #include #include #include +#include /* @@ -95,6 +96,20 @@ /* + * Credit tracing events ("only" 512 available!). Check + * include/public/trace.h for more details. + */ +#define TRC_CSCHED_EVENT(_e) ((TRC_SCHED_CLASS|TRC_MASK_CSCHED) + _e) + +#define TRC_CSCHED_SCHED_TASKLET TRC_CSCHED_EVENT(1) +#define TRC_CSCHED_ACCOUNT_START TRC_CSCHED_EVENT(2) +#define TRC_CSCHED_ACCOUNT_STOP TRC_CSCHED_EVENT(3) +#define TRC_CSCHED_STOLEN_VCPU TRC_CSCHED_EVENT(4) +#define TRC_CSCHED_PICKED_CPU TRC_CSCHED_EVENT(5) +#define TRC_CSCHED_TICKLE TRC_CSCHED_EVENT(6) + + +/* * Boot parameters */ static int __read_mostly sched_credit_tslice_ms = CSCHED_DEFAULT_TSLICE_MS; @@ -318,9 +333,26 @@ static inline void } } - /* Send scheduler interrupts to designated CPUs */ if ( !cpumask_empty(&mask) ) + { + if ( unlikely(tb_init_done) ) + { + /* Avoid TRACE_* to avoid a lot of useless !tb_init_done checks */ + for_each_cpu(cpu, &mask) + { + struct { + unsigned cpu:8; + } d; + d.cpu = cpu; + trace_var(TRC_CSCHED_TICKLE, 0, + sizeof(d), + (unsigned char*)&d); + } + } + + /* Send scheduler interrupts to designated CPUs */ cpumask_raise_softirq(&mask, SCHEDULE_SOFTIRQ); + } } static void @@ -552,6 +584,8 @@ static int if ( commit && spc ) spc->idle_bias = cpu; + TRACE_3D(TRC_CSCHED_PICKED_CPU, vc->domain->domain_id, vc->vcpu_id, cpu); + return cpu; } @@ -584,6 +618,9 @@ static inline void } } + TRACE_3D(TRC_CSCHED_ACCOUNT_START, sdom->dom->domain_id, + svc->vcpu->vcpu_id, sdom->active_vcpu_count); + spin_unlock_irqrestore(&prv->lock, flags); } @@ -606,6 +643,9 @@ static inline void { list_del_init(&sdom->active_sdom_elem); } + + TRACE_3D(TRC_CSCHED_ACCOUNT_STOP, sdom->dom->domain_id, + svc->vcpu->vcpu_id, sdom->active_vcpu_count); } static void @@ -1238,6 +1278,8 @@ csched_runq_steal(int peer_cpu, int cpu, if (__csched_vcpu_is_migrateable(vc, cpu)) { /* We got a candidate. Grab it! */ + TRACE_3D(TRC_CSCHED_STOLEN_VCPU, peer_cpu, + vc->domain->domain_id, vc->vcpu_id); SCHED_VCPU_STAT_CRANK(speer, migrate_q); SCHED_STAT_CRANK(migrate_queued); WARN_ON(vc->is_urgent); @@ -1398,6 +1440,7 @@ csched_schedule( /* Tasklet work (which runs in idle VCPU context) overrides all else. */ if ( tasklet_work_scheduled ) { + TRACE_0D(TRC_CSCHED_SCHED_TASKLET); snext = CSCHED_VCPU(idle_vcpu[cpu]); snext->pri = CSCHED_PRI_TS_BOOST; }