perf: add cpu_clock software perf event support

This patch adds support and documentation for
the cpu_clock perf event.

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
This commit is contained in:
Nitesh Konkar 2017-02-23 20:25:30 +05:30 committed by John Ferlan
parent 62bc956786
commit f372a862ac
9 changed files with 33 additions and 1 deletions

View File

@ -1947,6 +1947,7 @@
&lt;event name='stalled_cycles_frontend' enabled='no'/&gt; &lt;event name='stalled_cycles_frontend' enabled='no'/&gt;
&lt;event name='stalled_cycles_backend' enabled='no'/&gt; &lt;event name='stalled_cycles_backend' enabled='no'/&gt;
&lt;event name='ref_cpu_cycles' enabled='no'/&gt; &lt;event name='ref_cpu_cycles' enabled='no'/&gt;
&lt;event name='cpu_clock' enabled='no'/&gt;
&lt;/perf&gt; &lt;/perf&gt;
... ...
</pre> </pre>
@ -2025,6 +2026,13 @@
by applications running on the platform</td> by applications running on the platform</td>
<td><code>perf.ref_cpu_cycles</code></td> <td><code>perf.ref_cpu_cycles</code></td>
</tr> </tr>
<tr>
<td><code>cpu_clock</code></td>
<td>the count of cpu clock time, as measured by a monotonic
high-resolution per-CPU timer, by applications running on
the platform</td>
<td><code>perf.cpu_clock</code></td>
</tr>
</table> </table>
<h3><a name="elementsDevices">Devices</a></h3> <h3><a name="elementsDevices">Devices</a></h3>

View File

@ -433,6 +433,7 @@
<value>stalled_cycles_frontend</value> <value>stalled_cycles_frontend</value>
<value>stalled_cycles_backend</value> <value>stalled_cycles_backend</value>
<value>ref_cpu_cycles</value> <value>ref_cpu_cycles</value>
<value>cpu_clock</value>
</choice> </choice>
</attribute> </attribute>
<attribute name="enabled"> <attribute name="enabled">

View File

@ -2188,6 +2188,17 @@ void virDomainStatsRecordListFree(virDomainStatsRecordPtr *stats);
*/ */
# define VIR_PERF_PARAM_REF_CPU_CYCLES "ref_cpu_cycles" # define VIR_PERF_PARAM_REF_CPU_CYCLES "ref_cpu_cycles"
/**
* VIR_PERF_PARAM_CPU_CLOCK:
*
* Macro for typed parameter name that represents cpu_clock
* perf event which can be used to measure the count of cpu
* clock time by applications running on the platform. It
* corresponds to the "perf.cpu_clock" field in the *Stats
* APIs.
*/
# define VIR_PERF_PARAM_CPU_CLOCK "cpu_clock"
int virDomainGetPerfEvents(virDomainPtr dom, int virDomainGetPerfEvents(virDomainPtr dom,
virTypedParameterPtr *params, virTypedParameterPtr *params,
int *nparams, int *nparams,

View File

@ -11250,6 +11250,8 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
* CPU frequency scaling by applications running * CPU frequency scaling by applications running
* as unsigned long long. It is produced by the * as unsigned long long. It is produced by the
* ref_cpu_cycles perf event. * ref_cpu_cycles perf event.
* "perf.cpu_clock" - The count of cpu clock time as unsigned long long.
* It is produced by the cpu_clock perf event.
* *
* Note that entire stats groups or individual stat fields may be missing from * 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 * the output in case they are not supported by the given hypervisor, are not

View File

@ -9567,6 +9567,7 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
VIR_PERF_PARAM_STALLED_CYCLES_FRONTEND, VIR_TYPED_PARAM_BOOLEAN, VIR_PERF_PARAM_STALLED_CYCLES_FRONTEND, VIR_TYPED_PARAM_BOOLEAN,
VIR_PERF_PARAM_STALLED_CYCLES_BACKEND, 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_REF_CPU_CYCLES, VIR_TYPED_PARAM_BOOLEAN,
VIR_PERF_PARAM_CPU_CLOCK, VIR_TYPED_PARAM_BOOLEAN,
NULL) < 0) NULL) < 0)
return -1; return -1;

View File

@ -43,7 +43,8 @@ VIR_ENUM_IMPL(virPerfEvent, VIR_PERF_EVENT_LAST,
"cache_references", "cache_misses", "cache_references", "cache_misses",
"branch_instructions", "branch_misses", "branch_instructions", "branch_misses",
"bus_cycles", "stalled_cycles_frontend", "bus_cycles", "stalled_cycles_frontend",
"stalled_cycles_backend", "ref_cpu_cycles"); "stalled_cycles_backend", "ref_cpu_cycles",
"cpu_clock");
struct virPerfEvent { struct virPerfEvent {
int type; int type;
@ -112,6 +113,9 @@ static struct virPerfEventAttr attrs[] = {
.attrConfig = 0, .attrConfig = 0,
# endif # endif
}, },
{.type = VIR_PERF_EVENT_CPU_CLOCK,
.attrType = PERF_TYPE_SOFTWARE,
.attrConfig = PERF_COUNT_SW_CPU_CLOCK},
}; };
typedef struct virPerfEventAttr *virPerfEventAttrPtr; typedef struct virPerfEventAttr *virPerfEventAttrPtr;

View File

@ -47,6 +47,7 @@ typedef enum {
the backend of the instruction the backend of the instruction
processor pipeline */ processor pipeline */
VIR_PERF_EVENT_REF_CPU_CYCLES, /* Count of ref cpu cycles */ VIR_PERF_EVENT_REF_CPU_CYCLES, /* Count of ref cpu cycles */
VIR_PERF_EVENT_CPU_CLOCK, /* Count of cpu clock time*/
VIR_PERF_EVENT_LAST VIR_PERF_EVENT_LAST
} virPerfEventType; } virPerfEventType;

View File

@ -26,6 +26,7 @@
<event name='stalled_cycles_frontend' enabled='yes'/> <event name='stalled_cycles_frontend' enabled='yes'/>
<event name='stalled_cycles_backend' enabled='yes'/> <event name='stalled_cycles_backend' enabled='yes'/>
<event name='ref_cpu_cycles' enabled='yes'/> <event name='ref_cpu_cycles' enabled='yes'/>
<event name='cpu_clock' enabled='yes'/>
</perf> </perf>
<devices> <devices>
</devices> </devices>

View File

@ -964,6 +964,7 @@ I<--perf> returns the statistics of all enabled perf events:
"perf.stalled_cycles_backend" - the count of stalled backend "perf.stalled_cycles_backend" - the count of stalled backend
cpu cycles cpu cycles
"perf.ref_cpu_cycles" - the count of ref cpu cycles "perf.ref_cpu_cycles" - the count of ref cpu cycles
"perf.cpu_clock" - the count of cpu clock time
See the B<perf> command for more details about each event. See the B<perf> command for more details about each event.
@ -2333,6 +2334,8 @@ B<Valid perf event names>
ref_cpu_cycles - Provides the count of total cpu cycles ref_cpu_cycles - Provides the count of total cpu cycles
not affected by CPU frequency scaling by not affected by CPU frequency scaling by
applications running on the platform. applications running on the platform.
cpu_clock - Provides the cpu clock time consumed by
applications running on the platform.
B<Note>: The statistics can be retrieved using the B<domstats> command using B<Note>: The statistics can be retrieved using the B<domstats> command using
the I<--perf> flag. the I<--perf> flag.