Peter Krempa, Sep 02, 2024 at 15:09:
> On Thu, Aug 22, 2024 at 17:59:47 +0200, Anthony Harivel wrote:
> > Add the support in libvirt to activate the RAPL feature in QEMU.
> >
> > This feature is activated with -accel kvm,rapl=true,path=/path/sock.sock
> > in QEMU.
> >
> > The feature is activated in libvirt with the following XML
> > configuration:
> >
> > <kvm>
> > [...]
> > <rapl state ='on' socket='/run/qemu-vmsr-helper.sock'/>
> > [...]
> > </kvm>
> >
> > See:
> > https://gitlab.com/qemu-project/qemu/-/commit/0418f90809aea5b375c859e744c8e8610e9be446
> >
> > Signed-off-by: Anthony Harivel <[email protected]>
> > ---
> > docs/formatdomain.rst | 2 ++
> > src/conf/domain_conf.c | 18 ++++++++++++++++++
> > src/conf/domain_conf.h | 2 ++
> > src/conf/schemas/domaincommon.rng | 10 ++++++++++
> > src/qemu/qemu_command.c | 11 +++++++++++
> > tests/qemuxmlconfdata/kvm-features-off.xml | 1 +
> > .../kvm-features.x86_64-latest.args | 2 +-
> > tests/qemuxmlconfdata/kvm-features.xml | 1 +
> > 8 files changed, 46 insertions(+), 1 deletion(-)
>
> [...]
>
> > @@ -7176,6 +7179,14 @@ qemuBuildAccelCommandLine(virCommand *cmd,
> > def->kvm_features->features[VIR_DOMAIN_KVM_DIRTY_RING] ==
> > VIR_TRISTATE_SWITCH_ON) {
> > virBufferAsprintf(&buf, ",dirty-ring-size=%d",
> > def->kvm_features->dirty_ring_size);
> > }
>
> This should be separated via a newline.
>
Will be done for next iteration thanks.
> > + if (def->features[VIR_DOMAIN_FEATURE_KVM] ==
> > VIR_TRISTATE_SWITCH_ON &&
> > + def->kvm_features->features[VIR_DOMAIN_KVM_RAPL] ==
> > VIR_TRISTATE_SWITCH_ON) {
> > + virBufferAddLit(&buf, ",rapl=true");
> > +
> > + if (def->kvm_features->rapl_helper_socket != NULL) {
> > + virBufferAsprintf(&buf, ",rapl-helper-socket=%s",
> > def->kvm_features->rapl_helper_socket);
> > + }
> > + }
> > break;
> >
> > case VIR_DOMAIN_VIRT_HVF:
>
> Apart from that the rest looks good providing the following:
>
> I suppose that the 'rapl-helper-socket' is a shared (multiple qemu's use
> it) resource set up beforehand by the admin. Right?
>
Indeed this is shared between all qemu instances.
> If that is the case that means the lifecycle of the daemon and
> permissions (including selinux) for accessing the socket are not
> something that libvirt needs to deal with.
>
> If either of them isn't true please outline how that socket is to be
> used to see how libvirt will need to approach it.
This is a very good question, I'm trying to solve at the moment.
The daemon is called "qemu-vmsr-helper". The source is available in
qemu/tools/i386/* (qemu 9.1) and is built with projet options "tools"
enable.
There is also a systemd files available in qemu source code
qemu/contrib/systemd/
with the file qemu-vmsr-helper.service and qemu-vmsr-helper.socket that
respectively start the daemon and start the socket to listen to.
If libvirt can solve the installation of this daemon, then I'll be happy
to add a patch to my patch queue.
Looking forward you thought about it.
Many thanks,
Anthony