Page 60 - 《软件学报》2021年第12期
P. 60
3724 Journal of Software 软件学报 Vol.32, No.12, December 2021
Table 4 Comparison of CLOCK and FLock
表 4 CLOCK 和 FLock 重构对比
CLOCK FLock
名称 乐观 不能 时间 时间
读锁 写锁 升级锁 降级锁 读锁 写锁 锁降级 锁分解
读锁 重构 (s) (s)
HSQLDB 66 494 30 23 10 61 19 109 530 6 39 18
Jenkins 5 200 11 13 0 45 16 19 238 3 14 16
Cassandra 13 158 10 18 3 37 75 39 174 2 24 73
SPECjbb 2005 14 65 36 0 0 75 7 58 129 1 2 7
JGroups 10 102 3 13 3 48 24 28 113 5 33 24
Xalan 3 43 2 8 0 26 19 19 56 2 5 19
Fop 6 15 0 8 1 2 16 9 21 2 0 15
关于重构后程序性能方面,我们对 HSQLDB 和 SPECjbb2005 这两个程序使用不同重构工具重构后,使用 3
种锁的性能进行了对比.HSQLDB 的实验结果如图 10 所示,结果表明,粗粒度的读写锁和邮戳锁在事务率上要
低于使用细粒度读写锁的程序.SPECjbb2005 的实验结果如图 11 所示,由于 JDK 版本原因,Relocker 不能对
SPECjbb2005 进行重构,这里只对比了 CLOCK 和 FLock 的重构结果.可以看出:程序在使用细粒度读写锁时,相
较于使用粗粒度读写锁和邮戳锁的程序,事务率有明显提升.
12000 220000
Relocker
CLOCK 200000 CLOCK
10000 FLock FLock
180000
事务率(txn/sec) 6000 事务吞吐量(Bops) 160000
8000
140000
120000
4000
100000
2000
80000
0 60000
100k 200k 300k 400k 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
事务数 线程数
Fig.10 Performance comparison of the HSQLDB Fig.11 Performance comparison of the SPECjbb2005
benchmark after refactoring benchmark after refactoring
图 10 HSQLDB 重构后的性能比较 图 11 SPECjbb2005 重构后的性能比较
5.3.7 有效性威胁
实验中有几个可能威胁有效性的因素.
1) 由于并发程序执行的不确定性,不排除性能测试实验结果可能存在细微的偏差.为了避免误差,我们
所有实验结果都是在 10 次运行的基础上取平均值得到的;
2) 在实验中,我们采用手工检查的方式对重构后程序的正确性进行验证.手动的检查方式存在着一些不
足之处,可能会出现人为验证不准确等问题.为了减少不准确情况的发生概率,我们选取了两组学生
分别进行两次检查的方式,尽可能避免出现问题;
3) 本实验只选取了 11 个应用程序对 FLock 进行了评估,它们并不能代表所有程序,不能完全证明 FLock
在所有的应用程序中可以成功完成重构.但是我们选取的应用程序涉及数据库、群组通信、物联网
等多个领域,具有很好的代表性.未来的工作中,我们也将使用更多应用程序对 FLock 进行测试.
6 相关工作
本文实现了面向细粒度读写锁的自动重构工具,我们主要关注的相关工作有两个方面:面向锁的优化和自
动化的重构工具.