Dependencies and Integration
Relevant source files
This document explains the axvcpu crate's external dependencies and how it integrates with the ArceOS hypervisor ecosystem. It covers the four core dependencies (axerrno, memory_addr, percpu, axaddrspace) and describes the integration patterns that enable axvcpu to function as a virtualization abstraction layer.
For information about the actual VCPU management functionality, see Core VCPU Management. For details about testing and CI processes, see Testing and Continuous Integration.
Dependency Architecture
The axvcpu crate relies on four core dependencies that provide foundational abstractions for error handling, memory management, per-CPU operations, and address space management.
Dependency Graph
flowchart TD
subgraph subGraph1["axvcpu Core Modules"]
lib_rs["lib.rs"]
vcpu_rs["vcpu.rs"]
exit_rs["exit.rs"]
arch_vcpu_rs["arch_vcpu.rs"]
hal_rs["hal.rs"]
percpu_rs["percpu.rs"]
end
subgraph subGraph0["External Crates"]
axerrno["axerrnov0.1.0"]
memory_addr["memory_addrv0.3.1"]
percpu_crate["percpuv0.2.0"]
axaddrspace["axaddrspacegit dependency"]
end
axaddrspace --> lib_rs
axerrno --> lib_rs
hal_rs --> axaddrspace
lib_rs --> arch_vcpu_rs
lib_rs --> exit_rs
lib_rs --> hal_rs
lib_rs --> percpu_rs
lib_rs --> vcpu_rs
memory_addr --> lib_rs
percpu_crate --> lib_rs
percpu_rs --> percpu_crate
vcpu_rs --> arch_vcpu_rs
vcpu_rs --> exit_rs
Sources: Cargo.toml(L7 - L12)
Core Dependencies Analysis
Error Handling Foundation - axerrno
The axerrno crate provides standardized error handling across the ArceOS ecosystem. axvcpu uses this for:
| Component | Usage Pattern | Error Types |
|---|---|---|
| VCPU Operations | State transition failures | AxError::InvalidArg |
| Exit Processing | Hardware abstraction errors | AxError::Unsupported |
| Memory Management | Address space operations | AxError::NoMemory |
| Architecture Interface | Platform-specific failures | AxError::BadState |
Memory Abstractions - memory_addr
The memory_addr crate provides type-safe memory address abstractions used throughout the VCPU management system:
flowchart TD
subgraph subGraph1["axvcpu Usage"]
exit_handling["Exit Handling"]
mmio_ops["MMIO Operations"]
guest_memory["Guest Memory"]
host_memory["Host Memory"]
end
subgraph subGraph0["memory_addr Types"]
VirtAddr["VirtAddr"]
PhysAddr["PhysAddr"]
Page["Page"]
Frame["Frame"]
end
Frame --> host_memory
Page --> guest_memory
PhysAddr --> guest_memory
PhysAddr --> host_memory
VirtAddr --> exit_handling
VirtAddr --> mmio_ops
Sources: Cargo.toml(L9)
Per-CPU State Management - percpu
The percpu crate enables efficient per-CPU variable management, critical for hypervisor operations where each physical CPU core needs isolated virtualization state:
| Per-CPU Component | Purpose | Access Pattern |
|---|---|---|
| VCPU Binding State | Track which VCPU runs on which CPU | Read/Write during scheduling |
| Hardware Context | Store virtualization hardware state | Save/Restore on context switch |
| Exit Statistics | Performance monitoring data | Increment on VM exits |
Address Space Integration - axaddrspace
The axaddrspace dependency is a git-based dependency providing address space management abstractions specifically designed for the ArceOS hypervisor:
flowchart TD
subgraph subGraph1["axvcpu Integration Points"]
AxVCpuHal["AxVCpuHal trait"]
hal_impl["hal.rs implementation"]
guest_mappings["Guest Memory Mappings"]
host_mappings["Host Memory Mappings"]
end
subgraph subGraph0["axaddrspace Abstractions"]
AddrSpace["AddrSpace"]
Mapping["Mapping"]
Permission["Permission"]
MemBackend["MemBackend"]
end
AddrSpace --> AxVCpuHal
AxVCpuHal --> hal_impl
Mapping --> hal_impl
MemBackend --> host_mappings
Permission --> guest_mappings
hal_impl --> guest_mappings
hal_impl --> host_mappings
Sources: Cargo.toml(L12)
Integration Architecture
Trait-Based Integration Pattern
axvcpu uses trait-based abstractions to integrate with its dependencies while maintaining architectural independence:
flowchart TD
subgraph subGraph2["Implementation Layer"]
arch_impl["Architecture implementations"]
hal_impl["HAL implementations"]
percpu_impl["Per-CPU implementations"]
end
subgraph subGraph1["axvcpu Trait Definitions"]
AxArchVCpu["AxArchVCpu trait"]
AxVCpuHal["AxVCpuHal trait"]
AxPerCpu["AxPerCpu trait"]
end
subgraph subGraph0["Dependency Traits"]
ErrorTrait["axerrno::AxResult"]
AddrTrait["memory_addr::VirtAddr"]
PerCpuTrait["percpu::PerCpu"]
SpaceTrait["axaddrspace::AddrSpace"]
end
AddrTrait --> AxArchVCpu
AxArchVCpu --> arch_impl
AxPerCpu --> percpu_impl
AxVCpuHal --> hal_impl
ErrorTrait --> AxArchVCpu
ErrorTrait --> AxVCpuHal
PerCpuTrait --> AxPerCpu
SpaceTrait --> AxVCpuHal
Sources: Cargo.toml(L7 - L12)
Build System Integration
The Cargo.toml configuration establishes the integration foundation:
| Dependency Type | Version Strategy | Integration Method |
|---|---|---|
| axerrno | Semantic versioning (0.1.0) | Standard crates.io dependency |
| memory_addr | Semantic versioning (0.3.1) | Standard crates.io dependency |
| percpu | Semantic versioning (0.2.0) | Standard crates.io dependency |
| axaddrspace | Git dependency | ArceOS ecosystem integration |
The git dependency on axaddrspace indicates tight coupling with the ArceOS hypervisor ecosystem, while the semantic versioned dependencies provide stable foundations.
Ecosystem Integration Patterns
ArceOS Hypervisor Integration
flowchart TD
subgraph subGraph2["Supporting Ecosystem"]
axaddrspace_sys["axaddrspace system"]
error_system["axerrno error system"]
percpu_system["percpu management"]
end
subgraph subGraph1["axvcpu Interface"]
AxVCpu["AxVCpu"]
AxVCpuExitReason["AxVCpuExitReason"]
vcpu_state["VCpu state machine"]
end
subgraph subGraph0["ArceOS Hypervisor"]
hypervisor["Hypervisor Core"]
vm_manager["VM Manager"]
scheduler["VCPU Scheduler"]
end
AxVCpu --> AxVCpuExitReason
AxVCpu --> axaddrspace_sys
AxVCpu --> error_system
AxVCpu --> percpu_system
AxVCpu --> vcpu_state
hypervisor --> AxVCpu
scheduler --> AxVCpu
vm_manager --> AxVCpu
Multi-Architecture Support Integration
The dependency structure enables cross-platform virtualization support:
| Architecture | Integration Pattern | Dependency Usage |
|---|---|---|
| x86_64 | VMX/VT-x hardware abstraction | memory_addrfor guest physical addresses |
| ARM64 | EL2 virtualization | percpufor exception level state |
| RISC-V | H-extension support | axaddrspacefor guest address translation |
Sources: Cargo.toml(L1 - L12)
Version Management and Compatibility
The dependency version strategy ensures compatibility across the ArceOS ecosystem:
- Stable dependencies:
axerrno,memory_addr,percpuuse semantic versioning for API stability - Ecosystem dependency:
axaddrspaceuses git dependency for coordinated development - Edition alignment: All components target Rust 2024 edition for language feature consistency
This integration architecture enables axvcpu to provide a stable virtualization abstraction while leveraging specialized components for error handling, memory management, and per-CPU operations within the broader ArceOS hypervisor ecosystem.
Sources: Cargo.toml(L1 - L12)