perf: add branch_misses perf event support

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

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
This commit is contained in:
Nitesh Konkar 2016-12-11 19:00:11 +05:30 committed by John Ferlan
parent cdd6819318
commit 8981d7925e
10 changed files with 32 additions and 4 deletions

View File

@ -1928,6 +1928,7 @@
&lt;event name='cache_references' enabled='no'/&gt; &lt;event name='cache_references' enabled='no'/&gt;
&lt;event name='cache_misses' enabled='no'/&gt; &lt;event name='cache_misses' enabled='no'/&gt;
&lt;event name='branch_instructions' enabled='no'/&gt; &lt;event name='branch_instructions' enabled='no'/&gt;
&lt;event name='branch_misses' enabled='no'/&gt;
&lt;/perf&gt; &lt;/perf&gt;
... ...
</pre> </pre>
@ -1978,6 +1979,11 @@
<td>the count of branch instructions by applications running on the platform</td> <td>the count of branch instructions by applications running on the platform</td>
<td><code>perf.branch_instructions</code></td> <td><code>perf.branch_instructions</code></td>
</tr> </tr>
<tr>
<td><code>branch_misses</code></td>
<td>the count of branch misses by applications running on the platform</td>
<td><code>perf.branch_misses</code></td>
</tr>
</table> </table>
<h3><a name="elementsDevices">Devices</a></h3> <h3><a name="elementsDevices">Devices</a></h3>

View File

@ -29,9 +29,9 @@
</li> </li>
<li><strong>Improvements</strong> <li><strong>Improvements</strong>
<ul> <ul>
<li>perf: Add perf.branch_instructions<br/> <li>perf: Add more perf statistics<br/>
Add support to get the count of branch instructions executed Add support to get the count of branch instructions executed
by applications running on the platform and branch misses by applications running on the platform
</li> </li>
</ul> </ul>
</li> </li>

View File

@ -428,6 +428,7 @@
<value>cache_references</value> <value>cache_references</value>
<value>cache_misses</value> <value>cache_misses</value>
<value>branch_instructions</value> <value>branch_instructions</value>
<value>branch_misses</value>
</choice> </choice>
</attribute> </attribute>
<attribute name="enabled"> <attribute name="enabled">

View File

@ -2135,6 +2135,16 @@ void virDomainStatsRecordListFree(virDomainStatsRecordPtr *stats);
*/ */
# define VIR_PERF_PARAM_BRANCH_INSTRUCTIONS "branch_instructions" # define VIR_PERF_PARAM_BRANCH_INSTRUCTIONS "branch_instructions"
/**
* VIR_PERF_PARAM_BRANCH_MISSES:
*
* Macro for typed parameter name that represents branch_misses
* perf event which can be used to measure the count of branch misses
* by applications running on the platform. It corresponds to the
* "perf.branch_misses" field in the *Stats APIs.
*/
# define VIR_PERF_PARAM_BRANCH_MISSES "branch_misses"
int virDomainGetPerfEvents(virDomainPtr dom, int virDomainGetPerfEvents(virDomainPtr dom,
virTypedParameterPtr *params, virTypedParameterPtr *params,
int *nparams, int *nparams,

View File

@ -11232,6 +11232,8 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
* "perf.branch_instructions" - The count of branch instructions as * "perf.branch_instructions" - The count of branch instructions as
* unsigned long long. It is produced by * unsigned long long. It is produced by
* branch_instructions perf event. * branch_instructions perf event.
* "perf.branch_misses" - The count of branch misses as unsigned long
* long. It is produced by branch_misses 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

@ -9853,6 +9853,7 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
VIR_PERF_PARAM_CACHE_REFERENCES, VIR_TYPED_PARAM_BOOLEAN, VIR_PERF_PARAM_CACHE_REFERENCES, VIR_TYPED_PARAM_BOOLEAN,
VIR_PERF_PARAM_CACHE_MISSES, VIR_TYPED_PARAM_BOOLEAN, VIR_PERF_PARAM_CACHE_MISSES, VIR_TYPED_PARAM_BOOLEAN,
VIR_PERF_PARAM_BRANCH_INSTRUCTIONS, VIR_TYPED_PARAM_BOOLEAN, VIR_PERF_PARAM_BRANCH_INSTRUCTIONS, VIR_TYPED_PARAM_BOOLEAN,
VIR_PERF_PARAM_BRANCH_MISSES, VIR_TYPED_PARAM_BOOLEAN,
NULL) < 0) NULL) < 0)
return -1; return -1;

