2 个版本
0.1.1 | 2022年4月5日 |
---|---|
0.1.0 | 2022年3月30日 |
0.0.1 |
|
#308 in 测试
740KB
804 行
Coppers
Coppers 是一个 Rust 测试框架,借助 Intel RAPL 可以测量 Rust 程序在不同版本之间的功耗演变。
要求
- Rust 夜间版
- Linux
- 较新的 Intel 处理器,2013 年或之后 (为什么?)
此测试框架针对 Rust 夜间工具链,因为它依赖于 Rust 编译器的不稳定功能。
- 首先,请确保您已安装夜间工具链,可以使用
rustup install nightly
- 然后,使用
rustup override set nightly
安装
要启用项目中的自定义测试运行器,请将其添加到您的 Cargo.toml
文件中。
[dev-dependencies]
coppers = "0.1"
将以下两行添加到您的包根目录(可能是 lib.rs
或 main.rs
)
#![feature(custom_test_frameworks)]
#![test_runner(coppers::runner)]
使用方法
在您的项目中使用 Coppers,可以使用 cargo test
。这将运行您的单元测试,并报告每个测试的能源消耗。一个 JSON 格式的报告将生成在 target/coppers_results-[自纪元以来的秒数].json
。此文件包含机器可读的测试输出。
在解释结果之前,请考虑结果的准确性以及如何改进它。有关更多信息,请参阅我们的关于准确性的部分。
可视化
Coppers 可选支持结果的可视化输出。这些可视化可以帮助确定您的测试随时间推移的能量消耗变化。要启用可视化,请在您的 Cargo.toml
文件中启用 future 标志。
[dev-dependencies]
coppers = { version = "0.1", features = ["visualization"]}
此功能默认禁用,因为它依赖于某些 Python 包。您可以使用本存储库的 requirements.txt
文件中定义的包进行安装。
pip install -r requirements.txt
示例图表
此示例图表是通过启用visualization
功能生成的。在此线图中,绿色线表示的测试随着时间的推移变得更加节能。
稳定性保证
我们使用 rust version 1.61.0-nightly (ee915c34e 2022-03-28)
开发了此项目。较新的 nightly 版本可能会改变我们依赖的一些编译器功能,例如
我们无法保证该项目与较新的 nightly 版本兼容。
限制
我们的实现有一些局限性。
Intel RAPL
目前,这仅在基于 Intel 的 Linux 机器上通过 Power Capping Framework 使用 Intel RAPL 才能工作。它可以扩展以支持非 Intel 和非 Linux 机器,但这超出了我们项目的范围。
准确性
在单个测试级别测量能量消耗可能非常精确,但准确性不高。我们当前的方法测量整个系统的能量消耗,包括和/或受以下因素的影响:
- 操作系统
- 您的硬件配置
- 同时运行的其他程序
- 电源管理设置
- 外部设备,如 USB 驱动器、外部硬盘、显示器等。
- 您的网络适配器的能量消耗
- 您屏幕的亮度
- 您硬件的温度
- 您现实世界环境的温度
- 您缓存中的数据(更高的缓存命中率意味着从内存检索数据所消耗的能量更少)
为了获得最准确、最可靠和可重现的结果,您可以在运行测试时采取某些预防措施。预防措施的目标是限制其他因素的影响。预防措施可以包括:
- 当您想比较结果时,使用完全相同的硬件
- 关闭所有非必要应用程序
- 关闭所有通知
- 尽可能连接所需的最小硬件数量,因此如果可能的话,避免 USB 设备、外部显示器等。
- 终止后台运行的不必要服务
- 如果不需要,请关闭您的网络
- 如果您需要互联网,请首选有线连接而不是无线连接
- 禁用自动亮度并将亮度设置为尽可能低
- 多次重复测试
完整性
该项目尚未完成,但它是在我们遵循的短时间内所能取得的成果。可以通过以下方式扩展和改进:
- 在测试失败时报告正确的错误代码
- 在除了基于Intel的Linux机器之外的更多平台上运行
- 在执行过程中调整测试顺序,以避免由于缓存命中率过高而导致测试更节能
- 使某些功能更具可定制性,例如测试应重复的次数或是否忽略某些测试的报道
故障排除
Intel RAPL传感器未启用
您可能会收到如下错误:The location
/sys/devices/virtual/powercap/intel-rapl/intel-rapl:0 is unreachable
。如果您拥有基于Intel的机器,则可以使用以下方式通过modprobe启用Intel RAPL传感器:modprobe intel_rapl_common
(适用于Linux内核版本>= 5)。如果您有小于5的内核版本,则使用modprobe intel_rapl
。遗憾的是,Coppers目前不支持基于非Intel的机器。
运行测试时导致权限不足
如果您运行cargo test
,您可能会得到一个错误。
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "Insufficient permissions to read from /sys/devices/virtual/powercap/intel-rapl/intel-rapl:0/energy_uj. You might want to retry as root."'
这可以通过以下两种方式之一解决:
- 或者使用root权限再次运行测试,使用
sudo -E cargo test
。 - 或者通过运行以下命令临时添加对
/sys/devices/virtual/powercap/intel-rapl/intel-rapl:0/energy_uj
的读取权限:sudochmod o+r /sys/devices/virtual/powercap/intel-rapl/intel-rapl:0/energy_uj
cargotest
sudochmod o-r /sys/devices/virtual/powercap/intel-rapl/intel-rapl:0/energy_uj
ModuleNotFoundError
如果您启用了visualization
功能,则还需要安装所需的Python包。这可以通过安装此存储库中定义的包requirements.txt
来实现,使用pip install -r requirements.txt
。
关于
该项目是在2022年代尔夫特理工大学可持续软件工程课程的背景下完成的。我们选择“Coppers”这个名字,因为我们的项目与绿色软件和Rust都有关,而氧化铜呈绿色。
许可
根据Apache License,版本2.0(“许可证”);除非遵守许可证,否则不得使用此文件。您可以在http://www.apache.org/licenses/LICENSE-2.0获得许可证的副本。
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何形式(明示或暗示)的保证或条件。有关许可证中规定的权限和限制的具体语言,请参阅许可证。
依赖关系
~11–19MB
~334K SLoC