2个版本

0.1.1 2024年3月11日
0.1.0 2022年5月12日

#47 in 内存管理

Download history 14095/week @ 2024-03-14 8752/week @ 2024-03-21 6855/week @ 2024-03-28 9293/week @ 2024-04-04 4294/week @ 2024-04-11 7917/week @ 2024-04-18 7543/week @ 2024-04-25 6931/week @ 2024-05-02 6120/week @ 2024-05-09 5598/week @ 2024-05-16 5599/week @ 2024-05-23 7482/week @ 2024-05-30 10186/week @ 2024-06-06 9511/week @ 2024-06-13 2424/week @ 2024-06-20 2162/week @ 2024-06-27

25,997 每月下载量

Apache-2.0 OR BSD-3-Clause

75KB
1.5K SLoC

vm-allocator

crates.io docs.rs

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