View File

@ -41,7 +41,7 @@ VIR_ENUM_IMPL(virPerfEvent, VIR_PERF_EVENT_LAST,
"cmt", "mbmt", "mbml", "cmt", "mbmt", "mbml",
"cpu_cycles", "instructions", "cpu_cycles", "instructions",
"cache_references", "cache_misses", "cache_references", "cache_misses",
"branch_instructions"); "branch_instructions", "branch_misses");
struct virPerfEvent { struct virPerfEvent {
int type; int type;
@ -89,6 +89,9 @@ static struct virPerfEventAttr attrs[] = {
{.type = VIR_PERF_EVENT_BRANCH_INSTRUCTIONS, {.type = VIR_PERF_EVENT_BRANCH_INSTRUCTIONS,
.attrType = PERF_TYPE_HARDWARE, .attrType = PERF_TYPE_HARDWARE,
.attrConfig = PERF_COUNT_HW_BRANCH_INSTRUCTIONS}, .attrConfig = PERF_COUNT_HW_BRANCH_INSTRUCTIONS},
{.type = VIR_PERF_EVENT_BRANCH_MISSES,
.attrType = PERF_TYPE_HARDWARE,
.attrConfig = PERF_COUNT_HW_BRANCH_MISSES},
}; };
typedef struct virPerfEventAttr *virPerfEventAttrPtr; typedef struct virPerfEventAttr *virPerfEventAttrPtr;

View File

@ -38,6 +38,7 @@ typedef enum {
VIR_PERF_EVENT_CACHE_MISSES, /* Cache misses by applications */ VIR_PERF_EVENT_CACHE_MISSES, /* Cache misses by applications */
VIR_PERF_EVENT_BRANCH_INSTRUCTIONS, /* Count of branch instructions VIR_PERF_EVENT_BRANCH_INSTRUCTIONS, /* Count of branch instructions
for applications */ for applications */
VIR_PERF_EVENT_BRANCH_MISSES, /* Count of branch misses for applications */
VIR_PERF_EVENT_LAST VIR_PERF_EVENT_LAST
} virPerfEventType; } virPerfEventType;

View File

@ -21,6 +21,7 @@
<event name='cache_references' enabled='no'/> <event name='cache_references' enabled='no'/>
<event name='cache_misses' enabled='no'/> <event name='cache_misses' enabled='no'/>
<event name='branch_instructions' enabled='yes'/> <event name='branch_instructions' enabled='yes'/>
<event name='branch_misses' enabled='yes'/>
</perf> </perf>
<devices> <devices>
</devices> </devices>

View File

@ -946,7 +946,8 @@ I<--perf> returns the statistics of all enabled perf events:
"perf.instructions" - the count of instructions, "perf.instructions" - the count of instructions,
"perf.cache_references" - the count of cache hits, "perf.cache_references" - the count of cache hits,
"perf.cache_misses" - the count of caches misses, "perf.cache_misses" - the count of caches misses,
"perf.branch_instructions" - the count of application branch instructions "perf.branch_instructions" - the count of branch instructions,
"perf.branch_misses" - the count of branch misses
See the B<perf> command for more details about each event. See the B<perf> command for more details about each event.
@ -2296,6 +2297,8 @@ B<Valid perf event names>
branch_instructions - Provides the count of branch instructions branch_instructions - Provides the count of branch instructions
executed by applications running on the executed by applications running on the
platform. platform.
branch_misses - Provides the count of branch misses executed
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.