Skip to the content.

4.2 CDSChecker

功能: 针对 C11/C++11 内存模型的模型检测工具。

特点:

局限性: 主要针对 C11/C++11 标准,不直接支持内核特有的原语。

4.3 Nidhugg

功能: 针对 C/C++ 和 LLVM IR 的状态空间探索工具。

特点:

使用方法:

# 编译为 LLVM IR
clang -S -emit-llvm program.c -o program.ll

# 使用 Nidhugg 分析
nidhugg -sc program.ll    # Sequential Consistency
nidhugg -tso program.ll   # Total Store Order

5. 学术界的其他工具

5.1 Dartagnan

功能: 使用 SMT solver(如 Z3)验证内存模型的工具。

特点:

原理: 将程序执行和内存模型约束编码为 SMT 公式,然后使用求解器检查是否存在违反规范的执行路径。

5.2 GenMC

功能: 针对 C/C++11 内存模型的模型检测工具。

特点:

与 herd7 的区别:

5.3 MemAlloy

功能: 基于 Alloy 的内存模型比较工具。

特点:

应用场景: 用于验证新提出的内存模型是否与现有模型兼容,或者找出两个模型之间的差异。

5.4 rmem

功能: ARM 架构的内存模型探索工具。

特点:

应用场景: 主要用于 ARM 架构的内存模型研究和教学。

5.5 Nemos

功能: 用于验证和比较内存模型的工具。

特点:


6. 工具对比总结

工具 类型 目标 内核/用户态 形式化/动态 主要用途
herd7 模拟器 LKMM 验证 通用 形式化 验证 litmus test 在 LKMM 下是否允许
klitmus7 代码生成器 硬件测试 内核 动态 在真实硬件上运行 litmus test
litmus7 测试运行器 硬件测试 用户态 动态 在用户态运行 litmus test
diy7 生成器 测试生成 通用 - 自动生成 litmus tests
KCSAN 检测器 数据竞争 内核 动态 运行时检测内核数据竞争
lockdep 检测器 锁顺序 内核 动态 检测死锁和锁顺序违规
rcutorture 压力测试 RCU 内核 动态 压力测试 RCU 实现
locktorture 压力测试 内核 动态 压力测试锁原语
membarrier selftests 单元测试 membarrier 用户态 动态 测试 membarrier 系统调用
TSan 检测器 数据竞争 用户态 动态 运行时检测用户态数据竞争
CDSChecker 模型检测 C11 MM 用户态 形式化 验证 C11 程序正确性
Nidhugg 模型检测 多种 MM 用户态 形式化 状态空间探索
Dartagnan SMT 验证 多种 MM 通用 形式化 SMT-based 验证
GenMC 模型检测 C11 MM 用户态 形式化 C11 模型检测
MemAlloy 比较工具 多种 MM 通用 形式化 内存模型比较
rmem 探索工具 ARM MM 通用 形式化 ARM 内存模型可视化
Nemos 验证工具 多种 MM 通用 形式化 内存模型验证和比较

7. 如何选择工具

场景 1: 验证内核无锁代码的内存序

场景 3: 验证用户态并发代码

场景 4: 研究新的内存模型

场景 5: 批量生成和验证测试

herdtools7

内核工具

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。