84369d7621
Introduce a privileged helper to access RAPL MSR. The privileged helper tool, qemu-vmsr-helper, is designed to provide virtual machines with the ability to read specific RAPL (Running Average Power Limit) MSRs without requiring CAP_SYS_RAWIO privileges or relying on external, out-of-tree patches. The helper tool leverages Unix permissions and SO_PEERCRED socket options to enforce access control, ensuring that only processes explicitly requesting read access via readmsr() from a valid Thread ID can access these MSRs. The list of RAPL MSRs that are allowed to be read by the helper tool is defined in rapl-msr-index.h. This list corresponds to the RAPL MSRs that will be supported in the next commit titled "Add support for RAPL MSRs in KVM/QEMU." The tool is intentionally designed to run on the Linux x86 platform. This initial implementation is tailored for Intel CPUs but can be extended to support AMD CPUs in the future. Signed-off-by: Anthony Harivel <aharivel@redhat.com> Link: https://lore.kernel.org/r/20240522153453.1230389-3-aharivel@redhat.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
90 lines
2.4 KiB
ReStructuredText
90 lines
2.4 KiB
ReStructuredText
==================================
|
|
QEMU virtual RAPL MSR helper
|
|
==================================
|
|
|
|
Synopsis
|
|
--------
|
|
|
|
**qemu-vmsr-helper** [*OPTION*]
|
|
|
|
Description
|
|
-----------
|
|
|
|
Implements the virtual RAPL MSR helper for QEMU.
|
|
|
|
Accessing the RAPL (Running Average Power Limit) MSR enables the RAPL powercap
|
|
driver to advertise and monitor the power consumption or accumulated energy
|
|
consumption of different power domains, such as CPU packages, DRAM, and other
|
|
components when available.
|
|
|
|
However those register are accesible under priviliged access (CAP_SYS_RAWIO).
|
|
QEMU can use an external helper to access those priviliged register.
|
|
|
|
:program:`qemu-vmsr-helper` is that external helper; it creates a listener
|
|
socket which will accept incoming connections for communication with QEMU.
|
|
|
|
If you want to run VMs in a setup like this, this helper should be started as a
|
|
system service, and you should read the QEMU manual section on "RAPL MSR
|
|
support" to find out how to configure QEMU to connect to the socket created by
|
|
:program:`qemu-vmsr-helper`.
|
|
|
|
After connecting to the socket, :program:`qemu-vmsr-helper` can
|
|
optionally drop root privileges, except for those capabilities that
|
|
are needed for its operation.
|
|
|
|
:program:`qemu-vmsr-helper` can also use the systemd socket activation
|
|
protocol. In this case, the systemd socket unit should specify a
|
|
Unix stream socket, like this::
|
|
|
|
[Socket]
|
|
ListenStream=/var/run/qemu-vmsr-helper.sock
|
|
|
|
Options
|
|
-------
|
|
|
|
.. program:: qemu-vmsr-helper
|
|
|
|
.. option:: -d, --daemon
|
|
|
|
run in the background (and create a PID file)
|
|
|
|
.. option:: -q, --quiet
|
|
|
|
decrease verbosity
|
|
|
|
.. option:: -v, --verbose
|
|
|
|
increase verbosity
|
|
|
|
.. option:: -f, --pidfile=PATH
|
|
|
|
PID file when running as a daemon. By default the PID file
|
|
is created in the system runtime state directory, for example
|
|
:file:`/var/run/qemu-vmsr-helper.pid`.
|
|
|
|
.. option:: -k, --socket=PATH
|
|
|
|
path to the socket. By default the socket is created in
|
|
the system runtime state directory, for example
|
|
:file:`/var/run/qemu-vmsr-helper.sock`.
|
|
|
|
.. option:: -T, --trace [[enable=]PATTERN][,events=FILE][,file=FILE]
|
|
|
|
.. include:: ../qemu-option-trace.rst.inc
|
|
|
|
.. option:: -u, --user=USER
|
|
|
|
user to drop privileges to
|
|
|
|
.. option:: -g, --group=GROUP
|
|
|
|
group to drop privileges to
|
|
|
|
.. option:: -h, --help
|
|
|
|
Display a help message and exit.
|
|
|
|
.. option:: -V, --version
|
|
|
|
Display version information and exit.
|