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)

MIT/Apache

15KB
277

MMTk

crates.io MSRV docs.rs project chat

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_FACTORMMTK_PRECISE_STRESS=false)以调整 GC 的配置样本数据。还建议多次运行基准测试以减少差异。

有关如何进行 PGO 构建的示例,请参阅 OpenJDK 绑定

使用

MMTk 不独立运行。您需要将 MMTk 与语言实现集成。您可以尝试我们一直在工作的其中一个 VM 绑定,或者在自己的 VM 中为 MMTk 实现自己的绑定。您也可以在 MMTk 中实现自己的 GC 算法,并使用支持的 VM 运行它。您可以在这里找到 mmtk-core 的最新完整 API 文档。

试用我们的当前绑定

我们维护了三个 MMTk 的 VM 绑定。这些绑定可以在以下存储库中访问

有关这些绑定的更多信息,请访问它们的存储库。

实现您的绑定

MMTk 与语言 VM 提供双向接口。

  1. MMTk 通过一组 API 揭示了一组 API。语言 VM 可以通过这些 API 调用 MMTk。
  2. 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