Yes, the core_pcbe_program processes all cfgs in list one by one. In my sample, there are 2 cfgs, "clk" and "rma" in cfg-list. The core_pcbe_program will program them all. So in kcpc_hw_overflow_intr, though the overflow bitmap skip the counters which are not overflow, but the core_pcbe_program will still reset them. That's the problem.
Thanks Jin Yao > > 2 4073 core_pcbe_program:wrmsr C1 > 281474976710555(0xFFFFFFFFFF9B) > That line shows the rma counter being reset to > MAX-100. > > pcbe_configure() will update the pcbe_config with the > value that has to > be written to the counter. That is correctly done > here for the clk > counter that overflowed. > > The pcbe_config for the rma counter still has the > initial value of > MAX-100, so on the subsequent pcbe_program() call > when all active > counters are programmed, MAX-100 will be written to > the rma counter. > > On 06/17/10 23:57, Jin Yao wrote: > > Hi kuriakose, > > > > There was no cpc sampling job when my dtrace > scripts (test_clk_rma.d or test_rma.d) running. > > I tried your test script, it didn't hook the > function core_pcbe_sample. > > eg: some pieces from trace log. > > > > 2 4076 core_pcbe_overflow_bitmap:rdmsr 38E > 17179869184(0x400000000) > > 2 4074 core_pcbe_overflow_bitmap:wrmsr 390 > 17179869184(0x400000000) > > 2 4072 core_pcbe_allstop:wrmsr 38F > 0(0x0) > > 2 4072 core_pcbe_allstop:wrmsr 38F > 0(0x0) > > 2 4073 core_pcbe_program:wrmsr 390 > 13835058085346934799(0xC00000070000000F) > > 2 4073 core_pcbe_program:wrmsr C1 > 281474976710555(0xFFFFFFFFFF9B) > > 2 4073 core_pcbe_program:wrmsr 186 > 5443599(0x53100F) > > 2 4073 core_pcbe_program:wrmsr 30B > 281474975710655(0xFFFFFFF0BDBF) > > 2 4073 core_pcbe_program:wrmsr 38D > 2816(0xB00) > > 2 4073 core_pcbe_program:wrmsr 38F > 17179869185(0x400000001) > > > > Another question is I checked the codes of > kcpc_hw_overflow_intr, > > one bitmap indicates which counters get overflow. > And the function > > will not reset the counter when the related bit in > bitmap is not set. > > > > bitmap = pcbe_ops->pcbe_overflow_bitmap(); > > if (dtrace_cpc_in_use) { > > /* Reset any counters that have overflowed */ > > for (i = 0; i< ctx->kc_set->ks_nreqs; i++) { > > req = ctx->kc_set->ks_req[i]; > > if (bitmap& (1<< req.kr_picnum)) { > > > pcbe_ops->pcbe_configure(req.kr_picnum, > req.kr_event, req.kr_preset, > req.kr_flags, req.kr_nattrs, > req.kr_attr,&(req.kr_config), > (void *)ctx); > > } > > > > pcbe_ops->pcbe_program(ctx); > > return (DDI_INTR_CLAIMED); > > } > > > > So it looks like the rma counter will not be reset > to initial value when the clk counter overflows. > > Correct me if I'm wrong. > > > > Thanks > > Jin Yao > _______________________________________________ > perf-discuss mailing list > perf-discuss@opensolaris.org > -- This message posted from opensolaris.org _______________________________________________ perf-discuss mailing list perf-discuss@opensolaris.org