[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] add perfcounters for pagetable update histograms
ChangeSet 1.1230.4.1, 2005/02/22 18:44:00+00:00, rneugeba@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx add perfcounters for pagetable update histograms Signed-off-by: michael.fetterman@xxxxxxxxxxxx arch/x86/mm.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++- common/perfc.c | 8 +++++-- include/xen/perfc_defn.h | 11 ++++++++- 3 files changed, 66 insertions(+), 5 deletions(-) diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c 2005-04-05 12:04:44 -04:00 +++ b/xen/arch/x86/mm.c 2005-04-05 12:04:44 -04:00 @@ -1686,8 +1686,30 @@ } } +#ifdef PERF_COUNTERS perfc_incrc(calls_to_mmu_update); perfc_addc(num_page_updates, count); + /* + * do a histogram for count. + * first bucket is for count=0, + * second bucket is for count=1 + * last bucket is for count >= 63 * PERFC_PT_UPDATES_BUCKET_SIZE + */ + if ( count == 0 ) + { + perfc_incra(bpt_updates, 0); + } else if ( count == 1 ) + { + perfc_incra(bpt_updates, 1); + } else if ( (count / PERFC_PT_UPDATES_BUCKET_SIZE) + < (PERFC_MAX_PT_UPDATES - 3) ) + { + perfc_incra(bpt_updates, (count / PERFC_PT_UPDATES_BUCKET_SIZE) + 2); + } else + { + perfc_incra(bpt_updates, PERFC_MAX_PT_UPDATES - 1); + } +#endif if ( unlikely(!array_access_ok(VERIFY_READ, ureqs, count, sizeof(req))) ) { @@ -2232,6 +2254,7 @@ int i, cpu = smp_processor_id(); struct exec_domain *ed = current; struct domain *d = ed->domain; + unsigned int count; l1va = ptwr_info[cpu].ptinfo[which].l1va; ptep = (unsigned long *)&linear_pg_table[l1_linear_offset(l1va)]; @@ -2290,7 +2313,7 @@ /* * STEP 2. Validate any modified PTEs. */ - + count = 0; pl1e = ptwr_info[cpu].ptinfo[which].pl1e; for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ ) { @@ -2300,6 +2323,9 @@ if ( likely(l1_pgentry_val(ol1e) == l1_pgentry_val(nl1e)) ) continue; + /* update number of entries modified */ + count++; + /* * Fast path for PTEs that have merely been write-protected * (e.g., during a Unix fork()). A strict reduction in privilege. @@ -2340,6 +2366,30 @@ put_page_from_l1e(ol1e, d); } unmap_domain_mem(pl1e); + +#ifdef PERF_COUNTERS + /* + * do a histogram for count. + * first bucket is for count=0, + * second bucket is for count=1 + * last bucket is for count >= 63 * PERFC_PT_UPDATES_BUCKET_SIZE + */ + if ( count == 0 ) + { + perfc_incra(wpt_updates, 0); + } else if ( count == 1 ) + { + perfc_incra(wpt_updates, 1); + } else if ( (count / PERFC_PT_UPDATES_BUCKET_SIZE) + < (PERFC_MAX_PT_UPDATES - 3) ) + { + perfc_incra(wpt_updates, (count / PERFC_PT_UPDATES_BUCKET_SIZE) + 2); + } else + { + perfc_incra(wpt_updates, PERFC_MAX_PT_UPDATES - 1); + } +#endif + /* * STEP 3. Reattach the L1 p.t. page into the current address space. diff -Nru a/xen/common/perfc.c b/xen/common/perfc.c --- a/xen/common/perfc.c 2005-04-05 12:04:44 -04:00 +++ b/xen/common/perfc.c 2005-04-05 12:04:44 -04:00 @@ -66,9 +66,13 @@ case TYPE_S_ARRAY: for ( j = sum = 0; j < perfc_info[i].nr_elements; j++ ) sum += atomic_read(&counters[j]); - printk("TOTAL[%10d] ", sum); + printk("TOTAL[%10d]\n ", sum); for ( j = 0; j < perfc_info[i].nr_elements; j++ ) - printk("ARR%02d[%10d] ", j, atomic_read(&counters[j])); + { + printk("A%02d[%10d] ", j, atomic_read(&counters[j])); + if ( !(j % 4) ) + printk("\n "); + } counters += j; break; } diff -Nru a/xen/include/xen/perfc_defn.h b/xen/include/xen/perfc_defn.h --- a/xen/include/xen/perfc_defn.h 2005-04-05 12:04:44 -04:00 +++ b/xen/include/xen/perfc_defn.h 2005-04-05 12:04:44 -04:00 @@ -35,7 +35,14 @@ PERFCOUNTER_CPU( check_pagetable, "calls to check_pagetable" ) PERFCOUNTER_CPU( check_all_pagetables, "calls to check_all_pagetables" ) +/* XXX constant from dom0_ops.h */ +#define PERFC_MAX_PT_UPDATES 64 +#define PERFC_PT_UPDATES_BUCKET_SIZE 3 +PERFCOUNTER_ARRAY( wpt_updates, "writable pt updates", PERFC_MAX_PT_UPDATES ) +PERFCOUNTER_ARRAY( bpt_updates, "batched pt updates", PERFC_MAX_PT_UPDATES ) + + #define VMX_PERF_EXIT_REASON_SIZE 37 #define VMX_PERF_VECTOR_SIZE 0x20 -PERFCOUNTER_ARRAY(vmexits, "vmexits", VMX_PERF_EXIT_REASON_SIZE ) -PERFCOUNTER_ARRAY(cause_vector, "cause vector", VMX_PERF_VECTOR_SIZE ) +PERFCOUNTER_ARRAY( vmexits, "vmexits", VMX_PERF_EXIT_REASON_SIZE ) +PERFCOUNTER_ARRAY( cause_vector, "cause vector", VMX_PERF_VECTOR_SIZE ) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |