mbox series

[v3,0/5] Linear and Logarithmic histogram statistics

Message ID 20210802165633.1866976-1-jingzhangos@google.com (mailing list archive)
Headers show
Series Linear and Logarithmic histogram statistics | expand

Message

Jing Zhang Aug. 2, 2021, 4:56 p.m. UTC
This patchset adds linear and logarithmic histogram stats support and extend
some halt polling stats with histogram.
Histogram stats is very useful when we need to know the distribution of some
latencies or any other stuff like used memory size, huge page size, etc.
Below is a snapshot for three logarithmic histogram stats added in this
patchset. halt_poll_success_hist shows the distribution of wait time before a
success polling. halt_poll_fail_hist shows the distribution of wait time before
a fail polling. halt_wait_hist shows the distribution of wait time of a VCPU
spending on wait after it is halted. The halt polling parameters is halt_poll_ns
= 500000, halt_poll_ns_grow = 2, halt_poll_ns_grow_start = 10000,
halt_poll_ns_shrink = 2;
From the snapshot, not only we can get an intuitive overview of those latencies,
but also we can tune the polling parameters based on this; For example, it shows
that about 80% of successful polling is less than 132000 nanoseconds from
halt_poll_success_hist, then it might be a good option to set halt_poll_ns as
132000 instead of 500000.

halt_poll_success_hist:
Range		Bucket Value	Percent     Cumulative Percent
[0, 1)		 0		 0.000%      0.000%
[1, 2)		 0		 0.000%      0.000%
[2, 4)		 0		 0.000%      0.000%
[4, 8)		 0		 0.000%      0.000%
[8, 16)		 0		 0.000%      0.000%
[16, 32)	 0		 0.000%      0.000%
[32, 64)	 0		 0.000%      0.000%
[64, 128)	 0		 0.000%      0.000%
[128, 256)	 3		 0.093%      0.093%
[256, 512)	 21		 0.650%      0.743%
[512, 1024)	 43		 1.330%      2.073%
[1024, 2048)	 279		 8.632%      10.705%
[2048, 4096)	 253		 7.828%      18.533%
[4096, 8192)	 595		 18.410%     36.943%
[8192, 16384)	 274		 8.478%      45.421%
[16384, 32768)	 351		 10.860%     56.281%
[32768, 65536)	 343		 10.613%     66.894%
[65536, 131072)  421		 13.026%     79.920%
[131072, 262144) 459		 14.202%     94.121%
[262144, 524288) 190		 5.879%      100.000%


halt_poll_fail_hist:
Range		Bucket Value	Percent     Cumulative Percent
[0, 1)		 0		 0.000%      0.000%
[1, 2)		 0		 0.000%      0.000%
[2, 4)		 0		 0.000%      0.000%
[4, 8)		 0		 0.000%      0.000%
[8, 16)		 0		 0.000%      0.000%
[16, 32)	 0		 0.000%      0.000%
[32, 64)	 0		 0.000%      0.000%
[64, 128)	 21		 0.529%      0.529%
[128, 256)	 398		 10.020%     10.549%
[256, 512)	 613		 15.433%     25.982%
[512, 1024)	 437		 11.002%     36.984%
[1024, 2048)	 264		 6.647%      43.630%
[2048, 4096)	 302		 7.603%      51.234%
[4096, 8192)	 350		 8.812%      60.045%
[8192, 16384)	 488		 12.286%     72.331%
[16384, 32768)	 258		 6.495%      78.827%
[32768, 65536)	 227		 5.715%      84.542%
[65536, 131072)  232		 5.841%      90.383%
[131072, 262144) 246		 6.193%      96.576%
[262144, 524288) 136		 3.424%      100.000%


