xemu/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 docs: create config/, devel/ and spin/ subdirectories 2017-06-07 18:22:03 +02:00
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
COLO-FT.txt migration: block incoming colo when capability is disabled 2023-05-10 18:48:12 +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-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 docs: Fix typo in the default name of the qemu-system-x86_64 binary 2021-04-01 14:28:39 +02:00
igd-assign.txt vfio/pci: Add IGD documentation 2016-05-26 11:12:05 -06:00
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 docs: Grammar and spelling fixes 2018-07-13 10:16:04 +01:00
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.txt docs/pcie.txt: Replace ioh3420 with pcie-root-port 2023-01-28 06:21:30 -05:00
pcie_pci_bridge.txt docs: add slot when adding new PCIe root port 2021-07-03 03:12:35 -04:00
pcie_sriov.txt pcie_sriov: Ensure VF function number does not overflow 2024-07-03 18:14:07 -04:00
qcow2-cache.txt qcow2: Document the Extended L2 Entries feature 2020-08-25 08:33:20 +02:00
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 qemu-option-trace.rst.inc: Don't use option:: markup 2020-11-02 16:52:18 +00:00
qemupciserial.inf docs: Grammar and spelling fixes 2018-07-13 10:16:04 +01:00
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 docs: add spice-port-fqdn.txt 2012-12-17 14:01:41 +01:00
throttle.txt docs: Drop deprecated 'props' from object-add 2021-11-22 15:02:38 +01:00
xbzrle.txt migrate: remove QMP/HMP commands for speed, downtime and cache size 2021-03-18 09:22:55 +00:00
xen-save-devices-state.txt Fix up dangling references to qmp-commands.* in comment and doc 2018-03-02 13:48:26 -06:00