120 likes | 416 Views
基于 LLVM 的全局代码静态分析. 夏嘉斌. 2010 年 6 月 23 日. 指导老师 戚正伟. 概要. 研究背景 编译工具链的兼容性改良 基于全代码静态分析的死锁规避 下一步的工作. 研究背景. HP 联合实验室的需求和合作建议. 把数据库中二阶段锁协议融入全局代码静态分析中 使用全局锁排序加强二阶段锁协议规避循环等待条件 利用 LLVM 实现全局代码静态分析的死锁规避. 王胤 HP 联合实验室. 研究背景. Low Level Virtual Machine 编译基础框架. 使用中间代码深度优化 跨平台、跨语言性 可扩展性 多次深度优化
E N D
基于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 基于全代码静态分析的死锁规避
下一步的工作 • 压缩临界区大小 • 优化排序方法 • 建立锁和共享资源的依赖关系 • 优化加锁解锁语句的移动距离 • 锁的别名分析 • 进一步使用全局别名分析处理别名问题 • 增加其他死锁规避技术的借鉴