1. Arm SCMI共享内存传输机制概述
在现代异构计算系统中,处理器核心、操作系统与固件之间需要高效可靠的通信机制。Arm SCMI(System Control and Management Interface)规范定义了一套标准化的系统控制接口,而共享内存传输(Shared Memory based Transport)则是其核心通信机制之一。这种机制通过物理内存共享实现跨特权级的数据交换,相比传统的寄存器访问或系统调用,具有更高的吞吐量和更低的延迟。
SCMI共享内存传输机制主要由三个关键组件构成:
- 共享内存区域:被通信双方共同映射的物理内存区域,用于存放消息头和有效载荷。其所有权通过状态字(Channel Status)进行管理,包含"空闲"和"忙碌"两种状态。
- 门铃机制(Doorbell):用于通知对方有新消息到达的触发方式,可以是寄存器写入、SMC/HVC指令或硬件中断。
- 完成中断(Completion Interrupt):可选机制,用于异步通知消息处理完成,避免接收方持续轮询。
这种设计特别适合以下场景:
- 操作系统与固件间的电源管理命令(如CPU调频、电压调节)
- 传感器数据采集与配置(如温度监控采样率设置)
- 性能监控计数器(PMC)的配置与读取
- 系统资源分配与管理(如内存分区、IO带宽控制)
关键设计要点:共享内存区域必须配置为Device-nGnRnE或等效的内存类型,禁用CPU缓存以保证双方可见性。在Armv8架构中,通常使用MAIR_ELx寄存器进行配置。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 共享内存通信协议详解
2.1 内存区域布局规范
SCMI规范严格定义了共享内存区域的布局格式,具体结构如下表所示:
| 字段名 | 偏移量 | 长度(字节) | 说明 |
|---|---|---|---|
| Reserved | 0x0 | 4 | 保留区域,必须置零 |
| Channel Status | 0x4 | 4 | 通道状态字,包含通道空闲位和错误标志位 |
| Reserved | 0x8 | 8 | 实现定义区域 |
| Channel Flags | 0x10 | 4 |
