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

苏浩然 等: SPARC  架构下低时延微内核进程间通信设计                                                  2367



                                            150
                                                   内存传参      寄存器传参
                                            125
                                           单次 IPC 时延 (μs)  75
                                            100


                                             50
                                             25
                                              0
                                               0  2  4   6  8  10  12  14  16  18  20
                                                         IPC 传输负载 (Byte)
                                           图 3 IPC  使用寄存器和内存传参的性能比较

                 2.3   跨核  IPC
                    目前具有多核心的处理器被广泛使用, 这要求操作系统针对多核场景进行特殊设计. 但一部分应用程序仅会
                 使用处理器的单个核心, 不会或者不需要使用其他处理器核心. 在运行这类应用程序时, 为了充分发挥多核                                  CPU
                 的优势, 可以将操作系统运行在空闲的            CPU  核心上. 我们可以将这种思想应用在微内核操作系统上, 将用户态的
                 不同系统服务进程运行在空闲核心上, 系统服务和应用程序同时运行在不同的核上, 有助于降低应用程序请求系
                 统服务时的响应时延, 这样普通的用户应用程序就需要发起跨核                     IPC  来请求各种系统服务. 一般而言, 为了保证微
                 内核系统的确定性和可靠性, 跨核           IPC  请求发生时, 操作系统需要触发核间中断           (IPI) 来通知被请求的    CPU  核心.
                 如果不使用    IPI 进行通知, 那么服务端进程响应该          IPC  请求的时延便缺乏了确定性保证, 这也与将系统服务运行
                 在其他核上的目的相悖. 但        SPARC  架构并没有对     IPI 性能进行充分的优化, 如表       2  所示, 在  S698PM  上对  SPARC
                 上  IPI 的性能测试表明, 其单次     IPI 的平均时延为    34 μs, 与在单核上完成一次普通       IPC  的耗时相当, 因此跨核     IPC
                 的性能开销将至少增加一倍, 这会严重影响多核处理器上微内核的性能, 甚至导致使用多核运行程序的性能反而
                 不如单核的情况. 为了避免        IPI 的性能影响跨核     IPC  的性能, 我们可以尝试绕过       IPI 来进行跨核   IPC. FlexSC  [36] 针
                 对多核场景, 提出了“无异常        (exception-less)”的系统调用, 即用户态线程不需要陷入内核, 而是和内核协同通过轮
                 询共享内存的方式, 使运行在其他核心上的内核线程及时处理系统调用请求. 我们借鉴了这一设计思想, 利用                                 IPC
                 客户端和服务端的协同设计, 避免           IPC  请求陷入内核以及触发       IPI, 在不需要陷入内核的条件下实现核间的低时
                 延  IPC, 这样既能利用多核     CPU  带来的优势, 又可以避免影响微内核系统本身的确定性和可靠性.


                                                  表 2 IPI 与  IPC  性能比较

                                                操作                  时延 (μs)
                                               单核IPC                   55
                                                 IPI                   34
                                               跨核IPC                  108


                 3   IPC  优化方法

                    本节介绍本工作对       SPARC  架构上的微内核      IPC  进行优化的方法. 基于在第       2  节中提到的几个研究动机, 我
                 们提出了两种方案优化        SPARC  架构上的微内核      IPC  性能. 首先, 本工作利用了    SPARC  架构独特的寄存器窗口机
                 制, 重新设计了内核对寄存器窗口的管理和分配算法, 主要针对在同一个处理核心上进行                               IPC  的场景, 提出了
                 BankedIPC. 此外, 我们基于用户态轮询的设计思想, 设计实现了             FlexIPC  以优化跨核  IPC  的性能.

                 3.1   BankedIPC
                    当  IPC  客户端线程发起    IPC  请求后, 为了尽可能快地处理此        IPC  请求, 需要直接切换到对应的        IPC  服务端线
   462   463   464   465   466   467   468   469   470   471   472