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    相关工作

             本文实现了面向细粒度读写锁的自动重构工具,我们主要关注的相关工作有两个方面:面向锁的优化和自
         动化的重构工具.
   55   56   57   58   59   60   61   62   63   64   65