| Crates.io | axvcpu |
| lib.rs | axvcpu |
| version | 0.1.1 |
| created_at | 2025-08-15 07:38:07.729674+00 |
| updated_at | 2025-09-08 07:36:06.014058+00 |
| description | Virtual CPU abstraction for ArceOS hypervisor |
| homepage | |
| repository | https://github.com/arceos-hypervisor/axvcpu |
| max_upload_size | |
| id | 1796357 |
| size | 140,532 |
AxVCpu is a virtual CPU abstraction library for ArceOS hypervisors, providing a unified, architecture-independent interface for managing virtual CPUs in hypervisor environments.
AxVCpu follows a layered architecture design:
┌─────────────────────────────────────────┐
│ Application Layer │ ← Hypervisor/VMM
├─────────────────────────────────────────┤
│ AxVCpu Core Interface │ ← Main API
├─────────────────────────────────────────┤
│ Architecture Abstraction │ ← AxArchVCpu trait
├─────────────────────────────────────────┤
│ Hardware Abstraction Layer │ ← AxVCpuHal trait
├─────────────────────────────────────────┤
│ Architecture-Specific Backends │ ← x86_64, ARM64, etc.
└─────────────────────────────────────────┘
Created → Free → Ready → Running → Blocked
↓ ↓ ↓ ↓ ↓
└───────┴──────┴────────┴────────┘
Invalid
AxArchVCpu: Architecture-specific VCpu implementation interfaceAxVCpuHal: Hardware abstraction layer for hypervisor operationsAxVCpuExitReason: VM exit reason enumeration and handlingAdd AxVCpu to your Cargo.toml:
[dependencies]
axvcpu = "0.1.0"
use axvcpu::{AxVCpu, VCpuState};
// Mock implementation for example
struct MyArchVCpu;
impl AxArchVCpu for MyArchVCpu {
// Implement required methods...
}
// Create a new virtual CPU
let vcpu = AxVCpu::<MyArchVCpu>::new(
vm_id, // VM identifier
vcpu_id, // VCpu identifier
favor_cpu, // Preferred physical CPU
cpu_set, // CPU affinity mask
config // Architecture-specific config
)?;
// Check VCpu state
assert_eq!(vcpu.state(), VCpuState::Created);
// Setup the VCpu
vcpu.setup(entry_addr, ept_root, setup_config)?;
// Bind to current physical CPU and run
vcpu.bind()?;
let exit_reason = vcpu.run()?;
// Handle VM exit
match exit_reason {
AxVCpuExitReason::Halt => {
println!("Guest halted");
},
AxVCpuExitReason::Io { port, is_write, .. } => {
println!("I/O access on port {}", port);
},
// ... handle other exit reasons
}
To implement AxVCpu for a new architecture:
use axvcpu::AxArchVCpu;
struct MyArchVCpu {
// Architecture-specific fields
}
impl AxArchVCpu for MyArchVCpu {
type CreateConfig = MyCreateConfig;
type SetupConfig = MySetupConfig;
fn new(vm_id: VMId, vcpu_id: VCpuId, config: Self::CreateConfig) -> AxResult<Self> {
// Initialize architecture-specific VCpu
Ok(Self { /* ... */ })
}
fn set_entry(&mut self, entry: GuestPhysAddr) -> AxResult {
// Set guest entry point
Ok(())
}
fn set_ept_root(&mut self, ept_root: HostPhysAddr) -> AxResult {
// Configure memory virtualization
Ok(())
}
fn setup(&mut self, config: Self::SetupConfig) -> AxResult {
// Complete VCpu initialization
Ok(())
}
fn run(&mut self) -> AxResult<AxVCpuExitReason> {
// Execute guest code until VM exit
Ok(AxVCpuExitReason::Halt)
}
// Implement other required methods...
}
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.