[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 09/10] xen/tools: tracing: trace (Credit2) runq traversal.
On Thu, Feb 9, 2017 at 1:59 PM, Dario Faggioli <dario.faggioli@xxxxxxxxxx> wrote: > When traversing a Credit2 runqueue to select the > best candidate vCPU to be run next, show in the > trace which vCPUs we consider. > > A bit verbose, but quite useful, considering that > we may end up looking at, but then discarding, one > of more vCPU. This will help understand which ones > are skipped and why. This sounds useful -- but what I don't quite understand is why it's useful simply to know that a vcpu was considered, and not also know specifically why it was decided against. (I'm sure you've found it useful or you wouldn't have submitted the patch.) Anyway, I can check it in as-is (if it applies). Acked-by: George Dunlap <george.dunlap@xxxxxxxxxx> > > Also, add how much credits the chosen vCPU has > (in the TRC_CSCHED2_RUNQ_CANDIDATE record). And, > while there, fix a bug in tools/xentrace/formats > (still in the output of TRC_CSCHED2_RUNQ_CANDIDATE). > > Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> > --- > Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx> > --- > tools/xentrace/formats | 3 ++- > tools/xentrace/xenalyze.c | 15 +++++++++++++-- > xen/common/sched_credit2.c | 15 +++++++++++++++ > 3 files changed, 30 insertions(+), 3 deletions(-) > > diff --git a/tools/xentrace/formats b/tools/xentrace/formats > index db89f92..72c0b24 100644 > --- a/tools/xentrace/formats > +++ b/tools/xentrace/formats > @@ -65,9 +65,10 @@ > 0x00022210 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:load_check [ > lrq_id[16]:orq_id[16] = 0x%(1)08x, delta = %(2)d ] > 0x00022211 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:load_balance [ > l_bavgload = 0x%(2)08x%(1)08x, o_bavgload = 0x%(4)08x%(3)08x, > lrq_id[16]:orq_id[16] = 0x%(5)08x ] > 0x00022212 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:pick_cpu [ > b_avgload = 0x%(2)08x%(1)08x, dom:vcpu = 0x%(3)08x, rq_id[16]:new_cpu[16] = > %(4)d ] > -0x00022213 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:runq_candidate [ > dom:vcpu = 0x%(1)08x, skipped_vcpus = %(2)d tickled_cpu = %(3)d ] > +0x00022213 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:runq_candidate [ > dom:vcpu = 0x%(1)08x, credit = %(4)d, skipped_vcpus = %(3)d, tickled_cpu = > %(2)d ] > 0x00022214 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:schedule [ > rq:cpu = 0x%(1)08x, tasklet[8]:idle[8]:smt_idle[8]:tickled[8] = %(2)08x ] > 0x00022215 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:ratelimit [ > dom:vcpu = 0x%(1)08x, runtime = %(2)d ] > +0x00022216 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:runq_cand_chk [ > dom:vcpu = 0x%(1)08x ] > > 0x00022801 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) rtds:tickle [ cpu = > %(1)d ] > 0x00022802 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) rtds:runq_pick [ > dom:vcpu = 0x%(1)08x, cur_deadline = 0x%(3)08x%(2)08x, cur_budget = > 0x%(5)08x%(4)08x ] > diff --git a/tools/xentrace/xenalyze.c b/tools/xentrace/xenalyze.c > index a90da20..2678e2a 100644 > --- a/tools/xentrace/xenalyze.c > +++ b/tools/xentrace/xenalyze.c > @@ -7825,12 +7825,13 @@ void sched_process(struct pcpu_info *p) > struct { > unsigned vcpuid:16, domid:16; > unsigned tickled_cpu, skipped; > + int credit; > } *r = (typeof(r))ri->d; > > - printf(" %s csched2:runq_candidate d%uv%u, " > + printf(" %s csched2:runq_candidate d%uv%u, credit = %d, " > "%u vcpus skipped, ", > ri->dump_header, r->domid, r->vcpuid, > - r->skipped); > + r->credit, r->skipped); > if (r->tickled_cpu == (unsigned)-1) > printf("no cpu was tickled\n"); > else > @@ -7864,6 +7865,16 @@ void sched_process(struct pcpu_info *p) > r->runtime / 1000, r->runtime % 1000); > } > break; > + case TRC_SCHED_CLASS_EVT(CSCHED2, 23): /* RUNQ_CAND_CHECK */ > + if(opt.dump_all) { > + struct { > + unsigned int vcpuid:16, domid:16; > + } *r = (typeof(r))ri->d; > + > + printf(" %s csched2:runq_cand_check d%uv%u\n", > + ri->dump_header, r->domid, r->vcpuid); > + } > + break; > /* RTDS (TRC_RTDS_xxx) */ > case TRC_SCHED_CLASS_EVT(RTDS, 1): /* TICKLE */ > if(opt.dump_all) { > diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c > index 8057abf..35d6988 100644 > --- a/xen/common/sched_credit2.c > +++ b/xen/common/sched_credit2.c > @@ -57,6 +57,7 @@ > #define TRC_CSCHED2_RUNQ_CANDIDATE TRC_SCHED_CLASS_EVT(CSCHED2, 20) > #define TRC_CSCHED2_SCHEDULE TRC_SCHED_CLASS_EVT(CSCHED2, 21) > #define TRC_CSCHED2_RATELIMIT TRC_SCHED_CLASS_EVT(CSCHED2, 22) > +#define TRC_CSCHED2_RUNQ_CAND_CHECK TRC_SCHED_CLASS_EVT(CSCHED2, 23) > > /* > * WARNING: This is still in an experimental phase. Status and work can be > found at the > @@ -2498,6 +2499,18 @@ runq_candidate(struct csched2_runqueue_data *rqd, > { > struct csched2_vcpu * svc = list_entry(iter, struct csched2_vcpu, > runq_elem); > > + if ( unlikely(tb_init_done) ) > + { > + struct { > + unsigned vcpu:16, dom:16; > + } d; > + d.dom = svc->vcpu->domain->domain_id; > + d.vcpu = svc->vcpu->vcpu_id; > + __trace_var(TRC_CSCHED2_RUNQ_CAND_CHECK, 1, > + sizeof(d), > + (unsigned char *)&d); > + } > + > /* Only consider vcpus that are allowed to run on this processor. */ > if ( !cpumask_test_cpu(cpu, svc->vcpu->cpu_hard_affinity) ) > { > @@ -2546,9 +2559,11 @@ runq_candidate(struct csched2_runqueue_data *rqd, > struct { > unsigned vcpu:16, dom:16; > unsigned tickled_cpu, skipped; > + int credit; > } d; > d.dom = snext->vcpu->domain->domain_id; > d.vcpu = snext->vcpu->vcpu_id; > + d.credit = snext->credit; > d.tickled_cpu = snext->tickled_cpu; > d.skipped = *skipped; > __trace_var(TRC_CSCHED2_RUNQ_CANDIDATE, 1, > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > https://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |