mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
kvm: add vmcall/vmmcall benchmark
PiperOrigin-RevId: 668124123
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user