KVM: stats: Add fd-based API to read binary stats data
authorJing Zhang <jingzhangos@google.com>
Fri, 18 Jun 2021 22:27:04 +0000 (22:27 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 24 Jun 2021 15:47:57 +0000 (11:47 -0400)
commitcb082bfab59a224a49ae803fed52cd03e8d6b5e0
treea2c44bb780df8a32581373e05a054b640687cf3f
parent0193cc908b5ae8aff2e2d2997ca5d4ae26ed24d4
KVM: stats: Add fd-based API to read binary stats data

This commit defines the API for userspace and prepare the common
functionalities to support per VM/VCPU binary stats data readings.

The KVM stats now is only accessible by debugfs, which has some
shortcomings this change series are supposed to fix:
1. The current debugfs stats solution in KVM could be disabled
   when kernel Lockdown mode is enabled, which is a potential
   rick for production.
2. The current debugfs stats solution in KVM is organized as "one
   stats per file", it is good for debugging, but not efficient
   for production.
3. The stats read/clear in current debugfs solution in KVM are
   protected by the global kvm_lock.

Besides that, there are some other benefits with this change:
1. All KVM VM/VCPU stats can be read out in a bulk by one copy
   to userspace.
2. A schema is used to describe KVM statistics. From userspace's
   perspective, the KVM statistics are self-describing.
3. With the fd-based solution, a separate telemetry would be able
   to read KVM stats in a less privileged environment.
4. After the initial setup by reading in stats descriptors, a
   telemetry only needs to read the stats data itself, no more
   parsing or setup is needed.

Reviewed-by: David Matlack <dmatlack@google.com>
Reviewed-by: Ricardo Koller <ricarkol@google.com>
Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
Reviewed-by: Fuad Tabba <tabba@google.com>
Tested-by: Fuad Tabba <tabba@google.com> #arm64
Signed-off-by: Jing Zhang <jingzhangos@google.com>
Message-Id: <20210618222709.1858088-3-jingzhangos@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/arm64/kvm/Makefile
arch/mips/kvm/Makefile
arch/powerpc/kvm/Makefile
arch/s390/kvm/Makefile
arch/x86/kvm/Makefile
include/linux/kvm_host.h
include/linux/kvm_types.h
include/uapi/linux/kvm.h
virt/kvm/binary_stats.c [new file with mode: 0644]