qemu/docs
Anthony Harivel 0418f90809 Add support for RAPL MSRs in KVM/Qemu
Starting with the "Sandy Bridge" generation, Intel CPUs provide a RAPL
interface (Running Average Power Limit) for advertising the accumulated
energy consumption of various power domains (e.g. CPU packages, DRAM,
etc.).

The consumption is reported via MSRs (model specific registers) like
MSR_PKG_ENERGY_STATUS for the CPU package power domain. These MSRs are
64 bits registers that represent the accumulated energy consumption in
micro Joules. They are updated by microcode every ~1ms.

For now, KVM always returns 0 when the guest requests the value of
these MSRs. Use the KVM MSR filtering mechanism to allow QEMU handle
these MSRs dynamically in userspace.

To limit the amount of system calls for every MSR call, create a new
thread in QEMU that updates the "virtual" MSR values asynchronously.

Each vCPU has its own vMSR to reflect the independence of vCPUs. The
thread updates the vMSR values with the ratio of energy consumed of
the whole physical CPU package the vCPU thread runs on and the
thread's utime and stime values.

All other non-vCPU threads are also taken into account. Their energy
consumption is evenly distributed among all vCPUs threads running on
the same physical CPU package.

To overcome the problem that reading the RAPL MSR requires priviliged
access, a socket communication between QEMU and the qemu-vmsr-helper is
mandatory. You can specified the socket path in the parameter.

This feature is activated with -accel kvm,rapl=true,path=/path/sock.sock

Actual limitation:
- Works only on Intel host CPU because AMD CPUs are using different MSR
  adresses.

- Only the Package Power-Plane (MSR_PKG_ENERGY_STATUS) is reported at
  the moment.

Signed-off-by: Anthony Harivel <aharivel@redhat.com>
Link: https://lore.kernel.org/r/20240522153453.1230389-4-aharivel@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2024-07-22 19:19:37 +02:00
..
_templates docs: Add QEMU version information to HTML footer 2021-07-18 10:59:47 +01:00
about hw/riscv/virt.c: re-insert and deprecate 'riscv,delegate' 2024-07-18 12:08:45 +10:00
config vl: recognize audiodev groups in configuration files 2023-09-22 17:35:11 +02:00
devel qapi: remove "Example" doc section 2024-07-17 10:20:54 +02:00
interop hw/virtio: check owner for removing objects 2024-03-12 17:56:55 -04:00
specs Add support for RAPL MSRs in KVM/Qemu 2024-07-22 19:19:37 +02:00
sphinx docs/qapidoc: add QMP highlighting to annotated qmp-example blocks 2024-07-17 10:20:53 +02:00
sphinx-static docs/sphinx: add CSS styling for qmp-example directive 2024-07-17 10:20:53 +02:00
spin
system aspeed: Introduce a 'boot-emmc' machine option 2024-07-21 07:46:38 +02:00
tools tools: build qemu-vmsr-helper 2024-07-22 13:50:21 +02:00
user target/nios2: Remove the deprecated Nios II target 2024-04-24 16:03:38 +02:00
block-replication.txt docs/block-replication.txt: Fix replication top-id command demo 2021-12-17 11:35:00 +01:00
bypass-iommu.txt docs: Add documentation for iommu bypass 2021-07-16 11:10:45 -04:00
COLO-FT.txt migration: block incoming colo when capability is disabled 2023-05-10 18:48:12 +02:00
colo-proxy.txt colo: examples: remove mentions of script= and (wrong) downscript= 2024-01-30 21:20:20 +03:00
conf.py Python: bump minimum sphinx version to 3.4.3 2024-07-12 16:36:20 -04:00
defs.rst.inc
igd-assign.txt
image-fuzzer.txt docs: Render binary names as monospaced text 2021-11-22 15:02:38 +01:00
index.rst docs: standardize book titles to === with overline 2021-09-13 13:56:26 +02:00
memory-hotplug.txt
meson.build configure: bootstrap sphinx with mkvenv 2023-05-18 08:53:51 +02:00
multi-thread-compression.txt docs tests: Fix use of migrate_set_parameter 2023-09-08 13:08:52 +03:00
multiseat.txt docs: Spell QEMU all caps 2021-11-19 10:16:58 +01:00
nvdimm.txt docs/nvdimm: Update nvdimm option value in machine example 2021-09-27 10:57:21 +02:00
pci_expander_bridge.txt docs, tests: do not specify scsi=off 2024-06-05 11:00:56 +02:00
pcie_pci_bridge.txt
pcie_sriov.txt pcie_sriov: Ensure VF function number does not overflow 2024-07-03 18:14:07 -04:00
pcie.txt docs/pcie.txt: Replace ioh3420 with pcie-root-port 2023-01-28 06:21:30 -05:00
qcow2-cache.txt
qdev-device-use.txt util: remove support -chardev tty and -chardev parport 2023-01-06 00:51:02 +01:00
qemu-option-trace.rst.inc
qemupciserial.inf
rdma.txt docs tests: Fix use of migrate_set_parameter 2023-09-08 13:08:52 +03:00
requirements.txt pythondeps.toml: warn about updates needed to docs/requirements.txt 2024-04-23 17:35:26 +02:00
spice-port-fqdn.txt
throttle.txt docs: Drop deprecated 'props' from object-add 2021-11-22 15:02:38 +01:00
xbzrle.txt
xen-save-devices-state.txt