Messages in this thread | | | Subject | Re: [PATCH v6 09/11] perf/tools: Enhance JSON/metric infrastructure to handle "?" | From | kajoljain <> | Date | Fri, 27 Mar 2020 15:30:42 +0530 |
| |
On 3/24/20 6:41 PM, Jiri Olsa wrote: > On Fri, Mar 20, 2020 at 06:24:04PM +0530, Kajol Jain wrote: >> Patch enhances current metric infrastructure to handle "?" in the metric >> expression. The "?" can be use for parameters whose value not known while >> creating metric events and which can be replace later at runtime to >> the proper value. It also add flexibility to create multiple events out >> of single metric event added in json file. >> >> Patch adds function 'arch_get_runtimeparam' which is a arch specific >> function, returns the count of metric events need to be created. >> By default it return 1. >> >> This infrastructure needed for hv_24x7 socket/chip level events. >> "hv_24x7" chip level events needs specific chip-id to which the >> data is requested. Function 'arch_get_runtimeparam' implemented >> in header.c which extract number of sockets from sysfs file >> "sockets" under "/sys/devices/hv_24x7/interface/". >> >> >> With this patch basically we are trying to create as many metric events >> as define by runtime_param. >> >> For that one loop is added in function 'metricgroup__add_metric', >> which create multiple events at run time depend on return value of >> 'arch_get_runtimeparam' and merge that event in 'group_list'. >> >> To achieve that we are actually passing this parameter value as part of >> `expr__find_other` function and changing "?" present in metric expression >> with this value. >> >> As in our json file, there gonna be single metric event, and out of >> which we are creating multiple events, I am also merging this value >> to the original metric name to specify parameter value. >> >> For example, >> command:# ./perf stat -M PowerBUS_Frequency -C 0 -I 1000 >> # time counts unit events >> 1.000101867 9,356,933 hv_24x7/pm_pb_cyc,chip=0/ # 2.3 GHz PowerBUS_Frequency_0 >> 1.000101867 9,366,134 hv_24x7/pm_pb_cyc,chip=1/ # 2.3 GHz PowerBUS_Frequency_1 >> 2.000314878 9,365,868 hv_24x7/pm_pb_cyc,chip=0/ # 2.3 GHz PowerBUS_Frequency_0 >> 2.000314878 9,366,092 hv_24x7/pm_pb_cyc,chip=1/ # 2.3 GHz PowerBUS_Frequency_1 >> >> So, here _0 and _1 after PowerBUS_Frequency specify parameter value. >> >> As after adding this to group_list, again we call expr__parse >> in 'generic_metric' function present in util/stat-display.c. >> By this time again we need to pass this parameter value. So, now to get this value >> actually I am trying to extract it from metric name itself. Because >> otherwise it gonna point to last updated value present in runtime_param. >> And gonna match for that value only. > > so why can't we pass that param as integer value through the metric objects? > > it get's created in metricgroup__add_metric_param: > - as struct egroup *eg > - we can add egroup::param and store the param value there > > then in metricgroup__setup_events it moves to: > - struct metric_expr *expr > - we can add metric_expr::param to keep the param > > then in perf_stat__print_shadow_stats there's: > - struct metric_expr *mexp loop > - calling generic_metric metric - we could call it with mexp::param > - and pass the param to expr__parse > Hi jiri, Thanks for the suggestion, Yes it make more sense to use like that. Will update.
Thanks, Kajol > jirka >
| |