Messages in this thread Patch in this message | | | From | Joakim Zhang <> | Subject | RE: [RFC PATCH v2 09/13] perf vendor events: Add JSON metrics for imx8mm DDR Perf | Date | Mon, 20 Apr 2020 11:25:04 +0000 |
| |
> -----Original Message----- > From: John Garry <john.garry@huawei.com> > Sent: 2020年4月20日 18:51 > To: Joakim Zhang <qiangqing.zhang@nxp.com>; peterz@infradead.org; > mingo@redhat.com; acme@kernel.org; mark.rutland@arm.com; > alexander.shishkin@linux.intel.com; jolsa@redhat.com; > namhyung@kernel.org; will@kernel.org > Cc: irogers@google.com; ak@linux.intel.com; Linuxarm > <linuxarm@huawei.com>; linux-kernel@vger.kernel.org; Zhangshaokun > <zhangshaokun@hisilicon.com>; robin.murphy@arm.com; > linux-arm-kernel@lists.infradead.org > Subject: Re: [RFC PATCH v2 09/13] perf vendor events: Add JSON metrics for > imx8mm DDR Perf > > On 20/04/2020 05:17, Joakim Zhang wrote: > > However, it seems that there are small defects from metric. > > > > Firstly, could you help change "ScaleUnit": "9.765625e-4MB" into > "ScaleUnit": "9.765625e-4KB", this is a mistake. > > ok > > > > > Then, you can see that test is okay from 8MM. However, metric would add > twice once time from 8QM which has two ddr perf(ddr0/ddr1), it looks > incorrect. > > > > 8MM: > > root@imx8mmevk:~# ./perf stat -v -a -I 1000 -M imx8mm_ddr_write.all > > Using CPUID 0x00000000410fd030 metric expr imx8_ddr.write_cycles * 4 * > > 4 for imx8mm_ddr_write.all found event imx8_ddr.write_cycles adding > > {imx8_ddr.write_cycles}:W imx8_ddr.write_cycles -> > > imx8_ddr0/event=0x2b/ > > imx8_ddr.write_cycles: 13153 1000495125 1000495125 > > # time counts unit events > > 1.000476625 13153 imx8_ddr.write_cycles > # 205.5 MB imx8mm_ddr_write.all > > imx8_ddr.write_cycles: 3582 1000681375 1000681375 > > 2.001167750 3582 imx8_ddr.write_cycles > # 56.0 MB imx8mm_ddr_write.all > > > > > > 8QM: > > root@imx8qmmek:~# ./perf stat -v -a -I 1000 -M imx8qm_ddr_read.all > > Note: for this example, I don't know why you didn't use imx8mm_ddr_write.all, > as for your 8MM test, so we can compare the same.
Yes, I use the imx8mm_ddr_write.all, I just re-name the metric, change nothing else.
> > Using CPUID 0x00000000410fd030 > > metric expr imx8_ddr.read_cycles * 4 * 4 for imx8qm_ddr_read.all found > > event imx8_ddr.read_cycles metric expr imx8_ddr.read_cycles * 4 * 4 > > for imx8qm_ddr_read.all found event imx8_ddr.read_cycles adding > > {imx8_ddr.read_cycles}:W,{imx8_ddr.read_cycles}:W > > imx8_ddr.read_cycles -> imx8_ddr0/event=0x2a/ imx8_ddr.read_cycles -> > > imx8_ddr1/event=0x2a/ imx8_ddr.read_cycles -> imx8_ddr0/event=0x2a/ > > imx8_ddr.read_cycles -> imx8_ddr1/event=0x2a/ > > imx8_ddr.read_cycles: 22748 1000378750 1000378750 > > imx8_ddr.read_cycles: 24640 1000376625 1000376625 > > imx8_ddr.read_cycles: 22800 1000375125 1000375125 > > imx8_ddr.read_cycles: 24616 1000372625 1000372625 > > # time counts unit events > > 1.000377250 47388 imx8_ddr.read_cycles > # 740.4 MB imx8qm_ddr_read.all > > 1.000377250 47416 imx8_ddr.read_cycles > > imx8_ddr.read_cycles: 32672 1000454375 1000454375 > > imx8_ddr.read_cycles: 37888 1000457250 1000457250 > > imx8_ddr.read_cycles: 32736 1000460250 1000460250 > > imx8_ddr.read_cycles: 38012 1000463000 1000463000 > > 2.000812375 70560 imx8_ddr.read_cycles > # 1102.5 MB imx8qm_ddr_read.all > > 2.000812375 70748 imx8_ddr.read_cycles > > > > I that is just how the aliases work. But how about trying: > > ./perf stat -v -a -I 1000 -M imx8_ddr0/imx8qm_ddr_read.all/ > > > for just ddr0 > > I know that the following worked for non-metrics for aliases on a specific HW > PMU, so I guess should also work for metrics: > > ./perf stat -e smmuv3_pmcg_200148020/smmuv3_pmcg.l1_tlb/
Yes, this can work for non-metrics, I tried before, it seems unsupported for metric.
You may misunderstand me, now I doesn't ask for a specific HW PMU(ddr0 or ddr1), the issue is that it would add and calculate twice when more than one HW PMU.
I also did below change which is implemented at my local side, but it can't work on your branch. --- a/tools/perf/pmu-events/arch/arm64/freescale/imx8mm/sys/metrics.json +++ b/tools/perf/pmu-events/arch/arm64/freescale/imx8mm/sys/metrics.json @@ -2,7 +2,7 @@ { "BriefDescription": "bytes all masters read from ddr based on read-cycles event", "MetricName": "imx8mm_ddr_read.all", - "MetricExpr": "imx8_ddr.read_cycles * 4 * 4", + "MetricExpr": "imx8_ddr0\\/read\\-cycles\\/ * 4 * 4", "ScaleUnit": "9.765625e-4MB", "Unit": "imx8_ddr", "Compat": "i.mx8mm" @@ -10,9 +10,9 @@ { "BriefDescription": "bytes all masters write to ddr based on write-cycles event", "MetricName": "imx8mm_ddr_write.all", - "MetricExpr": "imx8_ddr.write_cycles * 4 * 4", + "MetricExpr": "imx8_ddr0\\/read\\-cycles\\/ * 4 * 4", "ScaleUnit": "9.765625e-4MB", "Unit": "imx8_ddr", "Compat": "i.mx8mm" } -] \ No newline at end of file +] root@imx8qmmek:~# ./perf stat -v -a -I 1000 -M imx8mm_ddr_read.all Using CPUID 0x00000000410fd080 metric expr imx8_ddr0\/read\-cycles\/ * 4 * 4 for imx8mm_ddr_read.all found event imx8_ddr0 found event read-cycles metric expr imx8_ddr0\/read\-cycles\/ * 4 * 4 for imx8mm_ddr_read.all found event imx8_ddr0 found event read-cycles adding {imx8_ddr0,read-cycles}:W,{imx8_ddr0,read-cycles}:W event syntax error: '{imx8_ddr0,read-cycles}:W,{imx8_ddr0,read-cycles}:W' \___ parser error Usage: perf stat [<options>] [<command>]
-M, --metrics <metric/metric group list> monitor specified metrics or metric groups (separated by ,) Now the metricgroup can't parse above metric expression, it shouldn't be.
Best Regards, Joakim Zhang > Thanks, > John
| |