All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Matlack <dmatlack@google.com>
To: Jing Zhang <jingzhangos@google.com>
Cc: KVM <kvm@vger.kernel.org>, KVMPPC <kvm-ppc@vger.kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Jim Mattson <jmattson@google.com>,
	Peter Shier <pshier@google.com>, Oliver Upton <oupton@google.com>,
	David Rientjes <rientjes@google.com>
Subject: Re: [PATCH v1 2/4] KVM: stats: Update doc for histogram statistics
Date: Thu, 8 Jul 2021 21:16:10 +0000	[thread overview]
Message-ID: <YOdrGg47GnvyEDPF@google.com> (raw)
In-Reply-To: <YOdqvvmE2ly6o9Fa@google.com>

On Thu, Jul 08, 2021 at 09:14:38PM +0000, David Matlack wrote:
> On Tue, Jul 06, 2021 at 06:03:48PM +0000, Jing Zhang wrote:
> > Add documentations for linear and logarithmic histogram statistics.
> > Add binary stats capability text which is missing during merge of
> > the binary stats patch.
> > 
> > Signed-off-by: Jing Zhang <jingzhangos@google.com>
> > ---
> >  Documentation/virt/kvm/api.rst | 36 +++++++++++++++++++++++++++++++---
> >  1 file changed, 33 insertions(+), 3 deletions(-)
> > 
> > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
> > index 3b6e3b1628b4..948d33c26704 100644
> > --- a/Documentation/virt/kvm/api.rst
> > +++ b/Documentation/virt/kvm/api.rst
> > @@ -5171,6 +5171,9 @@ by a string of size ``name_size``.
> >  	#define KVM_STATS_TYPE_CUMULATIVE	(0x0 << KVM_STATS_TYPE_SHIFT)
> >  	#define KVM_STATS_TYPE_INSTANT		(0x1 << KVM_STATS_TYPE_SHIFT)
> >  	#define KVM_STATS_TYPE_PEAK		(0x2 << KVM_STATS_TYPE_SHIFT)
> > +	#define KVM_STATS_TYPE_LINEAR_HIST	(0x3 << KVM_STATS_TYPE_SHIFT)
> > +	#define KVM_STATS_TYPE_LOG_HIST		(0x4 << KVM_STATS_TYPE_SHIFT)
> > +	#define KVM_STATS_TYPE_MAX		KVM_STATS_TYPE_LOG_HIST
> >  
> >  	#define KVM_STATS_UNIT_SHIFT		4
> >  	#define KVM_STATS_UNIT_MASK		(0xF << KVM_STATS_UNIT_SHIFT)
> > @@ -5178,11 +5181,13 @@ by a string of size ``name_size``.
> >  	#define KVM_STATS_UNIT_BYTES		(0x1 << KVM_STATS_UNIT_SHIFT)
> >  	#define KVM_STATS_UNIT_SECONDS		(0x2 << KVM_STATS_UNIT_SHIFT)
> >  	#define KVM_STATS_UNIT_CYCLES		(0x3 << KVM_STATS_UNIT_SHIFT)
> > +	#define KVM_STATS_UNIT_MAX		KVM_STATS_UNIT_CYCLES
> >  
> >  	#define KVM_STATS_BASE_SHIFT		8
> >  	#define KVM_STATS_BASE_MASK		(0xF << KVM_STATS_BASE_SHIFT)
> >  	#define KVM_STATS_BASE_POW10		(0x0 << KVM_STATS_BASE_SHIFT)
> >  	#define KVM_STATS_BASE_POW2		(0x1 << KVM_STATS_BASE_SHIFT)
> > +	#define KVM_STATS_BASE_MAX		KVM_STATS_BASE_POW2
> 
> Should these FOO_MAX additions go in a separate commit too?
> 
> >  
> >  	struct kvm_stats_desc {
> >  		__u32 flags;
> > @@ -5214,6 +5219,22 @@ Bits 0-3 of ``flags`` encode the type:
> >      represents a peak value for a measurement, for example the maximum number
> >      of items in a hash table bucket, the longest time waited and so on.
> >      The corresponding ``size`` field for this type is always 1.
> > +  * ``KVM_STATS_TYPE_LINEAR_HIST``
> > +    The statistics data is in the form of linear histogram. The number of
> > +    buckets is specified by the ``size`` field. The size of buckets is specified
> > +    by the ``hist_param`` field. The range of the Nth bucket (1 <= N < ``size``)
> 
> Using 1-based indexes is a little jarring but maybe that's just me :).
> 
> > +    is [``hist_param``*(N-1), ``hist_param``*N), while the range of the last
> > +    bucket is [``hist_param``*(``size``-1), +INF). (+INF means positive infinity
> > +    value.) The bucket value indicates how many times the statistics data is in
> > +    the bucket's range.
> > +  * ``KVM_STATS_TYPE_LOG_HIST``
> > +    The statistics data is in the form of logarithmic histogram. The number of
> > +    buckets is specified by the ``size`` field. The base of logarithm is
> > +    specified by the ``hist_param`` field. The range of the Nth bucket (1 < N <
> 
> Should 1 be 2 here? The first bucket uses a slightly differen formula as
> you mention in the next sentence.

Oops I see you used "<" instead of "<=" so what you have is correct. I
think reordering the sentences would still be helpfull though.

> 
> Actually it may be clearer if you re-ordered the sentences a bit:
> 
>   The range of the first bucket is [0, 1), while the range of the last
>   bucket is [pow(hist_param, size-1), +INF). Otherwise the Nth bucket
>   (1-indexed) covers [pow(hist_param, N-2), pow(histparam, N-1)).
> 
> > +    ``size``) is [pow(``hist_param``, N-2), pow(``hist_param``, N-1)). The range
> > +    of the first bucket is [0, 1), while the range of the last bucket is
> > +    [pow(``hist_param``, ``size``-2), +INF). The bucket value indicates how many
> > +    times the statistics data is in the bucket's range.
> >  
> >  Bits 4-7 of ``flags`` encode the unit:
> >    * ``KVM_STATS_UNIT_NONE``
> > @@ -5246,9 +5267,10 @@ unsigned 64bit data.
> >  The ``offset`` field is the offset from the start of Data Block to the start of
> >  the corresponding statistics data.
> >  
> > -The ``unused`` field is reserved for future support for other types of
> > -statistics data, like log/linear histogram. Its value is always 0 for the types
> > -defined above.
> > +The ``hist_param`` field is used as a parameter for histogram statistics data.
> > +For linear histogram statistics data, it indicates the size of a bucket. For
> > +logarithmic histogram statistics data, it indicates the base of the logarithm.
> > +Only base of 2 is supported fo logarithmic histogram.
> 
> s/fo/for/
> 
> >  
> >  The ``name`` field is the name string of the statistics data. The name string
> >  starts at the end of ``struct kvm_stats_desc``.  The maximum length including
> > @@ -7182,3 +7204,11 @@ The argument to KVM_ENABLE_CAP is also a bitmask, and must be a subset
> >  of the result of KVM_CHECK_EXTENSION.  KVM will forward to userspace
> >  the hypercalls whose corresponding bit is in the argument, and return
> >  ENOSYS for the others.
> > +
> > +8.35 KVM_CAP_STATS_BINARY_FD
> > +----------------------------
> > +
> > +:Architectures: all
> > +
> > +This capability indicates the feature that userspace can get a file descriptor
> > +for every VM and VCPU to read statistics data in binary format.
> > -- 
> > 2.32.0.93.g670b81a890-goog
> > 

WARNING: multiple messages have this Message-ID (diff)
From: David Matlack <dmatlack@google.com>
To: Jing Zhang <jingzhangos@google.com>
Cc: KVM <kvm@vger.kernel.org>, KVMPPC <kvm-ppc@vger.kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Jim Mattson <jmattson@google.com>,
	Peter Shier <pshier@google.com>, Oliver Upton <oupton@google.com>,
	David Rientjes <rientjes@google.com>
Subject: Re: [PATCH v1 2/4] KVM: stats: Update doc for histogram statistics
Date: Thu, 08 Jul 2021 21:16:10 +0000	[thread overview]
Message-ID: <YOdrGg47GnvyEDPF@google.com> (raw)
In-Reply-To: <YOdqvvmE2ly6o9Fa@google.com>

On Thu, Jul 08, 2021 at 09:14:38PM +0000, David Matlack wrote:
> On Tue, Jul 06, 2021 at 06:03:48PM +0000, Jing Zhang wrote:
> > Add documentations for linear and logarithmic histogram statistics.
> > Add binary stats capability text which is missing during merge of
> > the binary stats patch.
> > 
> > Signed-off-by: Jing Zhang <jingzhangos@google.com>
> > ---
> >  Documentation/virt/kvm/api.rst | 36 +++++++++++++++++++++++++++++++---
> >  1 file changed, 33 insertions(+), 3 deletions(-)
> > 
> > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
> > index 3b6e3b1628b4..948d33c26704 100644
> > --- a/Documentation/virt/kvm/api.rst
> > +++ b/Documentation/virt/kvm/api.rst
> > @@ -5171,6 +5171,9 @@ by a string of size ``name_size``.
> >  	#define KVM_STATS_TYPE_CUMULATIVE	(0x0 << KVM_STATS_TYPE_SHIFT)
> >  	#define KVM_STATS_TYPE_INSTANT		(0x1 << KVM_STATS_TYPE_SHIFT)
> >  	#define KVM_STATS_TYPE_PEAK		(0x2 << KVM_STATS_TYPE_SHIFT)
> > +	#define KVM_STATS_TYPE_LINEAR_HIST	(0x3 << KVM_STATS_TYPE_SHIFT)
> > +	#define KVM_STATS_TYPE_LOG_HIST		(0x4 << KVM_STATS_TYPE_SHIFT)
> > +	#define KVM_STATS_TYPE_MAX		KVM_STATS_TYPE_LOG_HIST
> >  
> >  	#define KVM_STATS_UNIT_SHIFT		4
> >  	#define KVM_STATS_UNIT_MASK		(0xF << KVM_STATS_UNIT_SHIFT)
> > @@ -5178,11 +5181,13 @@ by a string of size ``name_size``.
> >  	#define KVM_STATS_UNIT_BYTES		(0x1 << KVM_STATS_UNIT_SHIFT)
> >  	#define KVM_STATS_UNIT_SECONDS		(0x2 << KVM_STATS_UNIT_SHIFT)
> >  	#define KVM_STATS_UNIT_CYCLES		(0x3 << KVM_STATS_UNIT_SHIFT)
> > +	#define KVM_STATS_UNIT_MAX		KVM_STATS_UNIT_CYCLES
> >  
> >  	#define KVM_STATS_BASE_SHIFT		8
> >  	#define KVM_STATS_BASE_MASK		(0xF << KVM_STATS_BASE_SHIFT)
> >  	#define KVM_STATS_BASE_POW10		(0x0 << KVM_STATS_BASE_SHIFT)
> >  	#define KVM_STATS_BASE_POW2		(0x1 << KVM_STATS_BASE_SHIFT)
> > +	#define KVM_STATS_BASE_MAX		KVM_STATS_BASE_POW2
> 
> Should these FOO_MAX additions go in a separate commit too?
> 
> >  
> >  	struct kvm_stats_desc {
> >  		__u32 flags;
> > @@ -5214,6 +5219,22 @@ Bits 0-3 of ``flags`` encode the type:
> >      represents a peak value for a measurement, for example the maximum number
> >      of items in a hash table bucket, the longest time waited and so on.
> >      The corresponding ``size`` field for this type is always 1.
> > +  * ``KVM_STATS_TYPE_LINEAR_HIST``
> > +    The statistics data is in the form of linear histogram. The number of
> > +    buckets is specified by the ``size`` field. The size of buckets is specified
> > +    by the ``hist_param`` field. The range of the Nth bucket (1 <= N < ``size``)
> 
> Using 1-based indexes is a little jarring but maybe that's just me :).
> 
> > +    is [``hist_param``*(N-1), ``hist_param``*N), while the range of the last
> > +    bucket is [``hist_param``*(``size``-1), +INF). (+INF means positive infinity
> > +    value.) The bucket value indicates how many times the statistics data is in
> > +    the bucket's range.
> > +  * ``KVM_STATS_TYPE_LOG_HIST``
> > +    The statistics data is in the form of logarithmic histogram. The number of
> > +    buckets is specified by the ``size`` field. The base of logarithm is
> > +    specified by the ``hist_param`` field. The range of the Nth bucket (1 < N <
> 
> Should 1 be 2 here? The first bucket uses a slightly differen formula as
> you mention in the next sentence.

Oops I see you used "<" instead of "<=" so what you have is correct. I
think reordering the sentences would still be helpfull though.

> 
> Actually it may be clearer if you re-ordered the sentences a bit:
> 
>   The range of the first bucket is [0, 1), while the range of the last
>   bucket is [pow(hist_param, size-1), +INF). Otherwise the Nth bucket
>   (1-indexed) covers [pow(hist_param, N-2), pow(histparam, N-1)).
> 
> > +    ``size``) is [pow(``hist_param``, N-2), pow(``hist_param``, N-1)). The range
> > +    of the first bucket is [0, 1), while the range of the last bucket is
> > +    [pow(``hist_param``, ``size``-2), +INF). The bucket value indicates how many
> > +    times the statistics data is in the bucket's range.
> >  
> >  Bits 4-7 of ``flags`` encode the unit:
> >    * ``KVM_STATS_UNIT_NONE``
> > @@ -5246,9 +5267,10 @@ unsigned 64bit data.
> >  The ``offset`` field is the offset from the start of Data Block to the start of
> >  the corresponding statistics data.
> >  
> > -The ``unused`` field is reserved for future support for other types of
> > -statistics data, like log/linear histogram. Its value is always 0 for the types
> > -defined above.
> > +The ``hist_param`` field is used as a parameter for histogram statistics data.
> > +For linear histogram statistics data, it indicates the size of a bucket. For
> > +logarithmic histogram statistics data, it indicates the base of the logarithm.
> > +Only base of 2 is supported fo logarithmic histogram.
> 
> s/fo/for/
> 
> >  
> >  The ``name`` field is the name string of the statistics data. The name string
> >  starts at the end of ``struct kvm_stats_desc``.  The maximum length including
> > @@ -7182,3 +7204,11 @@ The argument to KVM_ENABLE_CAP is also a bitmask, and must be a subset
> >  of the result of KVM_CHECK_EXTENSION.  KVM will forward to userspace
> >  the hypercalls whose corresponding bit is in the argument, and return
> >  ENOSYS for the others.
> > +
> > +8.35 KVM_CAP_STATS_BINARY_FD
> > +----------------------------
> > +
> > +:Architectures: all
> > +
> > +This capability indicates the feature that userspace can get a file descriptor
> > +for every VM and VCPU to read statistics data in binary format.
> > -- 
> > 2.32.0.93.g670b81a890-goog
> > 

  reply	other threads:[~2021-07-08 21:16 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-06 18:03 [PATCH v1 0/4] Linear and Logarithmic histogram statistics Jing Zhang
2021-07-06 18:03 ` Jing Zhang
2021-07-06 18:03 ` [PATCH v1 1/4] KVM: stats: Support linear and logarithmic " Jing Zhang
2021-07-06 18:03   ` Jing Zhang
2021-07-08 21:01   ` David Matlack
2021-07-08 21:01     ` David Matlack
2021-07-08 21:40     ` Jing Zhang
2021-07-08 21:40       ` Jing Zhang
2021-07-08 21:45       ` David Matlack
2021-07-08 21:45         ` David Matlack
2021-07-12 14:10   ` kernel test robot
2021-07-12 14:10     ` kernel test robot
2021-07-12 14:10     ` kernel test robot
2021-07-12 16:16     ` Jing Zhang
2021-07-12 16:16       ` Jing Zhang
2021-07-12 16:16       ` Jing Zhang
2021-07-12 18:53   ` kernel test robot
2021-07-12 18:53     ` kernel test robot
2021-07-12 18:53     ` kernel test robot
2021-07-28 12:39   ` Paolo Bonzini
2021-07-28 12:39     ` Paolo Bonzini
2021-07-30 17:31     ` Jing Zhang
2021-07-30 17:31       ` Jing Zhang
2021-07-06 18:03 ` [PATCH v1 2/4] KVM: stats: Update doc for " Jing Zhang
2021-07-06 18:03   ` Jing Zhang
2021-07-07 23:31   ` David Matlack
2021-07-07 23:31     ` David Matlack
2021-07-08 14:29     ` Jing Zhang
2021-07-08 14:29       ` Jing Zhang
2021-07-28 12:42     ` Paolo Bonzini
2021-07-28 12:42       ` Paolo Bonzini
2021-07-30 17:32       ` Jing Zhang
2021-07-30 17:32         ` Jing Zhang
2021-07-08 21:14   ` David Matlack
2021-07-08 21:14     ` David Matlack
2021-07-08 21:16     ` David Matlack [this message]
2021-07-08 21:16       ` David Matlack
2021-07-08 21:43       ` Jing Zhang
2021-07-08 21:43         ` Jing Zhang
2021-07-06 18:03 ` [PATCH v1 3/4] KVM: selftests: Add checks for histogram stats parameters Jing Zhang
2021-07-06 18:03   ` Jing Zhang
2021-07-08 21:26   ` David Matlack
2021-07-08 21:26     ` David Matlack
2021-07-06 18:03 ` [PATCH v1 4/4] KVM: stats: Add halt polling related histogram stats Jing Zhang
2021-07-06 18:03   ` Jing Zhang
2021-07-08 21:42   ` David Matlack
2021-07-08 21:42     ` David Matlack
2021-07-09 15:18     ` Jing Zhang
2021-07-09 15:18       ` Jing Zhang
2021-07-09 15:25       ` David Matlack
2021-07-09 15:25         ` David Matlack
2021-07-28 12:45   ` Paolo Bonzini
2021-07-28 12:45     ` Paolo Bonzini
2021-07-30 17:34     ` Jing Zhang
2021-07-30 17:34       ` Jing Zhang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YOdrGg47GnvyEDPF@google.com \
    --to=dmatlack@google.com \
    --cc=jingzhangos@google.com \
    --cc=jmattson@google.com \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=oupton@google.com \
    --cc=pbonzini@redhat.com \
    --cc=pshier@google.com \
    --cc=rientjes@google.com \
    --cc=seanjc@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.