Page 474 - 《软件学报》2025年第5期
P. 474

2374                                                       软件学报  2025  年第  36  卷第  5  期


                 优化目标. 而   SPARC  架构的寄存器数量较多以及         IPI 性能较差这两个特性是与架构设计相关的, 因此虽然我们目
                 前仅在   ChCore 上进行了测试, 但本文优化       IPC  的方法在其他   SPARC  架构的微内核上也是可行的.

                 4.2   微基准测试
                    在本小节中, 我们希望通过微基准测试回答以下问题.
                    • RQ1: BankedIPC  能对  ChCore 上的单核  IPC  性能带来多少提升?
                    • RQ2: BankedIPC  提升  IPC  性能的原理是什么?
                    • RQ3: 内核采用的寄存器组机制能否对非           IPC  场景带来优化效果? 是否存在局限性?
                    • RQ4: FlexIPC  能对  ChCore 上的跨核  IPC  性能带来多少提升?
                    (1) RQ1: BankedIPC  能对  ChCore 上的单核  IPC  性能带来多少提升?
                    为了说明    BankedIPC  对  ChCore 上  IPC  的优化效果, 我们对优化前后单次     IPC  的平均时延进行了测试. 我们
                 创建了两个测试进程作为         IPC  客户端和服务端, 客户端则创建多个线程同时向服务端发送一定数量的并发                       IPC  请
                 求, 对于每个被测试的      IPC  并发数量, 我们运行了      3  次上述测试并取平均值, 得到每次         IPC  的平均时延. 我们测试
                 了两种不同类型的       IPC, 一种是零数据    IPC, 即客户端不通过     IPC  传输任何数据, 服务端接收到       IPC  请求后也不会
                 进行任何处理, 而是直接返回, 测试这种           IPC  可以使我们重点关注到        IPC  控制流转移的性能; 另一种测试类型是
                 传输少量数据的      IPC, 客户端会传输大小为       20 B  的数据, 服务端会读取这些数据并进行简单处理, 并将处理结果
                 返回, 这一数据量足以容纳于寄存器中, 进行此测试的目的是比较使用寄存器传递数据和共享内存传递数据的性
                 能. 我们在  ChCore 上分别测试了未优化        (Base) 和采用  BankedIPC  优化后的两种  IPC  在上述两种场景下的性能.
                 为了避免跨核     IPC  带来的额外影响, 本测试中每个        IPC  客户端线程和服务端线程都位于同一个处理器核心上. 测
                 试结果如图    7  所示.

                        150                                     150
                                      Base  BankedIPC                         Base  BankedIPC
                        125                                     125
                       单次 IPC 时延 (μs)  75                      单次 IPC 时延 (μs)  75
                                                                100
                        100
                         50
                                                                 50
                         25                                      25
                          0                                       0
                           0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32  0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
                                        IPC 并发数                                 IPC 并发数
                                       (a) 零数据 IPC                             (b) 小数据 IPC
                                                图 7 BankedIPC  时延测试结果

                    从测试结果可以看到, 采用寄存器组设计后, 每个线程仅使用一个寄存器窗口, 且寄存器的保存和恢复是懒惰
                 的, 因此线程上下文切换的开销明显下降, 从而显著提升了                  IPC  性能. 通过图  7(a) 可以看到, 当  IPC  不传递任何数
                 据时, BankedIPC  的性能在  IPC  并发数量较少时略优于       Base, 随着并发数量的增加, Base 上线程切换带来的上下
                 文保存/恢复开销急剧增大, 导致其性能明显下降; 而               BankedIPC  采用了寄存器组设计后的, 上下文切换时需要做
                 的访存操作减少, 即使并发数很多时也没有出现特别严重的性能下降. 相比之下, 如果仅关注控制流转移的性能,
                 BankedIPC  的平均  IPC  时延下降至原来的约     66%. 通过图  7(b) 可以看出使用寄存器传递数据相比使用内存传递
                 数据带来的性能提升. 使用共享内存传递数据时, 需要进行一定的访存操作, 期间还可能触发页错误从而导致进一
                 步的额外开销. 而使用寄存器传递少量数据则可以避免这些问题, 在传递                       20 B  的数据时, 完全使用寄存器传递数
                 据的  BankedIPC  的平均时延下降至原来的       53%.
                    (2) RQ2: BankedIPC  提升  IPC  性能的原理是什么?
                    我们对采用了寄存器组机制的           BankedIPC  的时延分布进行了拆解分析, 并与优化前的时延分布进行对比, 结
   469   470   471   472   473   474   475   476   477   478   479