Commit 0176ec51 authored by Jing Zhang's avatar Jing Zhang Committed by Paolo Bonzini

KVM: stats: Update doc for histogram statistics

Add documentations for linear and logarithmic histogram statistics.
Signed-off-by: default avatarJing Zhang <jingzhangos@google.com>
Message-Id: <20210802165633.1866976-3-jingzhangos@google.com>
[Small changes to the phrasing. - Paolo]
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent f95937cc
...@@ -5207,6 +5207,9 @@ by a string of size ``name_size``. ...@@ -5207,6 +5207,9 @@ by a string of size ``name_size``.
#define KVM_STATS_TYPE_CUMULATIVE (0x0 << KVM_STATS_TYPE_SHIFT) #define KVM_STATS_TYPE_CUMULATIVE (0x0 << KVM_STATS_TYPE_SHIFT)
#define KVM_STATS_TYPE_INSTANT (0x1 << 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_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_SHIFT 4
#define KVM_STATS_UNIT_MASK (0xF << KVM_STATS_UNIT_SHIFT) #define KVM_STATS_UNIT_MASK (0xF << KVM_STATS_UNIT_SHIFT)
...@@ -5214,18 +5217,20 @@ by a string of size ``name_size``. ...@@ -5214,18 +5217,20 @@ by a string of size ``name_size``.
#define KVM_STATS_UNIT_BYTES (0x1 << KVM_STATS_UNIT_SHIFT) #define KVM_STATS_UNIT_BYTES (0x1 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_SECONDS (0x2 << 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_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_SHIFT 8
#define KVM_STATS_BASE_MASK (0xF << KVM_STATS_BASE_SHIFT) #define KVM_STATS_BASE_MASK (0xF << KVM_STATS_BASE_SHIFT)
#define KVM_STATS_BASE_POW10 (0x0 << 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_POW2 (0x1 << KVM_STATS_BASE_SHIFT)
#define KVM_STATS_BASE_MAX KVM_STATS_BASE_POW2
struct kvm_stats_desc { struct kvm_stats_desc {
__u32 flags; __u32 flags;
__s16 exponent; __s16 exponent;
__u16 size; __u16 size;
__u32 offset; __u32 offset;
__u32 unused; __u32 bucket_size;
char name[]; char name[];
}; };
...@@ -5235,21 +5240,35 @@ The following flags are supported: ...@@ -5235,21 +5240,35 @@ The following flags are supported:
Bits 0-3 of ``flags`` encode the type: Bits 0-3 of ``flags`` encode the type:
* ``KVM_STATS_TYPE_CUMULATIVE`` * ``KVM_STATS_TYPE_CUMULATIVE``
The statistics data is cumulative. The value of data can only be increased. The statistics reports a cumulative count. The value of data can only be increased.
Most of the counters used in KVM are of this type. Most of the counters used in KVM are of this type.
The corresponding ``size`` field for this type is always 1. The corresponding ``size`` field for this type is always 1.
All cumulative statistics data are read/write. All cumulative statistics data are read/write.
* ``KVM_STATS_TYPE_INSTANT`` * ``KVM_STATS_TYPE_INSTANT``
The statistics data is instantaneous. Its value can be increased or The statistics reports an instantaneous value. Its value can be increased or
decreased. This type is usually used as a measurement of some resources, decreased. This type is usually used as a measurement of some resources,
like the number of dirty pages, the number of large pages, etc. like the number of dirty pages, the number of large pages, etc.
All instant statistics are read only. All instant statistics are read only.
The corresponding ``size`` field for this type is always 1. The corresponding ``size`` field for this type is always 1.
* ``KVM_STATS_TYPE_PEAK`` * ``KVM_STATS_TYPE_PEAK``
The statistics data is peak. The value of data can only be increased, and The statistics data reports a peak value, for example the maximum number
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. of items in a hash table bucket, the longest time waited and so on.
The value of data can only be increased.
The corresponding ``size`` field for this type is always 1. The corresponding ``size`` field for this type is always 1.
* ``KVM_STATS_TYPE_LINEAR_HIST``
The statistic is reported as a 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``)
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 samples fell in the bucket's range.
* ``KVM_STATS_TYPE_LOG_HIST``
The statistic is reported as a logarithmic histogram. The number of
buckets is specified by the ``size`` field. The range of the first bucket is
[0, 1), while the range of the last bucket is [pow(2, ``size``-2), +INF).
Otherwise, The Nth bucket (1 < N < ``size``) covers
[pow(2, N-2), pow(2, N-1)). The bucket value indicates how many samples fell
in the bucket's range.
Bits 4-7 of ``flags`` encode the unit: Bits 4-7 of ``flags`` encode the unit:
* ``KVM_STATS_UNIT_NONE`` * ``KVM_STATS_UNIT_NONE``
...@@ -5282,9 +5301,9 @@ unsigned 64bit data. ...@@ -5282,9 +5301,9 @@ unsigned 64bit data.
The ``offset`` field is the offset from the start of Data Block to the start of The ``offset`` field is the offset from the start of Data Block to the start of
the corresponding statistics data. the corresponding statistics data.
The ``unused`` field is reserved for future support for other types of The ``bucket_size`` field is used as a parameter for histogram statistics data.
statistics data, like log/linear histogram. Its value is always 0 for the types It is only used by linear histogram statistics data, specifying the size of a
defined above. bucket.
The ``name`` field is the name string of the statistics data. The name string 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 starts at the end of ``struct kvm_stats_desc``. The maximum length including
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment