Page 58 - 《软件学报》2021年第12期
P. 58
3722 Journal of Software 软件学报 Vol.32, No.12, December 2021
个事务时,程序重构后使用细粒度读写锁的事务率比重构前使用同步锁的事务率略有提升,但不明显;在处理事
务量达到 200k,300k 和 400k 时,重构后比重构前的程序在事务率上的提升大约有 15%,19%和 22%,提升较为明
显.总的来说,HSQLDB 使用细粒度的读写锁在事务率方面重构后比重构前平均提升了 18%,说明使用细粒度锁
有助于提升 HSQLDB 的性能,而我们设计的工具可以帮助更快地转换为细粒度锁.
对于 Jenkins,我们选取了其中的单元测试程序 UpdateCenterTest,FunctionsTest 和 FilePathTest 进行了测试.
图 6 给出了 3 个单元测试的执行时间,可以看出:单元测试 UpdateCenterTest 在重构前后程序的执行时间基本没
有变化,而 FunctionsTest 在重构后执行时间缩短了 17.3%,FilePathTest 在重构后执行时间缩短了 20.9%.
12000 140
同步锁
细粒度读写锁 120
10000 同步锁
细粒度读写锁
100
事务率(txn/sec) 6000 时间(s) 80
8000
60
4000
2000 40
20
0 0
100k 200k 300k 400k UpdateCenterTest FunctionsTest FilePathTest
事务数 单元测试
Fig.5 Performance comparison of the HSQLDB Fig.6 Performance comparison of the Jenkins
benchmark before and after refactoring benchmark before and after refactoring
图 5 HSQLDB 重构前后的性能比较 图 6 Jenkins 重构前后的性能比较
对于 JGroups,我们选取了测试程序 RoundTrip,RoundTripRpc,UnicastTest 和 UnicastTestRpc 进行测试,这 4
个测试程序都是测试两个群组之间消息的发送与接收能力.实验结果如图 7 所示,其中,横坐标为测试程序,纵坐
标为请求处理率.从结果中可以看出:4 个测试在重构后请求处理率都有所提升,分别提升了 15.5%,7%,5%和 9%.
对于测试程序 Cassandra,我们选取了其中的单元测试程序 BatchTests,SimpleQueryTest 和 ManyRowsTest
进行性能测试,图 8 给出了 3 个单元测试程序重构前后的执行时间.对于单元测试程序 BatchTests,Cassandra 重
构后程序的执行时间与重构前程序的执行时间基本相同;对于 SimpleQueryTest 和 ManyRowsTest 这两个单元
测试程序,执行时间都有不同程度的下降,都较重构前的执行时间大约缩短了 7%.
25000 300
同步锁 同步锁
细粒度读写锁 250
20000 200 细粒度读写锁
请求处理率(reqs/s) 15000 间(s) 执 行 时 150
10000
5000 100
50
0 0
RoundTrip RoundTripRpc UnicastTest UnicastTestRpc BatchTests ManyRowsTest SimpleQueryTest
测试程序 单元测试
Fig.7 Performance comparison of the Jgroups Fig.8 Performance comparison of the Cassandra
benchmark before and after refactoring benchmark before and after refactoring
图 7 JGroups 重构前后的性能比较 图 8 Cassandra 重构前后的性能比较
图 9 给出了 SPECjbb 2005 运行结果,其中,图 9(a)给出了吞吐量随线程数变化的情况,图 9(b)给出了堆内存