On Fri, Feb 10, 2017 at 3:10 AM, John Ferlan <jfer...@redhat.com> wrote:

>
>
> On 01/27/2017 06:01 AM, Nitesh Konkar wrote:
> > This patch adds support and documentation for
> > the cpu_clock perf event.
> >
> > Signed-off-by: Nitesh Konkar <nitko...@linux.vnet.ibm.com>
> > ---
> >  docs/formatdomain.html.in                   |  6 ++++++
> >  docs/news.xml                               |  4 ++--
> >  docs/schemas/domaincommon.rng               |  1 +
> >  include/libvirt/libvirt-domain.h            | 10 ++++++++++
> >  src/libvirt-domain.c                        |  2 ++
> >  src/qemu/qemu_driver.c                      |  1 +
> >  src/util/virperf.c                          |  6 +++++-
> >  src/util/virperf.h                          |  1 +
> >  tests/genericxml2xmlindata/generic-perf.xml |  1 +
> >  tools/virsh.pod                             |  3 +++
> >  10 files changed, 32 insertions(+), 3 deletions(-)
> >
> > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> > index 3f7f875..e44e758 100644
> > --- a/docs/formatdomain.html.in
> > +++ b/docs/formatdomain.html.in
> > @@ -1937,6 +1937,7 @@
> >    &lt;event name='stalled_cycles_frontend' enabled='no'/&gt;
> >    &lt;event name='stalled_cycles_backend' enabled='no'/&gt;
> >    &lt;event name='ref_cpu_cycles' enabled='no'/&gt;
> > +  &lt;event name='cpu_clock' enabled='no'/&gt;
> >  &lt;/perf&gt;
> >  ...
> >  </pre>
> > @@ -2015,6 +2016,11 @@
> >           by applications running on the platform</td>
> >        <td><code>perf.ref_cpu_cycles</code></td>
> >      </tr>
> > +    <tr>
> > +      <td><code>cpu_clock</code></td>
> > +      <td>the count of cpu clock by applications running on the
> platform</td>
> > +      <td><code>perf.cpu_clock</code></td>
> > +    </tr>
> >    </table>
>
> "the count of cpu clock by applications..."
>
> doesn't convey enough meaning. Is that cycles? Time?  something else?
>
> The virsh.pod description seems to give the best hint...
>
> Some subsequent patches had longer descriptions in the virsh.pod, which
> got me thinking - where is the best place to have the longer
> description. I would think either in formatdomain or the
> libvirt-domain.{c|} description.  At least that way you don't need to
> mess with the 80 column formatting that is "nice" to have in virsh.pod
> output
>
Lets keep the virsh.pod and libvirt-domain.c explanantion terse and let
formatdomain have detailed explanation of the events. Do you agree?

>
>
> >
> >      <h3><a name="elementsDevices">Devices</a></h3>
> > diff --git a/docs/news.xml b/docs/news.xml
> > index ef7e2db..ec113ab 100644
> > --- a/docs/news.xml
> > +++ b/docs/news.xml
> > @@ -136,8 +136,8 @@
> >          <description>
> >            Add support to get the count of branch instructions
> >            executed, branch misses, bus cycles, stalled frontend
> > -          cpu cycles, stalled backend cpu cycles, and ref cpu
> > -          cycles by applications running on the platform.
> > +          cpu cycles, stalled backend cpu cycles, ref cpu cycles
> > +          and cpu clock by applications running on the platform.
> >          </description>
> >        </change>
> >        <change>
>
> So the latest decree is to not integrate news.xml into the patches with
> the code.  So just make one patch at the end that summarizes all the
> adjustments.
>
> Also this patch is wrong because it describes the additions in the 3.0.0
> section while this code would be available in 3.1.0.
>
Noted.

