[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-ia64-devel] PATCH: convert some stats to perfc
Hi, Tristan Why you add perfc(context_switch) in context_switch for IA64? (General sched_ctx is in __enter_scheduler) It seems double counting.(sched_ctx and context_switch gets the same value) (I want to hear your opinion.) Thanks, Atsushi SAKAI >Hi, > >this patch converts a few counters to perfc. >I will try to convert *all* counters to perfc but this is a background task. >I prefer to use the perfc rather than the current counter implementation >because perfc has a better API. > >Tested on dom0. > >Tristan. ># HG changeset patch ># User gingold@virtu10 ># Node ID 9598c908b5be38882ea7b30aa126fe654dd119ed ># Parent 561df7d9cecc92d08bcc34ed45880062b06dc2e6 >Convert some stats to perfc. > >Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx> > >diff -r 561df7d9cecc -r 9598c908b5be xen/arch/ia64/asm-offsets.c >--- a/xen/arch/ia64/asm-offsets.c Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/arch/ia64/asm-offsets.c Thu Aug 03 08:12:21 2006 +0200 >@@ -210,4 +210,9 @@ void foo(void) > DEFINE(IA64_KR_IO_BASE_OFFSET, offsetof (cpu_kr_ia64_t, > _kr[IA64_KR_IO_BASE])); > DEFINE(IA64_KR_CURRENT_STACK_OFFSET, offsetof (cpu_kr_ia64_t, > _kr[IA64_KR_CURRENT_STACK])); > >+#ifdef PERF_COUNTERS >+ BLANK(); >+ DEFINE(RECOVER_TO_PAGE_FAULT_PERFC_OFS, offsetof (struct perfcounter, >recover_to_page_fault)); >+ DEFINE(RECOVER_TO_BREAK_FAULT_PERFC_OFS, offsetof (struct perfcounter, >recover_to_break_fault)); >+#endif > } >diff -r 561df7d9cecc -r 9598c908b5be xen/arch/ia64/xen/domain.c >--- a/xen/arch/ia64/xen/domain.c Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/arch/ia64/xen/domain.c Thu Aug 03 08:12:21 2006 +0200 >@@ -136,7 +136,7 @@ void context_switch(struct vcpu *prev, s > uint64_t pta; > > local_irq_save(spsr); >- context_switch_count++; >+ perfc_incrc(context_switch); > > __ia64_save_fpu(prev->arch._thread.fph); > __ia64_load_fpu(next->arch._thread.fph); >diff -r 561df7d9cecc -r 9598c908b5be xen/arch/ia64/xen/faults.c >--- a/xen/arch/ia64/xen/faults.c Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/arch/ia64/xen/faults.c Thu Aug 03 08:12:21 2006 +0200 >@@ -170,7 +170,7 @@ handle_lazy_cover(struct vcpu *v, struct > PSCB(v,ifs) = regs->cr_ifs; > PSCB(v,incomplete_regframe) = 1; > regs->cr_ifs = 0; >- lazy_cover_count++; >+ perfc_incrc(lazy_cover); > return(1); // retry same instruction with cr.ifs off > } > return(0); >diff -r 561df7d9cecc -r 9598c908b5be xen/arch/ia64/xen/hypercall.c >--- a/xen/arch/ia64/xen/hypercall.c Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/arch/ia64/xen/hypercall.c Thu Aug 03 08:12:21 2006 +0200 >@@ -210,7 +210,7 @@ fw_hypercall (struct pt_regs *regs) > if (regs->r28 == PAL_HALT_LIGHT) { > if (vcpu_deliverable_interrupts(v) || > event_pending(v)) { >- idle_when_pending++; >+ perfc_incrc(idle_when_pending); > vcpu_pend_unspecified_interrupt(v); > //printf("idle w/int#%d pending!\n",pi); > //this shouldn't happen, but it apparently does quite a bit! so don't >@@ -219,7 +219,7 @@ fw_hypercall (struct pt_regs *regs) > //as deliver_pending_interrupt is called on the way out and will deliver it > } > else { >- pal_halt_light_count++; >+ perfc_incrc(pal_halt_light); > do_sched_op_compat(SCHEDOP_yield, 0); > } > regs->r8 = 0; >diff -r 561df7d9cecc -r 9598c908b5be xen/arch/ia64/xen/hyperprivop.S >--- a/xen/arch/ia64/xen/hyperprivop.S Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/arch/ia64/xen/hyperprivop.S Thu Aug 03 08:12:21 2006 +0200 >@@ -978,7 +978,7 @@ END(fast_tlb_miss_reflect) > // we get here if fast_insert fails (e.g. due to metaphysical lookup) > ENTRY(recover_and_page_fault) > #ifdef FAST_REFLECT_CNT >- movl r21=recover_to_page_fault_count;; >+ movl r21=perfcounters + RECOVER_TO_PAGE_FAULT_PERFC_OFS;; > ld8 r22=[r21];; > adds r22=1,r22;; > st8 [r21]=r22;; >@@ -2010,7 +2010,7 @@ END(hyper_ptc_ga) > // recovery block for hyper_itc metaphysical memory lookup > ENTRY(recover_and_dispatch_break_fault) > #ifdef FAST_REFLECT_CNT >- movl r21=recover_to_break_fault_count;; >+ movl r21=perfcounters + RECOVER_TO_BREAK_FAULT_PERFC_OFS;; > ld8 r22=[r21];; > adds r22=1,r22;; > st8 [r21]=r22;; >diff -r 561df7d9cecc -r 9598c908b5be xen/arch/ia64/xen/privop_stat.c >--- a/xen/arch/ia64/xen/privop_stat.c Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/arch/ia64/xen/privop_stat.c Thu Aug 03 08:12:21 2006 +0200 >@@ -2,18 +2,6 @@ > #include <asm/vhpt.h> > #include <xen/lib.h> > #include <asm/uaccess.h> >- >-unsigned long dtlb_translate_count = 0; >-unsigned long tr_translate_count = 0; >-unsigned long phys_translate_count = 0; >-unsigned long vhpt_translate_count = 0; >-unsigned long fast_vhpt_translate_count = 0; >-unsigned long recover_to_page_fault_count = 0; >-unsigned long recover_to_break_fault_count = 0; >-unsigned long idle_when_pending = 0; >-unsigned long pal_halt_light_count = 0; >-unsigned long context_switch_count = 0; >-unsigned long lazy_cover_count = 0; > > unsigned long slow_hyperpriv_cnt[HYPERPRIVOP_MAX+1] = { 0 }; > unsigned long fast_hyperpriv_cnt[HYPERPRIVOP_MAX+1] = { 0 }; >@@ -235,38 +223,6 @@ static int zero_privop_counts(char *buf) > return s - buf; > } > >-static int dump_misc_stats(char *buf) >-{ >- char *s = buf; >- s += sprintf(s,"Virtual TR translations: %ld\n",tr_translate_count); >- s += sprintf(s,"Virtual VHPT slow translations: >%ld\n",vhpt_translate_count); >- s += sprintf(s,"Virtual VHPT fast translations: >%ld\n",fast_vhpt_translate_count); >- s += sprintf(s,"Virtual DTLB translations: %ld\n",dtlb_translate_count); >- s += sprintf(s,"Physical translations: %ld\n",phys_translate_count); >- s += sprintf(s,"Recoveries to page fault: >%ld\n",recover_to_page_fault_count); >- s += sprintf(s,"Recoveries to break fault: >%ld\n",recover_to_break_fault_count); >- s += sprintf(s,"Idle when pending: %ld\n",idle_when_pending); >- s += sprintf(s,"PAL_HALT_LIGHT (no pending): >%ld\n",pal_halt_light_count); >- s += sprintf(s,"context switches: %ld\n",context_switch_count); >- s += sprintf(s,"Lazy covers: %ld\n",lazy_cover_count); >- return s - buf; >-} >- >-static void zero_misc_stats(void) >-{ >- dtlb_translate_count = 0; >- tr_translate_count = 0; >- phys_translate_count = 0; >- vhpt_translate_count = 0; >- fast_vhpt_translate_count = 0; >- recover_to_page_fault_count = 0; >- recover_to_break_fault_count = 0; >- lazy_cover_count = 0; >- pal_halt_light_count = 0; >- idle_when_pending = 0; >- context_switch_count = 0; >-} >- > static const char * const hyperpriv_str[HYPERPRIVOP_MAX+1] = { > 0, "rfi", "rsm.dt", "ssm.dt", "cover", "itc.d", "itc.i", "ssm.i", > "=ivr", "=tpr", "tpr=", "eoi", "itm=", "thash", "ptc.ga", "itr.d", >@@ -360,7 +316,6 @@ int dump_privop_counts_to_user(char __us > n += dump_privop_addrs(buf + n); > #endif > n += dump_vhpt_stats(buf + n); >- n += dump_misc_stats(buf + n); > if (__copy_to_user(ubuf,buf,n)) > return -1; > return n; >@@ -381,7 +336,6 @@ int zero_privop_counts_to_user(char __us > zero_privop_addrs(); > #endif > zero_vhpt_stats(); >- zero_misc_stats(); > zero_reflect_counts(); > if (__copy_to_user(ubuf,buf,n)) > return -1; >diff -r 561df7d9cecc -r 9598c908b5be xen/arch/ia64/xen/vcpu.c >--- a/xen/arch/ia64/xen/vcpu.c Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/arch/ia64/xen/vcpu.c Thu Aug 03 08:12:21 2006 +0200 >@@ -1500,7 +1500,7 @@ IA64FAULT vcpu_translate(VCPU *vcpu, UIN > *pteval = (address & _PAGE_PPN_MASK) | __DIRTY_BITS | > _PAGE_PL_2 | _PAGE_AR_RWX; > *itir = PAGE_SHIFT << 2; >- phys_translate_count++; >+ perfc_incrc(phys_translate); > return IA64_NO_FAULT; > } > } >@@ -1521,7 +1521,7 @@ IA64FAULT vcpu_translate(VCPU *vcpu, UIN > if (trp != NULL) { > *pteval = trp->pte.val; > *itir = trp->itir; >- tr_translate_count++; >+ perfc_incrc(tr_translate); > return IA64_NO_FAULT; > } > } >@@ -1531,7 +1531,7 @@ IA64FAULT vcpu_translate(VCPU *vcpu, UIN > if (trp != NULL) { > *pteval = trp->pte.val; > *itir = trp->itir; >- tr_translate_count++; >+ perfc_incrc(tr_translate); > return IA64_NO_FAULT; > } > } >@@ -1544,7 +1544,7 @@ IA64FAULT vcpu_translate(VCPU *vcpu, UIN > && vcpu_match_tr_entry_no_p(trp,address,rid)) { > *pteval = pte.val; > *itir = trp->itir; >- dtlb_translate_count++; >+ perfc_incrc(dtlb_translate); > return IA64_USE_TLB; > } > >@@ -1582,7 +1582,7 @@ IA64FAULT vcpu_translate(VCPU *vcpu, UIN > /* found mapping in guest VHPT! */ > *itir = rr & RR_PS_MASK; > *pteval = pte.val; >- vhpt_translate_count++; >+ perfc_incrc(vhpt_translate); > return IA64_NO_FAULT; > } > >diff -r 561df7d9cecc -r 9598c908b5be xen/include/asm-ia64/perfc_defn.h >--- a/xen/include/asm-ia64/perfc_defn.h Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/include/asm-ia64/perfc_defn.h Thu Aug 03 08:12:21 2006 +0200 >@@ -1,1 +1,20 @@ >-/* This file is empty. */ >+ >+PERFCOUNTER_CPU(dtlb_translate, "dtlb hit") >+ >+PERFCOUNTER_CPU(tr_translate, "TR hit") >+ >+PERFCOUNTER_CPU(vhpt_translate, "virtual vhpt translation") >+PERFCOUNTER_CPU(fast_vhpt_translate, "virtual vhpt fast translation") >+ >+PERFCOUNTER(recover_to_page_fault, "recoveries to page fault") >+PERFCOUNTER(recover_to_break_fault, "recoveries to break fault") >+ >+PERFCOUNTER_CPU(phys_translate, "metaphysical translation") >+ >+PERFCOUNTER_CPU(idle_when_pending, "vcpu idle at event") >+ >+PERFCOUNTER_CPU(pal_halt_light, "calls to pal_halt_light") >+ >+PERFCOUNTER_CPU(context_switch, "context switch") >+ >+PERFCOUNTER_CPU(lazy_cover, "lazy cover") >diff -r 561df7d9cecc -r 9598c908b5be xen/include/asm-ia64/privop_stat.h >--- a/xen/include/asm-ia64/privop_stat.h Wed Aug 02 15:09:56 2006 -0600 >+++ b/xen/include/asm-ia64/privop_stat.h Thu Aug 03 08:12:21 2006 +0200 >@@ -6,24 +6,6 @@ extern int zero_privop_counts_to_user(ch > extern int zero_privop_counts_to_user(char *, int); > > #define PRIVOP_ADDR_COUNT >- >-/* vcpu_translate hit with dtlb. */ >-extern unsigned long dtlb_translate_count; >- >-/* vcpu_translate hit with tr. */ >-extern unsigned long tr_translate_count; >- >-/* vcpu_translate in metaphysical mode. */ >-extern unsigned long phys_translate_count; >- >-extern unsigned long vhpt_translate_count; >-extern unsigned long fast_vhpt_translate_count; >-extern unsigned long recover_to_page_fault_count; >-extern unsigned long recover_to_break_fault_count; >-extern unsigned long idle_when_pending; >-extern unsigned long pal_halt_light_count; >-extern unsigned long context_switch_count; >-extern unsigned long lazy_cover_count; > > extern unsigned long slow_hyperpriv_cnt[HYPERPRIVOP_MAX+1]; > extern unsigned long fast_hyperpriv_cnt[HYPERPRIVOP_MAX+1]; >_______________________________________________ >Xen-ia64-devel mailing list >Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx >http://lists.xensource.com/xen-ia64-devel _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |