mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/tools: tracing: add record for credit1 runqueue stealing.
Including whether we actually tried stealing a vCPU from a given pCPU, or we skipped that one, because of lock contention. Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com> Acked-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
1 parent
47d5292995
commit
46bab93935
4 files changed
+18
-1
No files matched your search
@@ -47,6 +47,7 @@
|
||||
0x00022008 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched:unboost [ dom:vcpu = 0x%(1)04x%(2)04x ]
|
||||
0x00022009 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched:schedule [ cpu[16]:tasklet[8]:idle[8] = %(1)08x ]
|
||||
0x0002200A CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched:ratelimit [ dom:vcpu = 0x%(1)08x, runtime = %(2)d ]
|
||||
0x0002200B CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched:steal_check [ peer_cpu = %(1)d, checked = %(2)d ]
|
||||
|
||||
0x00022201 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:tick
|
||||
0x00022202 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) csched2:runq_pos [ dom:vcpu = 0x%(1)08x, pos = %(2)d]
|
||||
|
||||
@@ -7651,6 +7651,17 @@ void sched_process(struct pcpu_info *p)
|
||||
r->runtime / 1000, r->runtime % 1000);
|
||||
}
|
||||
break;
|
||||
case TRC_SCHED_CLASS_EVT(CSCHED, 11): /* STEAL_CHECK */
|
||||
if(opt.dump_all) {
|
||||
struct {
|
||||
unsigned int peer_cpu, check;
|
||||
} *r = (typeof(r))ri->d;
|
||||
|
||||
printf(" %s csched:load_balance %s %u\n",
|
||||
ri->dump_header, r->check ? "checking" : "skipping",
|
||||
r->peer_cpu);
|
||||
}
|
||||
break;
|
||||
/* CREDIT 2 (TRC_CSCHED2_xxx) */
|
||||
case TRC_SCHED_CLASS_EVT(CSCHED2, 1): /* TICK */
|
||||
case TRC_SCHED_CLASS_EVT(CSCHED2, 4): /* CREDIT_ADD */
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
#define TRC_CSCHED_BOOST_END TRC_SCHED_CLASS_EVT(CSCHED, 8)
|
||||
#define TRC_CSCHED_SCHEDULE TRC_SCHED_CLASS_EVT(CSCHED, 9)
|
||||
#define TRC_CSCHED_RATELIMIT TRC_SCHED_CLASS_EVT(CSCHED, 10)
|
||||
#define TRC_CSCHED_STEAL_CHECK TRC_SCHED_CLASS_EVT(CSCHED, 11)
|
||||
|
||||
|
||||
/*
|
||||
@@ -1753,14 +1754,17 @@ csched_load_balance(struct csched_private *prv, int cpu,
|
||||
* balancing and trying to lock this CPU.
|
||||
*/
|
||||
spinlock_t *lock = pcpu_schedule_trylock(peer_cpu);
|
||||
|
||||
SCHED_STAT_CRANK(steal_trylock);
|
||||
if ( !lock )
|
||||
{
|
||||
SCHED_STAT_CRANK(steal_trylock_failed);
|
||||
TRACE_2D(TRC_CSCHED_STEAL_CHECK, peer_cpu, /* skip */ 0);
|
||||
peer_cpu = cpumask_cycle(peer_cpu, &workers);
|
||||
continue;
|
||||
}
|
||||
|
||||
TRACE_2D(TRC_CSCHED_STEAL_CHECK, peer_cpu, /* checked */ 1);
|
||||
|
||||
/* Any work over there to steal? */
|
||||
speer = cpumask_test_cpu(peer_cpu, online) ?
|
||||
csched_runq_steal(peer_cpu, cpu, snext->pri, bstep) : NULL;
|
||||
|
||||
@@ -48,6 +48,7 @@ PERFCOUNTER(vcpu_unpark, "csched: vcpu_unpark")
|
||||
PERFCOUNTER(load_balance_idle, "csched: load_balance_idle")
|
||||
PERFCOUNTER(load_balance_over, "csched: load_balance_over")
|
||||
PERFCOUNTER(load_balance_other, "csched: load_balance_other")
|
||||
PERFCOUNTER(steal_trylock, "csched: steal_trylock")
|
||||
PERFCOUNTER(steal_trylock_failed, "csched: steal_trylock_failed")
|
||||
PERFCOUNTER(steal_peer_idle, "csched: steal_peer_idle")
|
||||
PERFCOUNTER(migrate_queued, "csched: migrate_queued")
|
||||
|
||||