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 的主要