kvm: add vmcall/vmmcall benchmark

PiperOrigin-RevId: 668124123
This commit is contained in:
Andrei Vagin
2024-08-27 13:52:47 -07:00
committed by gVisor bot
parent cc1f5503f1
commit 41cd09d2d5
2 changed files with 30 additions and 0 deletions
+18
View File
@@ -53,6 +53,24 @@ func TestSegments(t *testing.T) {
})
}
func vmcall(ax uintptr) uintptr
func vmmcall(ax uintptr) uintptr
func BenchmarkVMCall(b *testing.B) {
vmcallIsSupported := cpuid.HostFeatureSet().Intel()
kvmTest(b, nil, func(c *vCPU) bool {
for i := 0; i < b.N; i++ {
bluepill(c)
if vmcallIsSupported {
vmcall(0)
} else {
vmmcall(0)
}
}
return false
})
}
// stmxcsr reads the MXCSR control and status register.
func stmxcsr(addr *uint32)
+12
View File
@@ -19,3 +19,15 @@ TEXT ·stmxcsr(SB),NOSPLIT|NOFRAME,$0-8
MOVQ addr+0(FP), SI
STMXCSR (SI)
RET
TEXT ·vmcall(SB),NOSPLIT,$0-16
MOVQ $ax+0(FP), AX
BYTE $0x0F; BYTE $0x01; BYTE $0xC1; // vmcall
MOVQ AX, ret+8(FP)
RET
TEXT ·vmmcall(SB),NOSPLIT,$0-16
MOVQ $ax+0(FP), AX
BYTE $0x0F; BYTE $0x01; BYTE $0xD9; // vmmcall
MOVQ AX, ret+8(FP)
RET