Skip to content

arceos-hypervisor/x86_vcpu

x86_vcpu

CI

Definition of the vCPU structure and virtualization-related interface support for x86_64 architecture.

The crate user must implement the AxVCpuHal trait to provide the required low-level implementantion, relevant implementation can refer to axvcpu. [Work in Progress]

Features

  • VMX Support: Complete Intel VT-x virtualization support
  • SVM Support: AMD SVM (Secure Virtual Machine) virtualization support (feature flag svm)
  • Register Management: Comprehensive x86 register state management
  • EPT (Extended Page Tables): Memory virtualization support
  • MSR Handling: Model-Specific Register access and management
  • VMCS Management: Virtual Machine Control Structure operations
  • Interrupt Handling: Virtual interrupt and exception processing
  • Tracing Support: Optional tracing for debugging (feature flag tracing)

Architecture

The library is structured into several key modules:

Core Components

  • vmx/: Intel VMX virtualization implementation

    • vcpu.rs: Virtual CPU implementation (VmxArchVCpu)
    • vmcs.rs: VMCS (Virtual Machine Control Structure) management
    • percpu.rs: Per-CPU state management (VmxArchPerCpuState)
    • definitions.rs: VMX constants and exit reasons
    • instructions.rs: VMX instruction wrappers
    • structs.rs: VMX data structures
  • regs/: Register management

    • accessors.rs: Register access utilities
    • diff.rs: Register state comparison
    • mod.rs: General-purpose registers (GeneralRegisters)
  • ept.rs: Extended Page Tables implementation

  • msr.rs: Model-Specific Register handling

Key Types

Basic Example

use x86_vcpu::{has_hardware_support, GeneralRegisters};

// Check if VMX is supported on this hardware
if has_hardware_support() {
    println!("VMX hardware support detected");
} else {
    println!("VMX hardware support not available");
}

// Create and initialize guest registers
let mut regs = GeneralRegisters::default();
regs.rax = 0x1234;
regs.rbx = 0x5678;

println!("Guest registers initialized:");
println!("RAX: {:#x}", regs.rax);
println!("RBX: {:#x}", regs.rbx);

// Display register names
for (i, name) in GeneralRegisters::REGISTER_NAMES.iter().enumerate() {
    println!("Register {}: {}", i, name);
}

Features

The library supports the following Cargo features:

  • default: Enables VMX support by default
  • vmx: Intel VMX (VT-x) support
  • svm: AMD SVM support
  • tracing: Enable tracing for debugging

Related Projects

  • ArceOS - An experimental modular OS (or Unikernel)
  • AxVisor - Hypervisor implementation

License

This project is licensed under multiple licenses. You may choose to use this project under any of the following licenses:

You may use this software under the terms of any of these licenses at your option.

About

vCpu for x86_64: Intel VMX virtualization support under x86_64 architecture

Resources

License

Apache-2.0 and 3 other licenses found

Licenses found

Apache-2.0
LICENSE.Apache2
GPL-3.0
LICENSE.GPLv3
MulanPSL-2.0
LICENSE.MulanPSL2
Unknown
LICENSE.MulanPubL2

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

Languages