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

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


                 其间并不需要打断任何进程的运行, 也不需要使用                IPI 等机制通知服务端进程, 因此能够规避发起             IPI 进行线程迁
                 移带来的额外开销. 此外, 每次        FlexIPC  的过程中并不会涉及与      IPC  相关的系统调用, 一切均在用户态完成, 这也
                 避免了进入内核带来的额外开销.

                 算法 2. FlexIPC  的实现.
                 1 long flex_ipc_call(ipc_msg_t *ipc_msg)
                 2 {
                 3   ipc_msg->flex_ipc.flex_start = true;
                 4   while (ipc_msg->flex_ipc.flex_finish != true) {
                 5     // spin loop
                 6   }
                 7   ipc_msg->flex_ipc.flex_finish = false;
                 8   return ipc_msg ->flex_ipc.ret;
                 9 }
                 10 void flex_ipc_handler()
                 11 {
                 12   long ret;
                 13   for client in clients {
                 14     ipc_msg = (ipc_msg_t *)(client->server_shm_addr);
                 15     if (ipc_msg->flex_ipc.flex_start == true) {
                 16      ipc_msg->flex_ipc.flex_start = false;
                 17      ret = do_something(ipc_msg);
                 18      ipc_msg->flex_ipc.ret = ret;
                 19      ipc_msg->flex_ipc.flex_finish = true;
                 20     }
                 21   }
                 22 }

                 4   测试与评估

                 4.1   测试环境
                    我们进行了一系列测试以检验我们对              SPARC  架构上微内核    IPC  优化的效果. 测试使用的硬件平台是珠海欧
                 比特公司自研的抗辐照型高性能处理器              SOC S698PM, 该处理器遵循     SPARC V8  标准, 内部集成了    4  个相同的处
                 理器核心, 此外还具有板载        8 MB SRAM  和  256 MB DDR2  内存. S698PM  硬件平台是在航天领域的星载计算机中
                 被实际使用的, 因此在该硬件上的测试结果对于实际应用而言更具可参考性. 由于本工作是针对                               SPARC  架构上
                 的微内核   IPC  进行优化, 而目前支持     SPARC  架构的微内核系统比较少, 所以我们首先将自研微内核                  ChCore 移植
                 到了  SPARC  架构上. ChCore  在其他架构上实现了通用的同步             IPC  机制, 我们针对    SPARC  架构的特性, 对
                 ChCore 上原有的同步    IPC  机制进行了一系列优化工作, 所以我们的测试均在自研微内核                   ChCore 上进行, 主要目
                 的是对比优化前后的微内核          IPC  的性能, 以及分析各优化方法对性能的提升效果.
                    值得注意的是, 由于绝大多数内核上的             IPC  都无法避免需要通信的进程间的上下文切换, 即使能够避免, 也一
                 般是采用了    IPI 等手段通知其他     CPU  核心上正在运行的进程来传递信息, 这就意味着一般情况下, 其他微内核在
                 实现  IPC  的过程中很难同时避免上下文切换和            IPI, 而这两者分别是本文提出的        BankedIPC  以及  FlexIPC  的主要
   468   469   470   471   472   473   474   475   476   477   478