Clang/LLVM static analyzer that detects microarchitectural hazards
2 months ago
- #static-analysis
- #C++
- #performance
- lshaz是一个基于Clang/LLVM的静态分析工具,用于在编译时检测C++代码中的微架构延迟风险
- 该工具旨在将性能反馈环节前移到开发流程的代码编写阶段,而非等到生产环境性能分析时
- lshaz通过字节偏移量和缓存行边界等运行时相关信息,分析结构体字段布局、原子操作选择、线程逃逸和NUMA位置问题
- 在分析Abseil-C++代码库时,lshaz产生了256个诊断结果,揭示了潜在的性能问题
- 关键发现包括ThreadIdentity结构体,其设计存在涉及缓存行共享和原子字段的硬件权衡考量
- ThreadIdentity因缓存跨行和伪共享等多重并发风险触发了复合危害放大效应
- 另一个重要发现是HashtablezInfo采样结构体,其原子字段在缓存行间呈现高密度分布
- 256个诊断结果根据证据强度分为确证、可能和推测三个等级
- lshaz独特之处在于能生成形式化假设和实验包,通过硬件性能计数器验证预测结果
- 该工具已在GitHub开源,并通过SARIF输出与GitHub代码扫描等CI系统集成