]> xenbits.xensource.com Git - libvirt.git/commitdiff
perf: add one more perf event support
authorNitesh Konkar <niteshkonkar.libvirt@gmail.com>
Wed, 7 Dec 2016 10:57:36 +0000 (16:27 +0530)
committerJohn Ferlan <jferlan@redhat.com>
Wed, 7 Dec 2016 12:03:57 +0000 (07:03 -0500)
With current perf framework, this patch adds support and documentation
for the branch_instructions perf event.

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
docs/formatdomain.html.in
docs/schemas/domaincommon.rng
include/libvirt/libvirt-domain.h
src/libvirt-domain.c
src/qemu/qemu_driver.c
src/util/virperf.c
src/util/virperf.h
tests/genericxml2xmlindata/generic-perf.xml
tools/virsh.pod

index 2bcc6d714b3f5d27339d43132b32ab3ff60b2781..9218eecba0216f7e3b3a9f6d06a338701d5dd1c7 100644 (file)
   &lt;event name='instructions' enabled='yes'/&gt;
   &lt;event name='cache_references' enabled='no'/&gt;
   &lt;event name='cache_misses' enabled='no'/&gt;
+  &lt;event name='branch_instructions' enabled='no'/&gt;
 &lt;/perf&gt;
 ...
 </pre>
       <td>the count of cache misses by applications running on the platform</td>
       <td><code>perf.cache_misses</code></td>
     </tr>
+    <tr>
+      <td><code>branch_instructions</code></td>
+      <td>the count of branch instructions by applications running on the platform</td>
+      <td><code>perf.branch_instructions</code></td>
+    </tr>
   </table>
 
     <h3><a name="elementsDevices">Devices</a></h3>
index 2800552759e36624a3ae56e70d11c1198656e3e7..c004233e75acd32c8517b1dfbf7024fb0591803d 100644 (file)
               <value>instructions</value>
               <value>cache_references</value>
               <value>cache_misses</value>
+              <value>branch_instructions</value>
             </choice>
           </attribute>
           <attribute name="enabled">
index d64bb48eac58c60f32086bbd3d2fb26344b6797d..f43c9765a1c1717d3f614702c0d35eca620d6bf1 100644 (file)
@@ -2125,6 +2125,16 @@ void virDomainStatsRecordListFree(virDomainStatsRecordPtr *stats);
  */
 # define VIR_PERF_PARAM_CPU_CYCLES "cpu_cycles"
 
+/**
+ * VIR_PERF_PARAM_BRANCH_INSTRUCTIONS:
+ *
+ * Macro for typed parameter name that represents branch_instructions
+ * perf event which can be used to measure the count of branch instructions
+ * by applications running on the platform. It corresponds to the
+ * "perf.branch_instructions" field in the *Stats APIs.
+ */
+# define VIR_PERF_PARAM_BRANCH_INSTRUCTIONS "branch_instructions"
+
 int virDomainGetPerfEvents(virDomainPtr dom,
                            virTypedParameterPtr *params,
                            int *nparams,
index e0f4a51fc8fea748b380e3d3e6a4177dfb13a9db..6481abf38e93f7a1c409248dff5ba332b3e0bade 100644 (file)
@@ -11226,9 +11226,9 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
  *                               It is produced by cache_references perf event.
  *     "perf.instructions" - The count of instructions as unsigned long long.
  *                           It is produced by instructions perf event.
- *     "perf.cpu_cycles" - The count of cpu cycles (total/elapsed) as an
- *                         unsigned long long. It is produced by cpu_cycles
- *                         perf event.
+ *     "perf.branch_instructions" - The count of branch instructions as
+ *                                  unsigned long long. It is produced by
+ *                                  branch_instructions perf event.
  *
  * 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
index 4f624cbde6839d2ccdd636048f2a620c57b7b424..6b177e9e5b250ecaa832b664db221a33a8c98f15 100644 (file)
@@ -9857,6 +9857,7 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
                                VIR_PERF_PARAM_INSTRUCTIONS, 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_BRANCH_INSTRUCTIONS, VIR_TYPED_PARAM_BOOLEAN,
                                NULL) < 0)
         return -1;
 
index 5d57962442e9d110140a72a69aa5366797c95754..635faf1ca14eb5f95b6f870f62ac433613331854 100644 (file)
@@ -40,7 +40,8 @@ VIR_LOG_INIT("util.perf");
 VIR_ENUM_IMPL(virPerfEvent, VIR_PERF_EVENT_LAST,
               "cmt", "mbmt", "mbml",
               "cpu_cycles", "instructions",
-              "cache_references", "cache_misses");
+              "cache_references", "cache_misses",
+              "branch_instructions");
 
 struct virPerfEvent {
     int type;
@@ -85,6 +86,9 @@ static struct virPerfEventAttr attrs[] = {
     {.type = VIR_PERF_EVENT_CACHE_MISSES,
      .attrType = PERF_TYPE_HARDWARE,
      .attrConfig = PERF_COUNT_HW_CACHE_MISSES},
+    {.type = VIR_PERF_EVENT_BRANCH_INSTRUCTIONS,
+     .attrType = PERF_TYPE_HARDWARE,
+     .attrConfig = PERF_COUNT_HW_BRANCH_INSTRUCTIONS},
 };
 typedef struct virPerfEventAttr *virPerfEventAttrPtr;
 
index 3fca2d0352d7bfc76f64419cb80d20add93ae6ea..8ebc03cbb20ff1505210c2351749410a454820ae 100644 (file)
@@ -36,6 +36,8 @@ typedef enum {
     VIR_PERF_EVENT_INSTRUCTIONS,     /* Count of instructions for application */
     VIR_PERF_EVENT_CACHE_REFERENCES, /* Cache hits by applications */
     VIR_PERF_EVENT_CACHE_MISSES,     /* Cache misses by applications */
+    VIR_PERF_EVENT_BRANCH_INSTRUCTIONS, /* Count of branch instructions
+                                           for applications */
 
     VIR_PERF_EVENT_LAST
 } virPerfEventType;
index a91413367e373af74ebfd6f4ccd124936dc153a8..92e584762d33f4b2553b22b676253c3291595726 100644 (file)
@@ -20,6 +20,7 @@
     <event name='instructions' enabled='yes'/>
     <event name='cache_references' enabled='no'/>
     <event name='cache_misses' enabled='no'/>
+    <event name='branch_instructions' enabled='yes'/>
   </perf>
   <devices>
   </devices>
index 6b838eea44d2aefeb9a79e0561b26d43397c142a..869062aa5aef241afdcbfb0e41c8c7f3322cff67 100644 (file)
@@ -945,7 +945,8 @@ I<--perf> returns the statistics of all enabled perf events:
 "perf.cpu_cycles" - the count of cpu cycles (total/elapsed),
 "perf.instructions" - the count of instructions,
 "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
 
 See the B<perf> command for more details about each event.
 
@@ -2292,6 +2293,9 @@ B<Valid perf event names>
                      (total/elapsed). May be used with
                      instructions in order to get a cycles
                      per instruction.
+  branch_instructions - Provides the count of branch instructions
+                        executed by applications running on the
+                        platform.
 
 B<Note>: The statistics can be retrieved using the B<domstats> command using
 the I<--perf> flag.