基于 LLVM 的全局代码静态分析
120 likes | 425 Vues
基于 LLVM 的全局代码静态分析. 夏嘉斌. 2010 年 6 月 23 日. 指导老师 戚正伟. 概要. 研究背景 编译工具链的兼容性改良 基于全代码静态分析的死锁规避 下一步的工作. 研究背景. HP 联合实验室的需求和合作建议. 把数据库中二阶段锁协议融入全局代码静态分析中 使用全局锁排序加强二阶段锁协议规避循环等待条件 利用 LLVM 实现全局代码静态分析的死锁规避. 王胤 HP 联合实验室. 研究背景. Low Level Virtual Machine 编译基础框架. 使用中间代码深度优化 跨平台、跨语言性 可扩展性 多次深度优化
基于 LLVM 的全局代码静态分析
E N D
Presentation Transcript
基于LLVM的全局代码静态分析 夏嘉斌 2010年6月23日 指导老师 戚正伟
概要 • 研究背景 • 编译工具链的兼容性改良 • 基于全代码静态分析的死锁规避 • 下一步的工作
研究背景 HP联合实验室的需求和合作建议 • 把数据库中二阶段锁协议融入全局代码静态分析中 • 使用全局锁排序加强二阶段锁协议规避循环等待条件 • 利用LLVM实现全局代码静态分析的死锁规避 王胤 HP联合实验室
研究背景 Low Level Virtual Machine 编译基础框架 • 使用中间代码深度优化 • 跨平台、跨语言性 • 可扩展性 • 多次深度优化 • 强大且众多的分析优化 • 内置40余种分析优化 • 诸多子项目和工具 • 商业级性能
编译工具链的兼容性改良 LLVM的编译工具链兼容性不足 • 和GCC工具链的编译行为不一致 • 编译和链接工具的衔接不流畅 • 编译开关和选项和GCC工具链的不兼容 • 工具链的容错性低 • 目标代码是中间代码而不是本地机器码 • 无法编译复杂的Makefile工程
Makefile工程 Perl命令解析器 解析修改编译命令、开关 原始编译命令 LLVM系统编译工具链 编译工具链的兼容性改良
编译链工具的兼容性改良 改良后的工具链可流畅编译: • OpenLDAP • Apache • Bind • Parsec • x264 • Raytrace • Benchmarks
二阶段锁协议附加全局锁排序条件 基于全代码静态分析的死锁规避 Lock(A) Lock(A) Lock(C) Lock(B) Lock(B) Lock(C) Unlock(B) Unlock(C) Unlock(B) Unlock(A) Unlock(A) Unlock(C)
二阶段锁协议附加全局锁排序 基于全代码静态分析的死锁规避
临界区的扩张副作用 移动加锁/解锁语句后 扩大内部嵌套临界区 临界区1 临界区2 临界区3 基于全代码静态分析的死锁规避
下一步的工作 • 压缩临界区大小 • 优化排序方法 • 建立锁和共享资源的依赖关系 • 优化加锁解锁语句的移动距离 • 锁的别名分析 • 进一步使用全局别名分析处理别名问题 • 增加其他死锁规避技术的借鉴