SysadminNews

Linux 7.3 KVM: three MMU responsibilities separated

On this page
  1. A refactor of responsibilities
  2. Do not confuse code structure with address stages
  3. The timing fix has a specific scope
  4. Evaluate the paths you actually use
  5. Sources

Linux 7.3’s KVM work separates responsibilities that had accumulated in kvm_mmu. The result is a clearer route for translating guest virtual addresses, not three new hardware translation stages or a measured speed boost for every VM.

KVM separates page-table format, guest walking and table building responsibilities. The common gva_walk entry is not three sequential hardware address-translation stages.
KVM separates page-table format, guest walking and table building responsibilities. The common gva_walk entry is not three sequential hardware address-translation stages. Chart : PeopleAreGeek. Data source.
View full-size image

A refactor of responsibilities

Paolo Bonzini’s 25 August pull request, integrated by the upstream merge, separates page-table format, guest-table walking and page-table building. Guest virtual address conversion uses kvm->arch.gva_walk as its common entry. The old distinction involved two kvm_mmu structures selected according to nested EPT/NPT involvement; describing it as two entirely independent walker implementations was too strong.

The pull also describes shared permission checks as groundwork toward XS/XU support. Groundwork does not establish that a new permission feature is complete and exposed to every guest.

Do not confuse code structure with address stages

The KVM MMU documentation distinguishes guest virtual, guest physical and host physical addresses. Hardware-assisted second-level translation and nested virtualization introduce their own mappings. Splitting one software structure into three responsibilities does not add three mandatory translations to each memory access.

The illustration therefore shows responsibilities, rather than drawing three sequential hardware lookups. A format description answers how an entry is interpreted; a walker follows mappings; a builder manages the tables KVM needs. These tasks interact without being three interchangeable names for the same address.

The timing fix has a specific scope

The pull skips Xen runstate updates when time effectively moves backward, preventing a particular prolonged false steal-time report. That is KVM’s Xen-compatible timing path, not a claim that every Linux guest’s high steal time is a software accounting bug.

If a guest reports unexpected steal time, first identify the host kernel, guest clock and exposed paravirtual interfaces. Correlate the guest metric with host contention and scheduling evidence. A real overloaded host and incorrect time accounting require different remedies. Do not suppress an alert just because a kernel changelog mentions a similar percentage.

Evaluate the paths you actually use

For a host update, preserve a recovery boot path and test a representative disposable guest. Check boot, shutdown, memory pressure and the management features your estate uses. If you run a hypervisor inside a VM, test that nested configuration explicitly: a normal guest boot does not exercise the same paths.

Record host and guest versions with each result, and change one layer at a time. This article explains merged changes; it does not report a PeopleAreGeek benchmark or establish that the development kernel is a stable production upgrade.

Sources

Verified the KVM pull and merge; corrected structure versus walker wording, scoped Xen runstate timing and separated cleanup from new permission support.