#memory #pattern #testing #hash-map #cross-platform #tester #numbers

libmemtester

A Rust 库,用于测试内存故障

5 个稳定版本

1.2.1 2022年11月18日
1.2.0 2022年10月6日
1.1.1 2022年9月15日
1.1.0 2022年9月13日
1.0.0 2022年9月13日

#10 in #tester

29 每月下载量
用于 memtester

GPL-3.0 许可协议

17KB
423 代码行

libmemtester-rs

pipeline

本项目是一个用于测试内存的 Rust 库。它是 memtester 的 Rust 版本。

本库的目标是提供一个跨平台的内存测试器(已在 Linux 和 Windows 上测试过),可用于其他项目。

它通过分配一大块内存,并向其写入一个模式。然后读取内存并检查该模式是否正确。它对多个不同的模式进行此操作。如果内存有故障,它会检测到并返回一个包含故障地址和它们故障次数的哈希表。

为了防止操作系统交换内存和移动页面,此库会将内存锁定(在 Linux 上使用 mlock 系统调用,在 Windows 上使用 VirtualLock)。为此,需要以 root 用户运行此库。

⌨ 使用方法

use libmemtester::MemoryTests;

fn main() {
    // The size to allocate in bytes (must be divisible by 16)
    let size_to_allocate = 1024 * 1024 * 1024; // 1GB

    let debug_prints = false; // If you want the debug prints

    // Create a new MemTester instance
    let mem_tests_res = MemoryTests::new(size_to_allocate, debug_prints);

    // Checking if there were any errors when allocating the memory
    if let Err(e) = mem_tests {
        println!("Error: {}", e);
        return;
    }
    let tests = mem_tests.unwrap();

    // We run the tests by calling an iterator
    // This way you can stop the tests when one fails
    // or simply display information as the tests goes along
    for let Some((test_name, error_count)) in tests.get_iterator() {
        println!("Test: {} - Error count: {}", test_name, error_count);
    }

    // When the iterator is done, we can get the results
    // This will return a hashmap of the faulty addresses and the number of times they were faulty
    let errors = tests.get_errors();
    println!("Errors: {:#?}", errors);
}

您可以在 memtester-rs 中查看此库的示例。

📃 许可协议

本项目采用 GPLv3 许可协议 - 请参阅 LICENSE 文件以获取详细信息

依赖关系

~0.2–0.9MB
~14K SLoC