Re: [RFC PATCH v2 00/24] KVM: combined patchset for MBEC/GMET support

From: David Riley

Date: Tue Apr 07 2026 - 08:20:55 EST


On 4/7/26 1:53 PM, David Riley wrote:
[...]
Results

I compared the VM-Exit volume by running the workload with the feature
flags (+vmx-mbec / +gmet) enabled vs. disabled. The table below shows
the average number of samples (Total count of VM-Exit Events) over
the 3 runs for each mode (idle/load).

Platform  Mode  #Avg Exits Disabled  #Avg Exits Enabled  Reduction
Intel          Idle          631722                   189460             70.01%
Intel          Load   10020824                    775194     92.26%
AMD         Idle          249200                    118042         52.63%
AMD         Load        425217                    306945     27.81%

sorry for the broken formatting. The following should be better.

Platform  Mode  #Avg Exits Disabled  #Avg Exits Enabled  Reduction

Intel     Idle    631722             189460               70.01%
Intel     Load  10020824             775194               92.26%
AMD       Idle    249200             118042               52.63%
AMD       Load    425217             306945               27.81%

Observations

Intel MBEC:
The reduction in VM-exits is massive (over 92% under load).

AMD GMET:
There is a measurable benefit (~28% reduction), though it appears less
significant than the Intel results. However, it is worth noting that the
AMD platform maintains a much lower baseline of VM-exits even with
the feature disabled, suggesting more efficient native handling of
these transitions compared to the Intel baseline in this specific test
environment.

On both architectures, I did not notice any stability issues with the
patches applied.

Let me know if there are more specific tests you're interested in.

Tested-by: David Riley <d.riley@xxxxxxxxxxx>

[0] https://lore.kernel.org/qemu-devel/20260330193428.1663253-2-jon@xxxxxxxxxxx/
[1] https://learn.microsoft.com/en-us/windows/security/hardware-security/enable-virtualization-based-protection-of-code-integrity?tabs=security
[2]

$Duration = 25
$StopWatch = [System.Diagnostics.StopWatch]::StartNew()

while($StopWatch.Elapsed.TotalSeconds -lt $Duration) {
    for ($i = 0; $i -lt 100; $i++) {
        $Value = Get-Random -Maximum 1000
        $Code = [scriptblock]::Create("($Value * 2) / 2")
        $Code.Invoke() | Out-Null
    }
    Start-Sleep -Milliseconds 20
}