kvm

package
v0.0.0-...-fc40e23 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 25, 2025 License: Apache-2.0, BSD-3-Clause, MIT Imports: 40 Imported by: 6

Documentation

Overview

Package kvm provides a kvm-based implementation of the platform interface.

Index

Constants

View Source
const (
	KVM_CREATE_VM              = 0xae01
	KVM_GET_VCPU_MMAP_SIZE     = 0xae04
	KVM_CREATE_VCPU            = 0xae41
	KVM_SET_TSS_ADDR           = 0xae47
	KVM_RUN                    = 0xae80
	KVM_NMI                    = 0xae9a
	KVM_CHECK_EXTENSION        = 0xae03
	KVM_GET_TSC_KHZ            = 0xaea3
	KVM_SET_TSC_KHZ            = 0xaea2
	KVM_INTERRUPT              = 0x4004ae86
	KVM_SET_MSRS               = 0x4008ae89
	KVM_SET_USER_MEMORY_REGION = 0x4020ae46
	KVM_IOEVENTFD              = 0x4040ae79
	KVM_SET_REGS               = 0x4090ae82
	KVM_SET_SREGS              = 0x4138ae84
	KVM_GET_MSRS               = 0xc008ae88
	KVM_GET_REGS               = 0x8090ae81
	KVM_GET_SREGS              = 0x8138ae83
	KVM_GET_SUPPORTED_CPUID    = 0xc008ae05
	KVM_SET_CPUID2             = 0x4008ae90
	KVM_SET_SIGNAL_MASK        = 0x4004ae8b
	KVM_GET_VCPU_EVENTS        = 0x8040ae9f
	KVM_SET_VCPU_EVENTS        = 0x4040aea0
	KVM_SET_DEVICE_ATTR        = 0x4018aee1
	KVM_ENABLE_CAP             = 0x4068aea3
)

KVM ioctls.

Only the ioctls we need in Go appear here; some additional ioctls are used within the assembly stubs (KVM_INTERRUPT, etc.).

Variables

View Source
var KVMProfiling = metric.FakeMetricBuilder{}

KVMProfiling is a builder that produces conditionally compiled metrics. Metrics made from this are compiled and active at runtime when the "kvm_profiling" go-tag is specified at compilation.

Functions

func OpenDevice

func OpenDevice(devicePath string) (*fd.FD, error)

OpenDevice opens the KVM device and returns the File. If the devicePath is empty, it will default to /dev/kvm.

Types

type Config

type Config struct {
	// ApplicationCores is the same parameter passed into
	// kernel.InitKernelArgs. It is necessary to forward it to KVM in order
	// to initialize the correct amount of vCPUs.
	ApplicationCores int
}

Config sets configuration options for each platform instance.

type KVM

type KVM struct {
	platform.NoCPUPreemptionDetection

	// KVM never changes mm_structs.
	platform.UseHostProcessMemoryBarrier
	// contains filtered or unexported fields
}

KVM represents a lightweight VM context.

func New

func New(deviceFile *fd.FD, config Config) (*KVM, error)

New returns a new KVM-based implementation of the platform interface.

func (*KVM) ConcurrencyCount

func (k *KVM) ConcurrencyCount() int

ConcurrencyCount implements platform.Platform.ConcurrencyCount. KVM can't run more than maxVCPUs contexts concurrently.

func (*KVM) CooperativelySchedulesAddressSpace

func (*KVM) CooperativelySchedulesAddressSpace() bool

CooperativelySchedulesAddressSpace implements platform.Platform.CooperativelySchedulesAddressSpace.

func (*KVM) IoeventfdDisable

func (k *KVM) IoeventfdDisable(ev *eventfd.Eventfd)

IoeventfdDisable undoes the effect of a previous call to IoeventfdEnable.

func (*KVM) IoeventfdEnable

func (k *KVM) IoeventfdEnable(ev *eventfd.Eventfd) error

IoeventfdEnable causes the given eventfd to use MMIO when Eventfd.Write() is called in k's guest mode.

Postconditions: Eventfd.Write() cannot be called while in the guest mode of any VM other than k, i.e. no other KVM platform instance may be in use.

func (*KVM) MapUnit

func (*KVM) MapUnit() uint64

MapUnit implements platform.Platform.MapUnit.

func (*KVM) MaxUserAddress

func (*KVM) MaxUserAddress() hostarch.Addr

MaxUserAddress returns the first address that may not be used.

func (*KVM) MinUserAddress

func (*KVM) MinUserAddress() hostarch.Addr

MinUserAddress returns the lowest available address.

func (*KVM) NewAddressSpace

func (k *KVM) NewAddressSpace(any) (platform.AddressSpace, <-chan struct{}, error)

NewAddressSpace returns a new pagetable root.

func (*KVM) NewContext

func (k *KVM) NewContext(pkgcontext.Context) platform.Context

NewContext returns an interruptible context.

func (*KVM) SeccompInfo

func (k *KVM) SeccompInfo() platform.SeccompInfo

SeccompInfo returns seccomp information for the KVM platform.

func (*KVM) SupportsAddressSpaceIO

func (*KVM) SupportsAddressSpaceIO() bool

SupportsAddressSpaceIO implements platform.Platform.SupportsAddressSpaceIO.

Directories

Path Synopsis
Package testutil provides common assembly stubs for testing.
Package testutil provides common assembly stubs for testing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL