On 12/13/2016 11:01 AM, Nitesh Konkar wrote:
This patch adds support and documentation
for the stalled_cycles_frontend perf event.
Signed-off-by: Nitesh Konkar <nitkon12(a)linux.vnet.ibm.com>
---
docs/formatdomain.html.in | 6 ++++++
docs/news.html.in | 6 +++---
docs/schemas/domaincommon.rng | 1 +
include/libvirt/libvirt-domain.h | 10 ++++++++++
src/libvirt-domain.c | 3 +++
src/qemu/qemu_driver.c | 1 +
src/util/virperf.c | 5 ++++-
src/util/virperf.h | 1 +
tests/genericxml2xmlindata/generic-perf.xml | 1 +
tools/virsh.pod | 8 ++++++--
10 files changed, 36 insertions(+), 6 deletions(-)
Similarly a few nits which I fixed - see below.
John
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index cd3182b..424b4de 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -1930,6 +1930,7 @@
<event name='branch_instructions' enabled='no'/>
<event name='branch_misses' enabled='no'/>
<event name='bus_cycles' enabled='no'/>
+ <event name='stalled_cycles_frontend' enabled='no'/>
</perf>
...
</pre>
@@ -1990,6 +1991,11 @@
<td>the count of bus cycles by applications running on the
platform</td>
<td><code>perf.bus_cycles</code></td>
</tr>
+ <tr>
+ <td><code>stalled_cycles_frontend</code></td>
+ <td>the count of stalled cycles frontend by applications running on the
platform</td>
Change to:
the count of stalled cpu cycles in the frontend of the instruction
processor pipeline by applications running on the platform
IMO: It's an awful name to try and describe in a few sentences!
Essentially from my quick read an instruction pipeline can either be
stalled in the front or backend depending on what's causing the stall.
So this just counts those stall "in the" front end.
+
<td><code>perf.stalled_cycles_frontend</code></td>
+ </tr>
</table>
<h3><a name="elementsDevices">Devices</a></h3>
diff --git a/docs/news.html.in b/docs/news.html.in
index f246b2a..ea91d99 100644
--- a/docs/news.html.in
+++ b/docs/news.html.in
@@ -30,9 +30,9 @@
<li><strong>Improvements</strong>
<ul>
<li>perf: Add more perf statistics<br/>
- Add support to get the count of branch instructions executed
- and branch misses and bus cycles by applications running on
- the platform
+ Add support to get the count of branch instructions
+ executed, branch misses, bus cycles, stalled cycles
bus cycles, and stalled frontend cpu cycles
+ frontend by applications running on the platform
</li>
</ul>
</li>
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 21a7afa..9ce7cc9 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -430,6 +430,7 @@
<value>branch_instructions</value>
<value>branch_misses</value>
<value>bus_cycles</value>
+ <value>stalled_cycles_frontend</value>
</choice>
</attribute>
<attribute name="enabled">
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index 6d74238..0741d14 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -2155,6 +2155,16 @@ void virDomainStatsRecordListFree(virDomainStatsRecordPtr
*stats);
*/
# define VIR_PERF_PARAM_BUS_CYCLES "bus_cycles"
+/**
+ * VIR_PERF_PARAM_STALLED_CYCLES_FRONTEND:
+ *
+ * Macro for typed parameter name that represents stalled_cycles_frontend
+ * perf event which can be used to measure the count of stalled cycles frontend
+ * by applications running on the platform. It corresponds to the
+ * "perf.stalled_cycles_frontend" field in the *Stats APIs.
A similar update here (sorry - line wrap makes it look ugly):
* Macro for typed parameter name that represents stalled_cycles_frontend
* perf event which can be used to measure the count of stalled cpu cycles
* in the frontend of the instruction processor pipeline by applications
* running on the platform. It corresponds to the
* "perf.stalled_cycles_frontend" field in the *Stats APIs.
+ */
+# define VIR_PERF_PARAM_STALLED_CYCLES_FRONTEND "stalled_cycles_frontend"
+
int virDomainGetPerfEvents(virDomainPtr dom,
virTypedParameterPtr *params,
int *nparams,
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 19e323d..0d23d31 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -11236,6 +11236,9 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
* long. It is produced by branch_misses perf event.
* "perf.bus_cycles" - The count of bus cycles as unsigned long
* long. It is produced by bus_cycles perf event.
+ * "perf.stalled_cycles_frontend" - The count of stalled cycles frontend
+ * as unsigned long long. It is produced
+ * by stalled_cycles_frontend perf event.
Same here:
The count of stalled cpu cycles in the frontend of the instruction
processor pipeline as unsigned long long.
*
* 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 cf0f5e0..273dbeb 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -9855,6 +9855,7 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
VIR_PERF_PARAM_BRANCH_INSTRUCTIONS,
VIR_TYPED_PARAM_BOOLEAN,
VIR_PERF_PARAM_BRANCH_MISSES, VIR_TYPED_PARAM_BOOLEAN,
VIR_PERF_PARAM_BUS_CYCLES, VIR_TYPED_PARAM_BOOLEAN,
+ VIR_PERF_PARAM_STALLED_CYCLES_FRONTEND,
VIR_TYPED_PARAM_BOOLEAN,
NULL) < 0)
return -1;
diff --git a/src/util/virperf.c b/src/util/virperf.c
index 31a5585..c21147a 100644
--- a/src/util/virperf.c
+++ b/src/util/virperf.c
@@ -42,7 +42,7 @@ VIR_ENUM_IMPL(virPerfEvent, VIR_PERF_EVENT_LAST,
"cpu_cycles", "instructions",
"cache_references", "cache_misses",
"branch_instructions", "branch_misses",
- "bus_cycles");
+ "bus_cycles", "stalled_cycles_frontend");
struct virPerfEvent {
int type;
@@ -96,6 +96,9 @@ static struct virPerfEventAttr attrs[] = {
{.type = VIR_PERF_EVENT_BUS_CYCLES,
.attrType = PERF_TYPE_HARDWARE,
.attrConfig = PERF_COUNT_HW_BUS_CYCLES},
+ {.type = VIR_PERF_EVENT_STALLED_CYCLES_FRONTEND,
+ .attrType = PERF_TYPE_HARDWARE,
+ .attrConfig = PERF_COUNT_HW_STALLED_CYCLES_FRONTEND},
};
typedef struct virPerfEventAttr *virPerfEventAttrPtr;
diff --git a/src/util/virperf.h b/src/util/virperf.h
index ac6d789..0aee1ba 100644
--- a/src/util/virperf.h
+++ b/src/util/virperf.h
@@ -40,6 +40,7 @@ typedef enum {
for applications */
VIR_PERF_EVENT_BRANCH_MISSES, /* Count of branch misses for applications */
VIR_PERF_EVENT_BUS_CYCLES, /* Count of bus cycles for applications*/
+ VIR_PERF_EVENT_STALLED_CYCLES_FRONTEND, /*Count of stalled cycles frontend*/
Comment spacing adjustment /* Count ... frontend */
I also added the longer description to the comment.
VIR_PERF_EVENT_LAST
} virPerfEventType;
diff --git a/tests/genericxml2xmlindata/generic-perf.xml
b/tests/genericxml2xmlindata/generic-perf.xml
index 56a6173..db76843 100644
--- a/tests/genericxml2xmlindata/generic-perf.xml
+++ b/tests/genericxml2xmlindata/generic-perf.xml
@@ -23,6 +23,7 @@
<event name='branch_instructions' enabled='yes'/>
<event name='branch_misses' enabled='yes'/>
<event name='bus_cycles' enabled='yes'/>
+ <event name='stalled_cycles_frontend' enabled='yes'/>
</perf>
<devices>
</devices>
diff --git a/tools/virsh.pod b/tools/virsh.pod
index d844dc8..f9a6a19 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -947,8 +947,9 @@ I<--perf> returns the statistics of all enabled perf events:
"perf.cache_references" - the count of cache hits,
"perf.cache_misses" - the count of caches misses,
"perf.branch_instructions" - the count of branch instructions,
-"perf.branch_misses" - the count of branch misses
-"perf.bus_cycles" - the count of bus cycles
+"perf.branch_misses" - the count of branch misses,
This I moved to the previous patch...
+"perf.bus_cycles" - the count of bus cycles,
+"perf.stalled_cycles_frontend" - the count of stalled cycles frontend
changed to "the count of stalled frontend cpu cycles"
See the B<perf> command for more details about each event.
@@ -2302,6 +2303,9 @@ B<Valid perf event names>
by applications running on the platform.
bus_cycles - Provides the count of bus cycles executed
by applications running on the platform.
+ stalled_cycles_frontend - Provides the count of stalled cycles
+ frontend by applications running on
+ the platform.
Longer description here too
B<Note>: The statistics can be retrieved using the B<domstats> command
using
the I<--perf> flag.