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(a)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