Following is a patch series prototyping a new Performance Monitoring
Daemon agent -> Memory_bandwidth.
This daemon on a given architecture be it x86 or POWERPC, will read all
the required IMC/MCS read and write PMU counters, aggregate the values
and return the aggregated raw value in this RFC.
Additionaly on POWERPC, it will give the memory reads/writes in terms
of MBs which will be useful in calculating the memory bandwidth over a
certain interval. It also gives the maximum memory bandwidth
(theoretical) per node for POWERPC.
Going forward we want to have this reporting memory bandwidth as a rate
for certain time intervals which can be queried by the clients rather
than the aggregated counter values.
This metric will give us a fair idea about the saturation of the
bandwidth under certain workloads.
Why do we need a different agent to do this ?
-------------------------------------------
We are trying to compute memory bandwidth of a system. This can be
achieved by reading a bunch of PMU counters via perfevent, Aggregating
those values, Multiplying with a scale as mentioned in the sysfs entry
on the system and some more math on top of it to get a single metric
value denoting the memory bandwidth of the system.
Also, to note is that PMU counter names will vary depending on the
architecture. Ideally we would want to consume this metric via
OpenStack. Given this scenario, OpenStack will be our client. Ideally we
need to have all the reading of counters and math on top of it there.
>From an OpenStack consume-ability side, it should connect to the pmcd
daemon and get the required single aggregated post processed metric in a
single call irrespective of underneath architecture.
So the question here arises as to where do we do all the required post
processing and required math ?
Given this requirement, would it be good to have all
the architecture dependent stuff i.e reading PMUs and related math in
PcP and just return the memory bandwidth metric to OpenStack ?
This would result in a cleaner design where all the architecture
dependent counters and computation is done in the backend PcP and just
the value is returned to OpenStack.
Again in PcP, as we will not be able to use pmRegisterDerived(), so that
is the reason we are writing a new PMDA that would essentially read all
the required counters and do the math based on the underlying
architecture.
Why not extend the perfevent agent ?
----------------------------------
perfevent agent and memory bandwidth agent end up reading PMUs
via the perf api. But currently as per design of perfevent agent, the
post processing for perfevents is done by pmval and other client agents.
Given our requirement of returning a single value to clients like
OpenStack it comes pertinent to do all the calculation or some sort of
post processing in the daemon itself.
This daemon will be supported on both x86 and POWERPC architecture.
The current patch set exposes the x86 implementation of it.
Set of events read:
# pminfo | grep bandwidth
bandwidth.count
bandwidth.max
Below is the sample o/p of running this daemon (under "stream" workload) :
# pmval bandwidth.count
metric: bandwidth.count
host: ltctul57a-p1
semantics: cumulative counter (converting to rate)
units: none (converting to / sec)
samples: all
node0 node1 node2
node3
0.0 0.0 0.0
0.0
0.0 0.0 0.0
0.0
0.0 0.0 0.0
0.0
3.444E+04 3.137E+04 4.301E+04
1.722E+04
7.623E+04 6.898E+04 7.117E+04
4.060E+04
[...]
Below is for getting the maximum memory bandwidth per node (for POWERPC) :
# pmval bandwidth.max
metric: bandwidth.max
host: ltctul57a-p1
semantics: instantaneous value
units: Mbyte / sec
samples: all
96000
[...]
Hemant Kumar (1):
values_v1_comments_unchecked
src/pmdas/GNUmakefile | 2 +-
src/pmdas/bandwidth/GNUmakefile | 32 +++
src/pmdas/bandwidth/GNUmakefile.install | 38 ++++
src/pmdas/bandwidth/Install | 40 ++++
src/pmdas/bandwidth/Remove | 12 +
src/pmdas/bandwidth/bandwidth.c | 295 +++++++++++++++++++++++++
src/pmdas/bandwidth/get_perf.c | 379 ++++++++++++++++++++++++++++++++
src/pmdas/bandwidth/get_perf.h | 14 ++
src/pmdas/bandwidth/help | 14 ++
src/pmdas/bandwidth/pmns | 8 +
src/pmdas/bandwidth/root | 9 +
src/pmns/stdpmid.pcp | 1 +
12 files changed, 843 insertions(+), 1 deletion(-)
create mode 100644 src/pmdas/bandwidth/GNUmakefile
create mode 100644 src/pmdas/bandwidth/GNUmakefile.install
create mode 100755 src/pmdas/bandwidth/Install
create mode 100755 src/pmdas/bandwidth/Remove
create mode 100644 src/pmdas/bandwidth/bandwidth.c
create mode 100644 src/pmdas/bandwidth/get_perf.c
create mode 100644 src/pmdas/bandwidth/get_perf.h
create mode 100644 src/pmdas/bandwidth/help
create mode 100644 src/pmdas/bandwidth/pmns
create mode 100644 src/pmdas/bandwidth/root
--
1.9.3
|