>
> > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.
> rng
> > index 4d76315..86a39c8 100644
> > --- a/docs/schemas/domaincommon.rng
> > +++ b/docs/schemas/domaincommon.rng
> > @@ -433,6 +433,7 @@
> >                <value>stalled_cycles_frontend</value>
> >                <value>stalled_cycles_backend</value>
> >                <value>ref_cpu_cycles</value>
> > +              <value>cpu_clock</value>
> >              </choice>
> >            </attribute>
> >            <attribute name="enabled">
> > diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-
> domain.h
> > index e303140..bffe955 100644
> > --- a/include/libvirt/libvirt-domain.h
> > +++ b/include/libvirt/libvirt-domain.h
> > @@ -2188,6 +2188,16 @@ void 
> > virDomainStatsRecordListFree(virDomainStatsRecordPtr
> *stats);
> >   */
> >  # 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 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,
> >                             virTypedParameterPtr *params,
> >                             int *nparams,
> > diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> > index 5b3e842..001cdd7 100644
> > --- a/src/libvirt-domain.c
> > +++ b/src/libvirt-domain.c
> > @@ -11250,6 +11250,8 @@ virConnectGetDomainCapabilities(virConnectPtr
> conn,
> >   *                             CPU frequency scaling by applications
> running
> >   *                             as unsigned long long. It is produced by
> the
> >   *                             ref_cpu_cycles perf event.
> > + *     "perf.cpu_clock" - The count of cpu clock 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
> >   * 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 516a851..ff4803c 100644
> > --- a/src/qemu/qemu_driver.c
> > +++ b/src/qemu/qemu_driver.c
> > @@ -9549,6 +9549,7 @@ qemuDomainSetPerfEvents(virDomainPtr dom,
> >                                 VIR_PERF_PARAM_STALLED_CYCLES_FRONTEND,
> 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_CPU_CLOCK,
> VIR_TYPED_PARAM_BOOLEAN,
> >                                 NULL) < 0)
> >          return -1;
> >
> > diff --git a/src/util/virperf.c b/src/util/virperf.c
> > index f64692b..3629e5b 100644
> > --- a/src/util/virperf.c
> > +++ b/src/util/virperf.c
> > @@ -43,7 +43,8 @@ VIR_ENUM_IMPL(virPerfEvent, VIR_PERF_EVENT_LAST,
> >                "cache_references", "cache_misses",
> >                "branch_instructions", "branch_misses",
> >                "bus_cycles", "stalled_cycles_frontend",
> > -              "stalled_cycles_backend", "ref_cpu_cycles");
> > +              "stalled_cycles_backend", "ref_cpu_cycles",
> > +              "cpu_clock");
> >
> >  struct virPerfEvent {
> >      int type;
> > @@ -112,6 +113,9 @@ static struct virPerfEventAttr attrs[] = {
> >       .attrConfig = 0,
> >  # endif
> >      },
> > +    {.type = VIR_PERF_EVENT_CPU_CLOCK,
> > +     .attrType = PERF_TYPE_SOFTWARE,
> > +     .attrConfig = PERF_COUNT_SW_CPU_CLOCK},
> >  };
> >  typedef struct virPerfEventAttr *virPerfEventAttrPtr;
> >
> > diff --git a/src/util/virperf.h b/src/util/virperf.h
> > index 1f43c92..81f1e20 100644
> > --- a/src/util/virperf.h
> > +++ b/src/util/virperf.h
> > @@ -47,6 +47,7 @@ typedef enum {
> >                                                the backend of the
> instruction
> >                                                processor pipeline */
> >      VIR_PERF_EVENT_REF_CPU_CYCLES,   /* Count of ref cpu cycles */
> > +    VIR_PERF_EVENT_CPU_CLOCK,   /* Count of cpu clock */
> >
> >      VIR_PERF_EVENT_LAST
> >  } virPerfEventType;
> > diff --git a/tests/genericxml2xmlindata/generic-perf.xml
> b/tests/genericxml2xmlindata/generic-perf.xml
> > index 437cd65..3e7834e 100644
> > --- a/tests/genericxml2xmlindata/generic-perf.xml
> > +++ b/tests/genericxml2xmlindata/generic-perf.xml
> > @@ -26,6 +26,7 @@
> >      <event name='stalled_cycles_frontend' enabled='yes'/>
> >      <event name='stalled_cycles_backend' enabled='yes'/>
> >      <event name='ref_cpu_cycles' enabled='yes'/>
> > +    <event name='cpu_clock' enabled='yes'/>
> >    </perf>
> >    <devices>
> >    </devices>
> > diff --git a/tools/virsh.pod b/tools/virsh.pod
> > index 290f508..2f0bf36 100644
> > --- a/tools/virsh.pod
> > +++ b/tools/virsh.pod
> > @@ -946,6 +946,7 @@ I<--perf> returns the statistics of all enabled perf
> events:
> >  "perf.stalled_cycles_frontend" - the count of stalled frontend cpu
> cycles,
> >  "perf.stalled_cycles_backend" - the count of stalled backend cpu cycles,
> >  "perf.ref_cpu_cycles" - the count of ref cpu cycles
> > +"perf.cpu_clock" - the count of cpu clock
>
>
> If you do a 'man tools/virsh.1' using an 80 column wide terminal, you'll
> note that starting with perf.stalled_cycles_frontend things go a bit
> haywire.
>
> I sent a patch to "fix" the existing format issues and make things a bit
> more consistent in this space.
>
Noted.

>
> If that's ACK'd then this will be affected. Still the text here still
> doesn't convey enough meaning.
>
> >
> >  See the B<perf> command for more details about each event.
> >
> > @@ -2310,6 +2311,8 @@ B<Valid perf event names>
> >    ref_cpu_cycles   -  Provides the count of total cpu cycles
> >                        not affected by CPU frequency scaling by
> >                        applications running on the platform.
> > +  cpu_clock - Provides the cpu clock time consumed by applications
> > +              running on the platform.
>
> Now this is a little bit better w/r/t meaning, but needs to be fit in
> else where as well.
>
Sure.

>
> John
> >
> >  B<Note>: The statistics can be retrieved using the B<domstats> command
> using
> >  the I<--perf> flag.
> >
>
Thanks.
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to