[libvirt] [PATCH 1/2] perf: Compute cache_l1d config value correctly
Nitesh Konkar
niteshkonkar.libvirt at gmail.com
Mon Jan 16 05:43:34 UTC 2017
Hello,
My earlier patch with commit id : ae16c95f1bb5591c27676c5de8d383e5612c3568
(Link:
https://www.redhat.com/archives/libvir-list/2017-January/msg00226.html )
computed the .attrConfig value incorrectly. The right way to compute
.attrConfig value for a PERF_TYPE_HW_CACHE event is listed here (
https://linux.die.net/man/2/perf_event_open) . I somehow missed this info
at the time of sending the patch and have sent another patch to rectify it.
Link: https://www.redhat.com/archives/libvir-list/2017-January/msg00679.html
I think this patch needs to be in before 3.0.0 is released else a wrong
value shall be displayed on enabling and displaying cache_l1d perf event.
Thanks,
Nitesh Konkar.
On Sat, Jan 14, 2017 at 1:49 PM, Nitesh Konkar <
niteshkonkar.libvirt at gmail.com> wrote:
> This patch computes the .attrConfig value for
> cache_l1d correctly and updates the documentation.
> The cache_l1d perf event now is renamed as
> cache_l1dra perf event for measuring read accesses
> for level 1 data cache
>
> Signed-off-by: Nitesh Konkar <nitkon12 at linux.vnet.ibm.com>
> ---
> docs/formatdomain.html.in | 12 ++++++------
> docs/news.xml | 5 +++--
> docs/schemas/domaincommon.rng | 2 +-
> include/libvirt/libvirt-domain.h | 12 ++++++------
> src/libvirt-domain.c | 5 +++--
> src/qemu/qemu_driver.c | 2 +-
> src/util/virperf.c | 8 +++++---
> src/util/virperf.h | 2 +-
> tests/genericxml2xmlindata/generic-perf.xml | 2 +-
> tools/virsh.pod | 6 +++---
> 10 files changed, 30 insertions(+), 26 deletions(-)
>
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index 30cb196..a8ee2db 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -1937,7 +1937,7 @@
> <event name='stalled_cycles_frontend' enabled='no'/>
> <event name='stalled_cycles_backend' enabled='no'/>
> <event name='ref_cpu_cycles' enabled='no'/>
> - <event name='cache_l1d' enabled='no'/>
> + <event name='cache_l1dra' enabled='no'/>
> </perf>
> ...
> </pre>
> @@ -2013,14 +2013,14 @@
> <tr>
> <td><code>ref_cpu_cycles</code></td>
> <td>the count of total cpu cycles not affected by CPU frequency
> scaling
> - by applications running on the platform</td>
> + by applications running on the platform</td>
> <td><code>perf.ref_cpu_cycles</code></td>
> </tr>
> <tr>
> - <td><code>cache_l1d</code></td>
> - <td>the count of total level 1 data cache by applications running on
> - the platform</td>
> - <td><code>perf.cache_l1d</code></td>
> + <td><code>cache_l1dra</code></td>
> + <td>the count of total read accesses for level 1 data cache by
> + applications running on the platform</td>
> + <td><code>perf.cache_l1dra</code></td>
> </tr>
> </table>
>
> diff --git a/docs/news.xml b/docs/news.xml
> index baafcff..93ab40c 100644
> --- a/docs/news.xml
> +++ b/docs/news.xml
> @@ -82,8 +82,9 @@
> <description>
> Add support to get the count of branch instructions
> executed, branch misses, bus cycles, stalled frontend
> - cpu cycles, stalled backend cpu cycles, and ref cpu
> - cycles by applications running on the platform.
> + cpu cycles, stalled backend cpu cycles, ref cpu
> + cycles and cache l1dra by applications running on the
> + platform.
> </description>
> </change>
> <change>
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index be0a609..a65ad13 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -433,7 +433,7 @@
> <value>stalled_cycles_frontend</value>
> <value>stalled_cycles_backend</value>
> <value>ref_cpu_cycles</value>
> - <value>cache_l1d</value>
> + <value>cache_l1dra</value>
> </choice>
> </attribute>
> <attribute name="enabled">
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-
> domain.h
> index 1e0e74c..3da0e9b 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -2189,15 +2189,15 @@ void virDomainStatsRecordListFree(virDomainStatsRecordPtr
> *stats);
> # define VIR_PERF_PARAM_REF_CPU_CYCLES "ref_cpu_cycles"
>
> /**
> - * VIR_PERF_PARAM_CACHE_L1D:
> + * VIR_PERF_PARAM_CACHE_L1DRA:
> *
> - * Macro for typed parameter name that represents cache_l1d
> + * Macro for typed parameter name that represents cache_l1dra
> * perf event which can be used to measure the count of total
> - * level 1 data cache by applications running on the platform.
> - * It corresponds to the "perf.cache_l1d" field in the
> - * *Stats APIs.
> + * read accesses for level 1 data cache by applications running
> + * on the platform. It corresponds to the "perf.cache_l1dra"
> + * field in the *Stats APIs.
> */
> -# define VIR_PERF_PARAM_CACHE_L1D "cache_l1d"
> +# define VIR_PERF_PARAM_CACHE_L1DRA "cache_l1dra"
>
> int virDomainGetPerfEvents(virDomainPtr dom,
> virTypedParameterPtr *params,
> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index 3023f30..fa39069 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -11250,8 +11250,9 @@ virConnectGetDomainCapabilities(virConnectPtr
> conn,
> * CPU frequency scaling by applications
> running
> * as unsigned long long. It is produced by
> the
> * ref_cpu_cycles perf event.
> - * "perf.cache_l1d" - The count of total level 1 data cache as
> unsigned
> - * long long. It is produced by cache_l1d perf
> event.
> + * "perf.cache_l1dra" - The count of total read accesses for level 1
> data
> + * cache as unsigned long long. It is produced by
> + * cache_l1dra perf event.
> *
> * Note that entire stats groups or individual stat fields may be missing
> from
> * the output in case they are not supported by the given hypervisor, are
> not
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 42f9889..7e2ea96 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -9877,7 +9877,7 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
> VIR_PERF_PARAM_STALLED_CYCLES_FRONTEND,
> VIR_TYPED_PARAM_BOOLEAN,
> VIR_PERF_PARAM_STALLED_CYCLES_BACKEND,
> VIR_TYPED_PARAM_BOOLEAN,
> VIR_PERF_PARAM_REF_CPU_CYCLES,
> VIR_TYPED_PARAM_BOOLEAN,
> - VIR_PERF_PARAM_CACHE_L1D,
> VIR_TYPED_PARAM_BOOLEAN,
> + VIR_PERF_PARAM_CACHE_L1DRA,
> VIR_TYPED_PARAM_BOOLEAN,
> NULL) < 0)
> return -1;
>
> diff --git a/src/util/virperf.c b/src/util/virperf.c
> index 8554723..11e64df 100644
> --- a/src/util/virperf.c
> +++ b/src/util/virperf.c
> @@ -44,7 +44,7 @@ VIR_ENUM_IMPL(virPerfEvent, VIR_PERF_EVENT_LAST,
> "branch_instructions", "branch_misses",
> "bus_cycles", "stalled_cycles_frontend",
> "stalled_cycles_backend", "ref_cpu_cycles",
> - "cache_l1d");
> + "cache_l1dra");
>
> struct virPerfEvent {
> int type;
> @@ -113,9 +113,11 @@ static struct virPerfEventAttr attrs[] = {
> .attrConfig = 0,
> # endif
> },
> - {.type = VIR_PERF_EVENT_CACHE_L1D,
> + {.type = VIR_PERF_EVENT_CACHE_L1DRA,
> .attrType = PERF_TYPE_HW_CACHE,
> - .attrConfig = PERF_COUNT_HW_CACHE_L1D},
> + .attrConfig = (PERF_COUNT_HW_CACHE_L1D) |
> + (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> + (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)},
> };
> typedef struct virPerfEventAttr *virPerfEventAttrPtr;
>
> diff --git a/src/util/virperf.h b/src/util/virperf.h
> index 4c562af..36ceb3a 100644
> --- a/src/util/virperf.h
> +++ b/src/util/virperf.h
> @@ -47,7 +47,7 @@ typedef enum {
> the backend of the
> instruction
> processor pipeline */
> VIR_PERF_EVENT_REF_CPU_CYCLES, /* Count of ref cpu cycles */
> - VIR_PERF_EVENT_CACHE_L1D, /* Count of level 1 data cache*/
> + VIR_PERF_EVENT_CACHE_L1DRA, /* Count of read accesses for level 1
> data cache */
>
> VIR_PERF_EVENT_LAST
> } virPerfEventType;
> diff --git a/tests/genericxml2xmlindata/generic-perf.xml
> b/tests/genericxml2xmlindata/generic-perf.xml
> index d1418d0..9b01aef 100644
> --- a/tests/genericxml2xmlindata/generic-perf.xml
> +++ b/tests/genericxml2xmlindata/generic-perf.xml
> @@ -26,7 +26,7 @@
> <event name='stalled_cycles_frontend' enabled='yes'/>
> <event name='stalled_cycles_backend' enabled='yes'/>
> <event name='ref_cpu_cycles' enabled='yes'/>
> - <event name='cache_l1d' enabled='yes'/>
> + <event name='cache_l1dra' enabled='yes'/>
> </perf>
> <devices>
> </devices>
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index cfa7a24..798c02e 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -946,7 +946,7 @@ I<--perf> returns the statistics of all enabled perf
> events:
> "perf.stalled_cycles_frontend" - the count of stalled frontend cpu cycles,
> "perf.stalled_cycles_backend" - the count of stalled backend cpu cycles,
> "perf.ref_cpu_cycles" - the count of ref cpu cycles,
> -"perf.cache_l1d" - the count of level 1 data cache
> +"perf.cache_l1dra" - the count of read accesses for level 1 data cache
>
> See the B<perf> command for more details about each event.
>
> @@ -2311,8 +2311,8 @@ B<Valid perf event names>
> ref_cpu_cycles - Provides the count of total cpu cycles
> not affected by CPU frequency scaling by
> applications running on the platform.
> - cache_l1d - Provides the count of total level 1 data cache
> - by applications running on the platform.
> + cache_l1dra - Provides the count of total read accesses for level 1
> + data cache by applications running on the platform.
>
> B<Note>: The statistics can be retrieved using the B<domstats> command
> using
> the I<--perf> flag.
> --
> 1.9.3
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170116/a32a5b0a/attachment-0001.htm>
More information about the libvir-list
mailing list