halt_wait_hist:
Range			    Bucket Value    Percent	Cumulative Percent
[0, 1)			     0		     0.000%	 0.000%
[1, 2)			     0		     0.000%	 0.000%
[2, 4)			     0		     0.000%	 0.000%
[4, 8)			     0		     0.000%	 0.000%
[8, 16)			     0		     0.000%	 0.000%
[16, 32)		     0		     0.000%	 0.000%
[32, 64)		     0		     0.000%	 0.000%
[64, 128)		     0		     0.000%	 0.000%
[128, 256)		     0		     0.000%	 0.000%
[256, 512)		     0		     0.000%	 0.000%
[512, 1024)		     0		     0.000%	 0.000%
[1024, 2048)		     0		     0.000%	 0.000%
[2048, 4096)		     7		     0.127%	 0.127%
[4096, 8192)		     37		     0.671%	 0.798%
[8192, 16384)		     69		     1.251%	 2.049%
[16384, 32768)		     94		     1.704%	 3.753%
[32768, 65536)		     150	     2.719%	 6.472%
[65536, 131072)		     233	     4.224%	 10.696%
[131072, 262144)	     276	     5.004%	 15.700%
[262144, 524288)	     236	     4.278%	 19.978%
[524288, 1.04858e+06)	     176	     3.191%	 23.169%
[1.04858e+06, 2.09715e+06)   94		     16.207%	 39.376%
[2.09715e+06, 4.1943e+06)    1667	     30.221%	 69.598%
[4.1943e+06, 8.38861e+06)    825	     14.956%	 84.554%
[8.38861e+06, 1.67772e+07)   111	     2.012%	 86.566%
[1.67772e+07, 3.35544e+07)   76		     1.378%	 87.944%
[3.35544e+07, 6.71089e+07)   65		     1.178%	 89.123%
[6.71089e+07, 1.34218e+08)   161	     2.919%	 92.041%
[1.34218e+08, 2.68435e+08)   250	     4.532%	 96.574%
[2.68435e+08, 5.36871e+08)   188	     3.408%	 99.982%
[5.36871e+08, 1.07374e+09)   1		     0.018%	 100.000%

---

