Thread: [perfmon2] tapping event sets
Status: Beta
Brought to you by:
seranian
From: Pradeep R. <pra...@is...> - 2008-08-06 06:38:03
|
I'm trying to capture event count history (length==1) for each event set by creating an additional variable u64 oldval; in struct pfm_pmd; (kernel source) I then tried doing this in two ways: 1. record pmds[i].value into oldval before event is switched out in pfm_save_pmds (perfmon_ctxsw.c) i.e. set->pmds[i].oldval = set->pmds[i].value; set->pmds[i].value = val; 2. just after event is switched in, in pfm_arch_restore_pmds (perfmon.c) I record set->pmds[i].value into oldval before set->pmds[i].value = val; for the new set. However, both these approaches dont work. I observe the difference in pfm_switch_sets(..) just after pfm_save_pmds() and in the first case oldval=value (diff=0) and in the second oldval=0 (diff=val). Any ideas what I'm missing and where to tap counts before(after) the event is switched out(in) ? Regards, Pradeep |
From: stephane e. <er...@go...> - 2008-08-20 19:50:30
|
Hello Pradeep, Sorry for late reply (travel + vacation). On Wed, Aug 6, 2008 at 8:34 AM, Pradeep Rao <pra...@is...> wrote: > > I'm trying to capture event count history (length==1) for each event set by > creating an additional variable u64 oldval; in struct pfm_pmd; (kernel source) > Not sure why you need that? > I then tried doing this in two ways: > 1. record pmds[i].value into oldval before event is switched out in > pfm_save_pmds (perfmon_ctxsw.c) > i.e. > set->pmds[i].oldval = set->pmds[i].value; > set->pmds[i].value = val; > > 2. just after event is switched in, in pfm_arch_restore_pmds (perfmon.c) > I record set->pmds[i].value into oldval before set->pmds[i].value = val; for the > new set. > There are other places where pmds[].value is updated, e.g., interrupt handler, __pfm_write_pmds(). That may be your problem for oldval. > However, both these approaches dont work. I observe the difference in > pfm_switch_sets(..) just after pfm_save_pmds() and in the first case > oldval=value (diff=0) and in the second oldval=0 (diff=val). How do you observe the difference. If you've just updated oldval, in pfm_save_pmds(), then it is not surprising that the difference is 0. |