5个不稳定版本
0.3.0 | 2023年3月1日 |
---|---|
0.2.2 | 2022年11月10日 |
0.2.1 | 2022年11月8日 |
0.2.0 | 2022年10月24日 |
0.1.0 | 2022年5月12日 |
#269 in 仿真器
每月29次下载
145KB
2.5K SLoC
dbs-address-space
设计
dbs-address-space
包是一个虚拟机地址空间管理器,它管理驻留在客户物理地址空间中的内存和MMIO资源。
主要组件包括
- AddressSpaceRegion:维护客户地址区域配置信息的结构体。
#[derive(Debug, Clone)]
pub struct AddressSpaceRegion {
/// Type of address space regions.
pub ty: AddressSpaceRegionType,
/// Base address of the region in virtual machine's physical address space.
pub base: GuestAddress,
/// Size of the address space region.
pub size: GuestUsize,
/// Host NUMA node ids assigned to this region.
pub host_numa_node_id: Option<u32>,
/// File/offset tuple to back the memory allocation.
file_offset: Option<FileOffset>,
/// Mmap permission flags.
perm_flags: i32,
/// Hugepage madvise hint.
///
/// It needs 'advise' or 'always' policy in host shmem config.
is_hugepage: bool,
/// Hotplug hint.
is_hotplug: bool,
/// Anonymous memory hint.
///
/// It should be true for regions with the MADV_DONTFORK flag enabled.
is_anon: bool,
}
- AddressSpaceBase:管理客户物理地址空间的基础实现,不支持区域热插拔。
#[derive(Clone)]
pub struct AddressSpaceBase {
regions: Vec<Arc<AddressSpaceRegion>>,
layout: AddressSpaceLayout,
}
- AddressSpaceBase:具有区域热插拔能力的地址空间实现。
/// The `AddressSpace` is a wrapper over [AddressSpaceBase] to support hotplug of
/// address space regions.
#[derive(Clone)]
pub struct AddressSpace {
state: Arc<ArcSwap<AddressSpaceBase>>,
}
使用方法
// 1. create several memory regions
let reg = Arc::new(
AddressSpaceRegion::create_default_memory_region(
GuestAddress(0x100000),
0x100000,
None,
"shmem",
"",
false,
false,
false,
)
.unwrap()
);
let regions = vec![reg];
// 2. create layout (depending on archs)
let layout = AddressSpaceLayout::new(GUEST_PHYS_END, GUEST_MEM_START, GUEST_MEM_END);
// 3. create address space from regions and layout
let address_space = AddressSpace::from_regions(regions, layout.clone());
许可证
本项目采用Apache许可证,版本2.0。
依赖项
~3.5MB
~67K SLoC