15个重大版本发布
新功能 0.27.0 | 2024年8月9日 |
---|---|
0.26.0 | 2024年7月1日 |
0.25.0 | 2024年5月17日 |
0.23.0 | 2024年2月9日 |
0.13.0 | 2022年6月27日 |
1299 在 过程宏 中排名
每月下载量 26 次
在 2 个crate中使用 (通过 mmtk)
15KB
277 行
MMTk
MMTk是一个用于设计和实现内存管理器的框架。该仓库托管了MMTk的Rust端口。
内容
要求
我们在mmtk-dev-env仓库中维护了构建MMTk及其绑定所需的所有先决条件的最新列表。
构建
MMTk可以使用稳定的Rust工具链进行构建。我们使用该rust-toolchain
文件将Rust版本固定到特定版本,并在Cargo.toml
中指定最小支持的Rust版本(MSRV)。
$ cargo build
MMTk还提供了一组用户可以选择的可选功能。可以通过检查Cargo.toml
来查看可用的功能列表。通过将--features
标志传递给Rust编译器,我们可以有条件地编译与功能相关的代码。例如,您可以通过将sanity
添加到您希望使用的功能集中,选择性地启用健全性检查。
您可以将 --release
标志传递给 cargo build
命令,以使用 Rust 的优化编译器来提高性能。
构建过程中产生的工件可以找到在 target/debug
下(或者 target/release
用于发布构建)。
ci-build.sh
展示了 CI 测试的构建。
基于配置文件指导的优化构建
为了获得最佳性能,我们建议使用基于配置文件指导的优化(PGO)构建。Rust 通过连接到 LLVM 分析基础设施支持 PGO 构建。其思路是通过运行代表基准测试来收集分析数据,然后使用分析数据作为优化决策的反馈。
建议在配置步骤中选择性能最佳的 GC。例如,GenImmix
用于我们的 OpenJDK 绑定。我们建议在压力下运行 GC(使用 MMTK_STRESS_FACTOR
和 MMTK_PRECISE_STRESS=false
)以调整 GC 的配置样本数据。还建议多次运行基准测试以减少差异。
有关如何进行 PGO 构建的示例,请参阅 OpenJDK 绑定。
使用
MMTk 不独立运行。您需要将 MMTk 与语言实现集成。您可以尝试我们一直在工作的其中一个 VM 绑定,或者在自己的 VM 中为 MMTk 实现自己的绑定。您也可以在 MMTk 中实现自己的 GC 算法,并使用支持的 VM 运行它。您可以在这里找到 mmtk-core 的最新完整 API 文档。
试用我们的当前绑定
我们维护了三个 MMTk 的 VM 绑定。这些绑定可以在以下存储库中访问
有关这些绑定的更多信息,请访问它们的存储库。
实现您的绑定
MMTk 与语言 VM 提供双向接口。
- MMTk 通过一组 API 揭示了一组 API。语言 VM 可以通过这些 API 调用 MMTk。
- MMTk 提供了一个
VMBinding
trait,每个语言 VM 都必须实现。MMTk 使用VMBinding
调用 VM。
要将 MMTk 集成到您的语言实现中,您需要提供 VMBinding
的实现,并根据您的需求可选地调用 MMTk 的 API。
有关更多信息,您可以参考我们的端口指南,以帮助 VM 实现者迁移 MMTk 到新版本。
实现您的 GC
MMTk 是一套各种 GC 算法(在 MMTk 中称为计划)。MMTk 提供了可重用组件,使得根据这些组件构建自己的 GC 变得容易。有关更多信息,您可以参考我们的教程,以帮助 GC 实现者。
测试
我们在 CI 中使用单元测试和 VM 绑定测试来测试 MMTk。
单元测试
MMTk 使用 Rust 的测试框架进行单元测试。例如,您可以使用以下命令运行单元测试。
$ cargo test
我们CI中运行的所有单元测试的完整列表可以在这里找到:链接。
虚拟机绑定测试
MMTk 还通过运行虚拟机的标准测试/基准测试套件来测试我们维护的虚拟机绑定。详细信息,请参阅每个虚拟机绑定存储库。
支持的 Rust 版本
MMTk 在存储库中使用了固定的 Rust 版本(记录在 rust-toolchain
文件中)。我们使用固定的 Rust 版本运行测试和基准测试。我们建议在开发中使用固定的 Rust 版本。我们在 mmtk-core 的发布之间更新固定的 Rust 版本,以使其接近最新的 Rust 稳定版本。mmtk-core 的发布周期为六周,与 Rust 本身大致相同。
我们的最小支持 Rust 版本(MSRV)策略是 "N-1"(注意,N 不是 当前的稳定 Rust 版本)。这意味着我们还确保 mmtk-core 与 rust-toolchain
中指定的版本之前的那个小版本号的 Rust 工具链正常工作。例如,如果 rust-toolchain
包含 "1.61.2",则 MSRV 保证不会晚于 "1.60.0"。当我们需要利用新的 Rust 功能或需要较新 Rust 的依赖项存储库时,我们可能会将 MSRV 提高到 "N-1"。换句话说,我们不会急于提高 MSRV,实际上 MSRV 可能会落后于 "N-1"。然而,用户不应依赖这种滞后,我们鼓励用户使用最新的 Rust 工具链,而不是依赖过时的 Rust 版本。
但是,请注意,当 MMTk 达到稳定状态时,我们可能会在未来切换到更保守的 MSRV 策略。
为 MMTk 做贡献
感谢您对为 MMTk 做贡献的兴趣。我们感谢所有贡献者。通常,您可以通过报告遇到的 MMTk 缺陷或提交您的补丁到 MMTk 来为 MMTk 做贡献。有关详细信息,您可以参考我们的贡献指南。
依赖项
~290–740KB
~17K SLoC