<div dir="ltr"><br><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 10, 2017 at 3:22 AM, John Ferlan <span dir="ltr"><<a href="mailto:jferlan@redhat.com" target="_blank">jferlan@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-"><br>
<br>
On 01/27/2017 06:01 AM, Nitesh Konkar wrote:<br>
> This patch adds support and documentation<br>
> for the page_faults_maj perf event.<br>
><br>
> Signed-off-by: Nitesh Konkar <<a href="mailto:nitkon12@linux.vnet.ibm.com">nitkon12@linux.vnet.ibm.com</a>><br>
> ---<br>
>  docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a>                   |  7 +++++++<br>
>  docs/news.xml                               |  4 ++--<br>
>  docs/schemas/domaincommon.rng               |  1 +<br>
>  include/libvirt/libvirt-<wbr>domain.h            | 10 ++++++++++<br>
>  src/libvirt-domain.c                        |  3 +++<br>
>  src/qemu/qemu_driver.c                      |  1 +<br>
>  src/util/virperf.c                          |  5 ++++-<br>
>  src/util/virperf.h                          |  1 +<br>
>  tests/genericxml2xmlindata/<wbr>generic-perf.xml |  1 +<br>
>  tools/virsh.pod                             |  5 +++++<br>
>  10 files changed, 35 insertions(+), 3 deletions(-)<br>
><br>
<br>
</span>NB: Similar comments from the page_faults_min...<br>
<span class="gmail-"><br>
> diff --git a/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a> b/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a><br>
> index 1857168..50a6bdb 100644<br>
> --- a/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a><br>
> +++ b/docs/<a href="http://formatdomain.html.in" rel="noreferrer" target="_blank">formatdomain.html.in</a><br>
> @@ -1943,6 +1943,7 @@<br>
>    &lt;event name='context_switches' enabled='no'/&gt;<br>
>    &lt;event name='cpu_migrations' enabled='no'/&gt;<br>
>    &lt;event name='page_faults_min' enabled='no'/&gt;<br>
> +  &lt;event name='page_faults_maj' enabled='no'/&gt;<br>
>  &lt;/perf&gt;<br>
>  ...<br>
>  </pre><br>
> @@ -2052,6 +2053,12 @@<br>
>            platform</td><br>
>        <td><code>perf.page_faults_<wbr>min</code></td><br>
>      </tr><br>
> +    <tr><br>
> +      <td><code>page_faults_maj</<wbr>code></td><br>
> +      <td>the count of major page faults by applications running on the<br>
> +          platform</td><br>
> +      <td><code>perf.page_faults_<wbr>maj</code></td><br>
> +    </tr><br>
<br>
</span>As already noted in patch 3... is maj+min the same as what patch 3 provides?<br></blockquote><div><br>maj+min is not always exactly the same as page faults. Sometimes there is a small offset<br></div><div>value.<br></div><div><br>Eg: perf record -a --event={page-faults,major-faults,minor-faults}<br>47 page-faults                                                                              <br>0 major-faults                                                                                 <br>46 minor-faults<br></div><div>Offset by 1<br><br></div><div>Eg:  virsh domstats --perf<br>Domain: 'Fedora'<br>  perf.page_faults=890<br>  perf.page_faults_min=890<br>  perf.page_faults_maj=0<br></div><div>Here maj+min=page_faults<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Thus are all necessary?<br></blockquote><div>I am not sure on this part. Probably yes as we dont want<br></div><div>the user to add min+maj to get (approx)total page faults. <br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class="gmail-"><br>
>    </table><br>
><br>
>      <h3><a name="elementsDevices"><wbr>Devices</a></h3><br>
> diff --git a/docs/news.xml b/docs/news.xml<br>
> index 0e7c0d2..fe533f2 100644<br>
> --- a/docs/news.xml<br>
> +++ b/docs/news.xml<br>
> @@ -138,8 +138,8 @@<br>
>            executed, branch misses, bus cycles, stalled frontend<br>
>            cpu cycles, stalled backend cpu cycles, ref cpu cycles,<br>
>            cpu clock, task clock, page faults, context switches,<br>
> -          cpu migrations and page faults min by applications<br>
> -          running on the platform.<br>
> +          cpu migrations, page faults min and page faults maj by<br>
> +          applications running on the platform.<br>
<br>
</span>Remove news.xml<br>
<div><div class="gmail-h5"><br>
>          </description><br>
>        </change><br>
>        <change><br>
> diff --git a/docs/schemas/domaincommon.<wbr>rng b/docs/schemas/domaincommon.<wbr>rng<br>
> index f30ec0d..5f986d6 100644<br>
> --- a/docs/schemas/domaincommon.<wbr>rng<br>
> +++ b/docs/schemas/domaincommon.<wbr>rng<br>
> @@ -439,6 +439,7 @@<br>
>                <value>context_switches</<wbr>value><br>
>                <value>cpu_migrations</value><br>
>                <value>page_faults_min</value><br>
> +              <value>page_faults_maj</value><br>
>              </choice><br>
>            </attribute><br>
>            <attribute name="enabled"><br>
> diff --git a/include/libvirt/libvirt-<wbr>domain.h b/include/libvirt/libvirt-<wbr>domain.h<br>
> index 108591a..d16200f 100644<br>
> --- a/include/libvirt/libvirt-<wbr>domain.h<br>
> +++ b/include/libvirt/libvirt-<wbr>domain.h<br>
> @@ -2248,6 +2248,16 @@ void virDomainStatsRecordListFree(<wbr>virDomainStatsRecordPtr *stats);<br>
>   */<br>
>  # define VIR_PERF_PARAM_PAGE_FAULTS_MIN  "page_faults_min"<br>
><br>
> +/**<br>
> + * VIR_PERF_PARAM_PAGE_FAULTS_<wbr>MAJ:<br>
> + *<br>
> + * Macro for typed parameter name that represents page_faults_maj<br>
> + * perf event which can be used to measure the count of major page<br>
> + * faults by applications running on the platform. It corresponds<br>
> + * to the "perf.page_faults_maj" field in the *Stats APIs.<br>
> + */<br>
> +# define VIR_PERF_PARAM_PAGE_FAULTS_MAJ  "page_faults_maj"<br>
> +<br>
>  int virDomainGetPerfEvents(<wbr>virDomainPtr dom,<br>
>                             virTypedParameterPtr *params,<br>
>                             int *nparams,<br>
> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c<br>
> index 1be385e..1d7c181 100644<br>
> --- a/src/libvirt-domain.c<br>
> +++ b/src/libvirt-domain.c<br>
> @@ -11265,6 +11265,9 @@ virConnectGetDomainCapabilitie<wbr>s(virConnectPtr conn,<br>
>   *     "perf.page_faults_min" - The count of minor page faults as unsigned long<br>
>   *                              long. It is produced by the page_faults_min<br>
>   *                              perf event.<br>
> + *     "perf.page_faults_maj" - The count of major page faults as unsigned long<br>
> + *                              long. It is produced by the page_faults_maj<br>
> + *                              perf event<br>
>   *<br>
>   * Note that entire stats groups or individual stat fields may be missing from<br>
>   * the output in case they are not supported by the given hypervisor, are not<br>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c<br>
> index 4f24fa6..c88bf5a 100644<br>
> --- a/src/qemu/qemu_driver.c<br>
> +++ b/src/qemu/qemu_driver.c<br>
> @@ -9555,6 +9555,7 @@ qemuDomainSetPerfEvents(<wbr>virDomainPtr dom,<br>
>                                 VIR_PERF_PARAM_CONTEXT_<wbr>SWITCHES, VIR_TYPED_PARAM_BOOLEAN,<br>
>                                 VIR_PERF_PARAM_CPU_MIGRATIONS, VIR_TYPED_PARAM_BOOLEAN,<br>
>                                 VIR_PERF_PARAM_PAGE_FAULTS_<wbr>MIN, VIR_TYPED_PARAM_BOOLEAN,<br>
> +                               VIR_PERF_PARAM_PAGE_FAULTS_<wbr>MAJ, VIR_TYPED_PARAM_BOOLEAN,<br>
>                                 NULL) < 0)<br>
>          return -1;<br>
><br>
> diff --git a/src/util/virperf.c b/src/util/virperf.c<br>
> index c839b04..37f61e2 100644<br>
> --- a/src/util/virperf.c<br>
> +++ b/src/util/virperf.c<br>
> @@ -46,7 +46,7 @@ VIR_ENUM_IMPL(virPerfEvent, VIR_PERF_EVENT_LAST,<br>
>                "stalled_cycles_backend", "ref_cpu_cycles",<br>
>                "cpu_clock", "task_clock", "page_faults",<br>
>                "context_switches", "cpu_migrations",<br>
> -              "page_faults_min");<br>
> +              "page_faults_min", "page_faults_maj");<br>
><br>
>  struct virPerfEvent {<br>
>      int type;<br>
> @@ -133,6 +133,9 @@ static struct virPerfEventAttr attrs[] = {<br>
>      {.type = VIR_PERF_EVENT_PAGE_FAULTS_<wbr>MIN,<br>
>       .attrType = PERF_TYPE_SOFTWARE,<br>
>       .attrConfig = PERF_COUNT_SW_PAGE_FAULTS_MIN}<wbr>,<br>
> +    {.type = VIR_PERF_EVENT_PAGE_FAULTS_<wbr>MAJ,<br>
> +     .attrType = PERF_TYPE_SOFTWARE,<br>
> +     .attrConfig = PERF_COUNT_SW_PAGE_FAULTS_MAJ}<wbr>,<br>
>  };<br>
>  typedef struct virPerfEventAttr *virPerfEventAttrPtr;<br>
><br>
> diff --git a/src/util/virperf.h b/src/util/virperf.h<br>
> index aec352b..e99c870 100644<br>
> --- a/src/util/virperf.h<br>
> +++ b/src/util/virperf.h<br>
> @@ -53,6 +53,7 @@ typedef enum {<br>
>      VIR_PERF_EVENT_CONTEXT_<wbr>SWITCHES,   /* Count of context switches */<br>
>      VIR_PERF_EVENT_CPU_MIGRATIONS,   /* Count of cpu migrations */<br>
>      VIR_PERF_EVENT_PAGE_FAULTS_<wbr>MIN,   /* Count of minor page faults */<br>
> +    VIR_PERF_EVENT_PAGE_FAULTS_<wbr>MAJ,   /* Count of major page faults */<br>
><br>
>      VIR_PERF_EVENT_LAST<br>
>  } virPerfEventType;<br>
> diff --git a/tests/genericxml2xmlindata/<wbr>generic-perf.xml b/tests/genericxml2xmlindata/<wbr>generic-perf.xml<br>
> index 62ad973..a5b6dfb 100644<br>
> --- a/tests/genericxml2xmlindata/<wbr>generic-perf.xml<br>
> +++ b/tests/genericxml2xmlindata/<wbr>generic-perf.xml<br>
> @@ -32,6 +32,7 @@<br>
>      <event name='context_switches' enabled='yes'/><br>
>      <event name='cpu_migrations' enabled='yes'/><br>
>      <event name='page_faults_min' enabled='yes'/><br>
> +    <event name='page_faults_maj' enabled='yes'/><br>
>    </perf><br>
>    <devices><br>
>    </devices><br>
> diff --git a/tools/virsh.pod b/tools/virsh.pod<br>
> index 4eb689e..d6bec4d 100644<br>
> --- a/tools/virsh.pod<br>
> +++ b/tools/virsh.pod<br>
> @@ -952,6 +952,7 @@ I<--perf> returns the statistics of all enabled perf events:<br>
>  "perf.context_switches" - the count of context switches<br>
>  "perf.cpu_migrations" - the count of cpu migrations<br>
>  "perf.page_faults_min" - the count of minor page faults<br>
> +"perf.page_faults_maj" - the count of major page faults<br>
><br>
>  See the B<perf> command for more details about each event.<br>
><br>
> @@ -2331,6 +2332,10 @@ B<Valid perf event names><br>
>                      the page was present in the page cache, and therefore the<br>
>                      fault avoided loading it from storage, by applications<br>
>                      running on the platform<br>
> +  page_faults_maj - Provides the count of major page faults, that is, where<br>
> +                    the page was not present in the page cache, and therefore<br>
> +                    had to be fetched from storage, by applications<br>
> +                    running on the platform<br>
<br>
</div></div>The min/maj descriptions here are a bit more wordy. It does help, but I<br>
wonder now is this the wrong place. That is should the longer<br>
description be in the API so that the rendered API docs get a nice long<br>
description and the virsh output remains somewhat terse.<br>
<br>
It really is up to you to decide, but I'm leaning towards better API doc<br>
descriptions...<br></blockquote><div>Okay. Lets have a longer description in API and terse decription in virsh output. <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class="gmail-HOEnZb"><font color="#888888"><br>
John<br>
</font></span><div class="gmail-HOEnZb"><div class="gmail-h5">><br>
>  B<Note>: The statistics can be retrieved using the B<domstats> command using<br>
>  the I<--perf> flag.<br>
><br></div></div></blockquote><div><br></div><div>Thanks for all the review comments.  <br></div></div><br></div></div>