* v2 -> v3
  - Rebase to kvm/queue, commit 8ad5e63649ff
    (KVM: Don't take mmu_lock for range invalidation unless necessary)
  - Specify inline explicitly for histogram stats update functions
  - Use array_index_nospec to clamp the index to histogram array size
  - Remove constant macros for histogram array size and bucket size
  - Addressed other comments from Paolo.

* v1 -> v2
  - Rebase to kvm/queue, commit 1889228d80fe
    (KVM: selftests: smm_test: Test SMM enter from L2)
  - Break some changes to separate commits
  - Fix u64 division issue Reported-by: kernel test robot <lkp@intel.com>
  - Address a bunch of comments by David Matlack <dmatlack@google.com>

[1] https://lore.kernel.org/kvm/20210706180350.2838127-1-jingzhangos@google.com
[2] https://lore.kernel.org/kvm/20210714223033.742261-1-jingzhangos@google.com

---

Jing Zhang (5):
  KVM: stats: Support linear and logarithmic histogram statistics
  KVM: stats: Update doc for histogram statistics
  KVM: selftests: Add checks for histogram stats bucket_size field
  KVM: stats: Add halt_wait_ns stats for all architectures
  KVM: stats: Add halt polling related histogram stats

 Documentation/virt/kvm/api.rst                | 28 ++++++--
 arch/arm64/kvm/guest.c                        |  4 --
 arch/mips/kvm/mips.c                          |  4 --
 arch/powerpc/include/asm/kvm_host.h           |  1 -
 arch/powerpc/kvm/book3s.c                     |  5 --
 arch/powerpc/kvm/book3s_hv.c                  | 18 ++++-
 arch/powerpc/kvm/booke.c                      |  5 --
 arch/s390/kvm/kvm-s390.c                      |  4 --
 arch/x86/kvm/x86.c                            |  4 --
 include/linux/kvm_host.h                      | 67 ++++++++++++++-----
 include/linux/kvm_types.h                     |  6 ++
 include/uapi/linux/kvm.h                      | 11 +--
 .../selftests/kvm/kvm_binary_stats_test.c     | 12 ++++
 virt/kvm/binary_stats.c                       | 34 ++++++++++
 virt/kvm/kvm_main.c                           | 16 +++++
 15 files changed, 165 insertions(+), 54 deletions(-)


base-commit: 8ad5e63649ffaa9207b8fde932f3bd59a72c4c94

Comments

Paolo Bonzini Aug. 11, 2021, 10:53 a.m. UTC | #1
On 02/08/21 18:56, Jing Zhang wrote:
> This patchset adds linear and logarithmic histogram stats support and extend
> some halt polling stats with histogram.
> Histogram stats is very useful when we need to know the distribution of some
> latencies or any other stuff like used memory size, huge page size, etc.
> Below is a snapshot for three logarithmic histogram stats added in this
> patchset. halt_poll_success_hist shows the distribution of wait time before a
> success polling. halt_poll_fail_hist shows the distribution of wait time before
> a fail polling. halt_wait_hist shows the distribution of wait time of a VCPU
> spending on wait after it is halted. The halt polling parameters is halt_poll_ns
> = 500000, halt_poll_ns_grow = 2, halt_poll_ns_grow_start = 10000,
> halt_poll_ns_shrink = 2;
>  From the snapshot, not only we can get an intuitive overview of those latencies,
> but also we can tune the polling parameters based on this; For example, it shows
> that about 80% of successful polling is less than 132000 nanoseconds from
> halt_poll_success_hist, then it might be a good option to set halt_poll_ns as
> 132000 instead of 500000.
> 
> halt_poll_success_hist:
> Range		Bucket Value	Percent     Cumulative Percent
> [0, 1)		 0		 0.000%      0.000%
> [1, 2)		 0		 0.000%      0.000%
> [2, 4)		 0		 0.000%      0.000%
> [4, 8)		 0		 0.000%      0.000%
> [8, 16)		 0		 0.000%      0.000%
> [16, 32)	 0		 0.000%      0.000%
> [32, 64)	 0		 0.000%      0.000%
> [64, 128)	 0		 0.000%      0.000%
> [128, 256)	 3		 0.093%      0.093%
> [256, 512)	 21		 0.650%      0.743%
> [512, 1024)	 43		 1.330%      2.073%
> [1024, 2048)	 279		 8.632%      10.705%
> [2048, 4096)	 253		 7.828%      18.533%
> [4096, 8192)	 595		 18.410%     36.943%
> [8192, 16384)	 274		 8.478%      45.421%
> [16384, 32768)	 351		 10.860%     56.281%
> [32768, 65536)	 343		 10.613%     66.894%
> [65536, 131072)  421		 13.026%     79.920%
> [131072, 262144) 459		 14.202%     94.121%
> [262144, 524288) 190		 5.879%      100.000%
> 
> 
> halt_poll_fail_hist:
> Range		Bucket Value	Percent     Cumulative Percent
> [0, 1)		 0		 0.000%      0.000%
> [1, 2)		 0		 0.000%      0.000%
> [2, 4)		 0		 0.000%      0.000%
> [4, 8)		 0		 0.000%      0.000%
> [8, 16)		 0		 0.000%      0.000%
> [16, 32)	 0		 0.000%      0.000%
> [32, 64)	 0		 0.000%      0.000%
> [64, 128)	 21		 0.529%      0.529%
> [128, 256)	 398		 10.020%     10.549%
> [256, 512)	 613		 15.433%     25.982%
> [512, 1024)	 437		 11.002%     36.984%
> [1024, 2048)	 264		 6.647%      43.630%
> [2048, 4096)	 302		 7.603%      51.234%
> [4096, 8192)	 350		 8.812%      60.045%
> [8192, 16384)	 488		 12.286%     72.331%
> [16384, 32768)	 258		 6.495%      78.827%
> [32768, 65536)	 227		 5.715%      84.542%
> [65536, 131072)  232		 5.841%      90.383%
> [131072, 262144) 246		 6.193%      96.576%
> [262144, 524288) 136		 3.424%      100.000%
> 
> 
> halt_wait_hist:
> Range			    Bucket Value    Percent	Cumulative Percent
> [0, 1)			     0		     0.000%	 0.000%
> [1, 2)			     0		     0.000%	 0.000%
> [2, 4)			     0		     0.000%	 0.000%
> [4, 8)			     0		     0.000%	 0.000%
> [8, 16)			     0		     0.000%	 0.000%
> [16, 32)		     0		     0.000%	 0.000%
> [32, 64)		     0		     0.000%	 0.000%
> [64, 128)		     0		     0.000%	 0.000%
> [128, 256)		     0		     0.000%	 0.000%
> [256, 512)		     0		     0.000%	 0.000%
> [512, 1024)		     0		     0.000%	 0.000%
> [1024, 2048)		     0		     0.000%	 0.000%
> [2048, 4096)		     7		     0.127%	 0.127%
> [4096, 8192)		     37		     0.671%	 0.798%
> [8192, 16384)		     69		     1.251%	 2.049%
> [16384, 32768)		     94		     1.704%	 3.753%
> [32768, 65536)		     150	     2.719%	 6.472%
> [65536, 131072)		     233	     4.224%	 10.696%
> [131072, 262144)	     276	     5.004%	 15.700%
> [262144, 524288)	     236	     4.278%	 19.978%
> [524288, 1.04858e+06)	     176	     3.191%	 23.169%
> [1.04858e+06, 2.09715e+06)   94		     16.207%	 39.376%
> [2.09715e+06, 4.1943e+06)    1667	     30.221%	 69.598%
> [4.1943e+06, 8.38861e+06)    825	     14.956%	 84.554%
> [8.38861e+06, 1.67772e+07)   111	     2.012%	 86.566%
> [1.67772e+07, 3.35544e+07)   76		     1.378%	 87.944%
> [3.35544e+07, 6.71089e+07)   65		     1.178%	 89.123%
> [6.71089e+07, 1.34218e+08)   161	     2.919%	 92.041%
> [1.34218e+08, 2.68435e+08)   250	     4.532%	 96.574%
> [2.68435e+08, 5.36871e+08)   188	     3.408%	 99.982%
> [5.36871e+08, 1.07374e+09)   1		     0.018%	 100.000%
> 
> ---
> 
> * v2 -> v3
>    - Rebase to kvm/queue, commit 8ad5e63649ff
>      (KVM: Don't take mmu_lock for range invalidation unless necessary)
>    - Specify inline explicitly for histogram stats update functions
>    - Use array_index_nospec to clamp the index to histogram array size
>    - Remove constant macros for histogram array size and bucket size
>    - Addressed other comments from Paolo.
> 
> * v1 -> v2
>    - Rebase to kvm/queue, commit 1889228d80fe
>      (KVM: selftests: smm_test: Test SMM enter from L2)
>    - Break some changes to separate commits
>    - Fix u64 division issue Reported-by: kernel test robot <lkp@intel.com>
>    - Address a bunch of comments by David Matlack <dmatlack@google.com>
> 
> [1] https://lore.kernel.org/kvm/20210706180350.2838127-1-jingzhangos@google.com
> [2] https://lore.kernel.org/kvm/20210714223033.742261-1-jingzhangos@google.com
> 
> ---
> 
> Jing Zhang (5):
>    KVM: stats: Support linear and logarithmic histogram statistics
>    KVM: stats: Update doc for histogram statistics
>    KVM: selftests: Add checks for histogram stats bucket_size field
>    KVM: stats: Add halt_wait_ns stats for all architectures
>    KVM: stats: Add halt polling related histogram stats
> 
>   Documentation/virt/kvm/api.rst                | 28 ++++++--
>   arch/arm64/kvm/guest.c                        |  4 --
>   arch/mips/kvm/mips.c                          |  4 --
>   arch/powerpc/include/asm/kvm_host.h           |  1 -
>   arch/powerpc/kvm/book3s.c                     |  5 --
>   arch/powerpc/kvm/book3s_hv.c                  | 18 ++++-
>   arch/powerpc/kvm/booke.c                      |  5 --
>   arch/s390/kvm/kvm-s390.c                      |  4 --
>   arch/x86/kvm/x86.c                            |  4 --
>   include/linux/kvm_host.h                      | 67 ++++++++++++++-----
>   include/linux/kvm_types.h                     |  6 ++
>   include/uapi/linux/kvm.h                      | 11 +--
>   .../selftests/kvm/kvm_binary_stats_test.c     | 12 ++++
>   virt/kvm/binary_stats.c                       | 34 ++++++++++
>   virt/kvm/kvm_main.c                           | 16 +++++
>   15 files changed, 165 insertions(+), 54 deletions(-)
> 
> 
> base-commit: 8ad5e63649ffaa9207b8fde932f3bd59a72c4c94
> 

Queued, thanks.

Paolo