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)给出了堆内存
   53   54   55   56   57   58   59   60   61   62   63