← Back to articles
News· 2 min read

libvirt 12.4.0: per-VM energy monitoring with resctrl and new virtio events

The libvirt project shipped stable release 12.4.0 on June 1, 2026. libvirt sits underneath most Linux virtualization tooling (virsh, virt-manager, Cockpit and friends), and this release brings something that will catch the eye of anyone running large VM fleets: the ability to measure how much energy each VM consumes.

Per-VM energy monitoring

The headline feature is support for energy monitoring via resctrl, a capability that arrives with the Linux kernel 7.0. libvirt exposes it through the energytune element inside cputune in the domain XML. Under the hood it relies on resctrl’s PERF_PKG_MON, so each VM can report its consumption individually on supported platforms.

For anyone doing workload consolidation or usage-based billing, having this reading at the domain level (rather than for the whole host) changes how costs get attributed. There’s no need to instrument anything inside the guest.

Lifecycle events for virtio channels

12.4.0 adds an event that lets you track the state of any virtio channel on the VM. It works much like the lifecycle events that already existed for the guest agent, now generalized to any channel. If your automation reacts to channels connecting or disconnecting, you no longer have to poll for state.

bhyve driver additions

The bhyve driver (FreeBSD’s hypervisor) picks up several improvements:

  • Memory hard limit tuning via <memtune><hard_limit unit='G'>1</hard_limit></memtune>, with implementations of the virDomainGetMemoryParameters() and virDomainSetMemoryParameters() APIs.
  • virtio-console devices in the domain XML to wire up the QEMU Guest Agent, with support for virDomainQemuAgentCommand() and virDomainGetHostname() to pull guest information.

Containers and QoS

The CGroupV2 code gains the freezer controller, which allows suspending and resuming LXC domains. There’s also a fix worth noting for networking: setting a QoS on a vNIC no longer clears a preconfigured queuing discipline (qdisc) in both directions, only the affected one (egress or ingress).

What changes and what’s fixed

The minimum requirement moves up to QEMU 7.2.0. Check this before upgrading if you keep hosts on older versions.

Among the fixes:

  • ZFS: corrected the reported volume size when creating a zvol; the driver now matches the right volume instead of the last one listed.
  • VMware/ESX: the drivers now use unique UUIDs properly, although existing domain UUIDs will change. If you need the old behavior, the legacy_uuid=1 URI parameter is available.
  • The virsh bash completer no longer hangs waiting on input.
  • A missing NULL callback check was added in virAuthGetPasswordPath(), which could crash the client library.

Who should care

If you run KVM/QEMU virtualization on Linux, per-VM energy readings and virtio channel events are the strong reasons to look at this release. bhyve users on FreeBSD gain useful feature parity, and LXC setups now have clean suspend/resume. The bump to a minimum of QEMU 7.2.0 is the one item that calls for planning.

Source

libvirt 12.4.0 release notes: https://libvirt.org/news.html. Via the Planet Virt Tools aggregator.