[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] scheduler: Use perf_counter subsystem for stats
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1236594744 0 # Node ID b249f3e979a5152c7fda4b1037846d75982b726d # Parent f57ac4af36b431b10645ee145270ee658f46d58d scheduler: Use perf_counter subsystem for stats Signed-off-by: Xiaowei Yang <xiaowei.yang@xxxxxxxxx> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- xen/common/sched_credit.c | 93 ++----------------------------------------- xen/include/xen/perfc_defn.h | 34 +++++++++++++++ 2 files changed, 39 insertions(+), 88 deletions(-) diff -r f57ac4af36b4 -r b249f3e979a5 xen/common/sched_credit.c --- a/xen/common/sched_credit.c Mon Mar 09 09:56:16 2009 +0000 +++ b/xen/common/sched_credit.c Mon Mar 09 10:32:24 2009 +0000 @@ -25,12 +25,14 @@ /* * CSCHED_STATS * - * Manage very basic counters and stats. + * Manage very basic per-vCPU counters and stats. * * Useful for debugging live systems. The stats are displayed * with runq dumps ('r' on the Xen console). */ +#ifdef PERF_COUNTERS #define CSCHED_STATS +#endif /* @@ -77,86 +79,9 @@ /* * Stats */ +#define CSCHED_STAT_CRANK(_X) (perfc_incr(_X)) + #ifdef CSCHED_STATS - -#define CSCHED_STAT(_X) (csched_priv.stats._X) -#define CSCHED_STAT_DEFINE(_X) uint32_t _X; -#define CSCHED_STAT_PRINTK(_X) \ - do \ - { \ - printk("\t%-30s = %u\n", #_X, CSCHED_STAT(_X)); \ - } while ( 0 ); - -/* - * Try and keep often cranked stats on top so they'll fit on one - * cache line. - */ -#define CSCHED_STATS_EXPAND_SCHED(_MACRO) \ - _MACRO(schedule) \ - _MACRO(acct_run) \ - _MACRO(acct_no_work) \ - _MACRO(acct_balance) \ - _MACRO(acct_reorder) \ - _MACRO(acct_min_credit) \ - _MACRO(acct_vcpu_active) \ - _MACRO(acct_vcpu_idle) \ - _MACRO(vcpu_sleep) \ - _MACRO(vcpu_wake_running) \ - _MACRO(vcpu_wake_onrunq) \ - _MACRO(vcpu_wake_runnable) \ - _MACRO(vcpu_wake_not_runnable) \ - _MACRO(vcpu_park) \ - _MACRO(vcpu_unpark) \ - _MACRO(tickle_local_idler) \ - _MACRO(tickle_local_over) \ - _MACRO(tickle_local_under) \ - _MACRO(tickle_local_other) \ - _MACRO(tickle_idlers_none) \ - _MACRO(tickle_idlers_some) \ - _MACRO(load_balance_idle) \ - _MACRO(load_balance_over) \ - _MACRO(load_balance_other) \ - _MACRO(steal_trylock_failed) \ - _MACRO(steal_peer_idle) \ - _MACRO(migrate_queued) \ - _MACRO(migrate_running) \ - _MACRO(dom_init) \ - _MACRO(dom_destroy) \ - _MACRO(vcpu_init) \ - _MACRO(vcpu_destroy) \ - _MACRO(vcpu_hot) - -#ifndef NDEBUG -#define CSCHED_STATS_EXPAND_CHECKS(_MACRO) \ - _MACRO(vcpu_check) -#else -#define CSCHED_STATS_EXPAND_CHECKS(_MACRO) -#endif - -#define CSCHED_STATS_EXPAND(_MACRO) \ - CSCHED_STATS_EXPAND_CHECKS(_MACRO) \ - CSCHED_STATS_EXPAND_SCHED(_MACRO) - -#define CSCHED_STATS_RESET() \ - do \ - { \ - memset(&csched_priv.stats, 0, sizeof(csched_priv.stats)); \ - } while ( 0 ) - -#define CSCHED_STATS_DEFINE() \ - struct \ - { \ - CSCHED_STATS_EXPAND(CSCHED_STAT_DEFINE) \ - } stats; - -#define CSCHED_STATS_PRINTK() \ - do \ - { \ - printk("stats:\n"); \ - CSCHED_STATS_EXPAND(CSCHED_STAT_PRINTK) \ - } while ( 0 ) - -#define CSCHED_STAT_CRANK(_X) (CSCHED_STAT(_X)++) #define CSCHED_VCPU_STATS_RESET(_V) \ do \ @@ -170,10 +95,6 @@ #else /* CSCHED_STATS */ -#define CSCHED_STATS_RESET() do {} while ( 0 ) -#define CSCHED_STATS_DEFINE() -#define CSCHED_STATS_PRINTK() do {} while ( 0 ) -#define CSCHED_STAT_CRANK(_X) do {} while ( 0 ) #define CSCHED_VCPU_STATS_RESET(_V) do {} while ( 0 ) #define CSCHED_VCPU_STAT_CRANK(_V, _X) do {} while ( 0 ) #define CSCHED_VCPU_STAT_SET(_V, _X, _Y) do {} while ( 0 ) @@ -239,7 +160,6 @@ struct csched_private { uint32_t credit; int credit_balance; uint32_t runq_sort; - CSCHED_STATS_DEFINE() }; @@ -1339,8 +1259,6 @@ csched_dump(void) cpumask_scnprintf(idlers_buf, sizeof(idlers_buf), csched_priv.idlers); printk("idlers: %s\n", idlers_buf); - CSCHED_STATS_PRINTK(); - printk("active vcpus:\n"); loop = 0; list_for_each( iter_sdom, &csched_priv.active_sdom ) @@ -1371,7 +1289,6 @@ csched_init(void) csched_priv.credit = 0U; csched_priv.credit_balance = 0; csched_priv.runq_sort = 0U; - CSCHED_STATS_RESET(); } /* Tickers cannot be kicked until SMP subsystem is alive. */ diff -r f57ac4af36b4 -r b249f3e979a5 xen/include/xen/perfc_defn.h --- a/xen/include/xen/perfc_defn.h Mon Mar 09 09:56:16 2009 +0000 +++ b/xen/include/xen/perfc_defn.h Mon Mar 09 10:32:24 2009 +0000 @@ -16,6 +16,40 @@ PERFCOUNTER(sched_run, "sch PERFCOUNTER(sched_run, "sched: runs through scheduler") PERFCOUNTER(sched_ctx, "sched: context switches") +PERFCOUNTER(vcpu_check, "csched: vcpu_check") +PERFCOUNTER(schedule, "csched: schedule") +PERFCOUNTER(acct_run, "csched: acct_run") +PERFCOUNTER(acct_no_work, "csched: acct_no_work") +PERFCOUNTER(acct_balance, "csched: acct_balance") +PERFCOUNTER(acct_reorder, "csched: acct_reorder") +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_local_idler, "csched: tickle_local_idler") +PERFCOUNTER(tickle_local_over, "csched: tickle_local_over") +PERFCOUNTER(tickle_local_under, "csched: tickle_local_under") +PERFCOUNTER(tickle_local_other, "csched: tickle_local_other") +PERFCOUNTER(tickle_idlers_none, "csched: tickle_idlers_none") +PERFCOUNTER(tickle_idlers_some, "csched: tickle_idlers_some") +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_failed, "csched: steal_trylock_failed") +PERFCOUNTER(steal_peer_idle, "csched: steal_peer_idle") +PERFCOUNTER(migrate_queued, "csched: migrate_queued") +PERFCOUNTER(migrate_running, "csched: migrate_running") +PERFCOUNTER(dom_init, "csched: dom_init") +PERFCOUNTER(dom_destroy, "csched: dom_destroy") +PERFCOUNTER(vcpu_init, "csched: vcpu_init") +PERFCOUNTER(vcpu_destroy, "csched: vcpu_destroy") + PERFCOUNTER(need_flush_tlb_flush, "PG_need_flush tlb flushes") /*#endif*/ /* __XEN_PERFC_DEFN_H__ */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |