[libvirt] [PATCH v3 1/1] perf: add support to perf event for MBM

Peter Krempa pkrempa at redhat.com
Thu May 19 13:46:29 UTC 2016


On Fri, May 13, 2016 at 12:26:07 +0800, Qiaowei Ren wrote:
> Some Intel processor families (e.g. the Intel Xeon processor E5 v3
> family) introduced some RDT (Resource Director Technology) features
> to monitor or control shared resource. Among these features, MBM
> (Memory Bandwidth Monitoring), which is build on the CMT (Cache
> Monitoring Technology) infrastructure, provides OS/VMM a way to
> monitor bandwidth from one level of cache to another.
> 
> With current perf framework, this patch adds support to perf event
> for MBM.
> 
> Signed-off-by: Qiaowei Ren <qiaowei.ren at intel.com>
> ---
>  include/libvirt/libvirt-domain.h | 26 ++++++++++++++++-
>  src/libvirt-domain.c             | 12 ++++++++
>  src/qemu/qemu_driver.c           | 41 +++++++++++++++++++-------
>  src/util/virperf.c               | 63 ++++++++++++++++++++++++----------------
>  src/util/virperf.h               |  2 ++
>  5 files changed, 108 insertions(+), 36 deletions(-)

[...]

> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index c4c4968..670f620 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c

[...]

> @@ -19494,24 +19496,38 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
>  
>  #undef QEMU_ADD_COUNT_PARAM
>  
> +#define QEMU_ADD_PERF_PARAM_ULL(record, maxparams, name, value) \
> +do { \
> +    char param_name[VIR_TYPED_PARAM_FIELD_LENGTH]; \
> +    snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH, \
> +             "perf.%s", name); \
> +    if (virTypedParamsAddULLong(&(record)->params, \
> +                                &(record)->nparams, \
> +                                maxparams, \
> +                                param_name, \
> +                                value) < 0) \
> +        goto cleanup; \
> +} while (0)

This macro is used once so it's not really necessary.

> +
>  static int
> -qemuDomainGetStatsPerfCmt(virPerfPtr perf,
> +qemuDomainGetStatsPerfRdt(virPerfPtr perf,
> +                          virPerfEventType type,
>                            virDomainStatsRecordPtr record,
>                            int *maxparams)
>  {
> -    uint64_t cache = 0;
> +    uint64_t value = 0;
>  
> -    if (virPerfReadEvent(perf, VIR_PERF_EVENT_CMT, &cache) < 0)
> +    if (virPerfReadEvent(perf, type, &value) < 0)
>          return -1;
>  
> -    if (virTypedParamsAddULLong(&record->params,
> -                                &record->nparams,
> -                                maxparams,
> -                                "perf.cache",
> -                                cache) < 0)
> -        return -1;
> +    QEMU_ADD_PERF_PARAM_ULL(record, maxparams,
> +                            virPerfEventTypeToString(type),
> +                            value);

Otherwise looks good. Thanks for tweaking the documentation.

I'll push this with the macro dropped in a while.

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160519/def86ee1/attachment-0001.sig>


More information about the libvir-list mailing list