26个重大版本发布
新版本 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.1.0 | 2020年11月4日 |
55次下载
99每月下载量
用于hadron_slang
2MB
SLoC 34K
MMTk
MMTk是一个用于设计和实现高性能且可移植内存管理器的框架。该仓库包含MMTk的Rust版本。
内容
要求
我们维护了构建MMTk及其绑定所需的前提条件列表在mmtk-dev-env仓库中。
构建
MMTk可以使用稳定的Rust工具链构建。我们使用特定的Rust版本,并指定了最小支持的Rust版本(MSRV)。在Cargo.toml文件中,我们指定了Rust版本和Cargo配置。
$ 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。例如,我们为我们的 OpenJDK 绑定 使用了 GenImmix
。我们建议在压力下运行 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。语言 VM 可以通过这些 API 调用 MMTk。
- MMTk 提供了一个
VMBinding
特性,每个语言 VM 都必须实现。MMTk 使用VMBinding
来调用 VM。
要将 MMTk 集成到您的语言实现中,您需要提供一个 VMBinding
的实现,并根据需要调用 MMTk 的 API。
如需更多信息,您可以参考我们的迁移指南,面向VM实现者。我们还维护一个迁移指南,以帮助VM实现者将MMTk迁移到新版本。
实现您的GC
MMTk是一系列GC算法的集合(在MMTk中称为计划)。MMTk提供了可重用的组件,使得根据这些组件构建自己的GC变得简单。如需更多信息,您可以参考我们的教程,面向GC实现者。
测试
我们在CI中既使用单元测试也使用VM绑定测试来测试MMTk。
单元测试
MMTk使用Rust的测试框架进行单元测试。例如,您可以使用以下命令运行单元测试。
$ cargo test
我们CI中运行的所有单元测试的完整列表可以在这里找到。
VM绑定测试
MMTk还通过运行VM的标准测试/基准测试套件来测试我们维护的VM绑定。有关详情,请参考每个VM绑定仓库。
支持的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-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做出贡献。有关详情,您可以参考我们的贡献指南。
依赖项
~5–35MB
~533K SLoC