使用静态分析降低软件事务内存(STM)开销
1. 研究贡献概述
本研究主要有以下贡献:
- 实现了一组常见的特定于软件事务内存(STM)的分析和优化。
- 提出并实现了一组新的分析和优化方法,以减少STM插桩的开销。
- 通过测量表明,所建议的优化可以显著提高性能,在某些工作负载下加速比可达29 - 50%。
2. 背景:基于Java的STM框架Deuce
Deuce是一个可插拔的STM框架,允许不同的STM协议实现。开发者只需实现Context接口,并为各种STM库函数提供自己的实现。这些库函数规定了读取字段、写入字段、提交事务和回滚事务时应采取的操作。
Deuce具有非侵入性,它不修改JVM或Java语言,也不需要重新编译源代码来进行插桩。它通过引入新的 @Atomic
注解来工作,带有该注解的Java方法会被替换为一个重试循环,尝试执行并提交该方法的事务版本。所有方法都会被复制,事务版本的方法与原始方法类似,只是所有字段和数组访问都被替换为对Context接口的调用,所有方法调用也会被重写,以调用事务版本的方法。
Deuce有在线和离线两种工作模式:
- 在线模式 :程序插桩的整个过程在运行时进行。通过向JVM指定参数,将Java代理附加到正在运行的程序上。在类加载到内存之前,Deuce代理会对程序进行内存中的转换。Deuce使用ASM(一个通用的字节码操作框架)来读取和重写类。
- 离线模式 :为避免在线模式的运行时开销,Deuce提供离线模式,直接对编译后的