2个版本
0.1.1 | 2024年3月11日 |
---|---|
0.1.0 | 2022年5月12日 |
#47 in 内存管理
25,997 每月下载量
75KB
1.5K SLoC
vm-allocator
vm-allocator
是一个crate,旨在为虚拟机生命周期中所需资源的分配和释放提供策略。虚拟机管理程序(VMM)可以使用vm-allocator分配的资源类型包括MMIO地址、PIO地址、GSI号码、设备ID。
此crate导出2个分配器:一个用于可以表示为整数的资源,另一个用于地址。有两个单独的分配器的原因是需要在地址分配器中添加语义意义,通过指定配置参数(例如对ID没有意义的对齐方式)来实现。
crate的主要组件包括
IdAllocator
,应用于所有可以减少为整数类型的资源。AddressAllocator
,应用于在不同地址空间中分配地址范围。此组件是IntervalTree
的包装器,它为地址范围添加语义。有关地址分配器内部表示的更多详细信息,请参阅设计文档。
ID分配器
设计
此分配器应用于分配可以减少为整型资源,例如传统的GSI编号或KVM内存插槽ID。此类资源的特征由IdAllocator
结构体表示。
定义IdAllocator
的结构体包含所管理区间的末尾、一个指向下一个可用ID的字段以及一个用于存储释放的ID的BTreeSet
。使用BTreeSet
的原因是删除和插入的平均复杂度为O(log N)
,与Vector相比提供了更好的性能。条目是有序的,因此我们将始终使用第一个可用的ID。
分配策略
在分配新的ID时,我们始终尝试返回最小的可用ID。为此,我们首先在BTreeSet
中搜索任何已释放的ID,如果我们那里找不到任何东西,我们则从从未分配的范围内返回下一个ID。
IdAllocator
结构体实现了分配和释放ID的方法。
用法
在Cargo.toml中将vm-allocator作为依赖项添加
[dependencies]
vm-allocator = "*"
然后向项目的crate根目录添加extern crate vm-allocator;
。使用此crate的VMM应该为它们想要管理的每个资源类型实例化一个IdAllocator
对象。
许可证
此项目受以下之一的许可:
依赖项
~0.3–0.8MB
~19K SLoC