2. Qualcomm SA8155/SA8295平台架构与虚拟化硬件基础
SA8155(骁龙8155)与SA8295是Qualcomm面向智能座舱的两代主力SoC。SA8155采用7nm工艺,SA8295升级至5nm,两者在CPU、GPU、NPU、内存带宽和外设规模上逐代增强,但虚拟化硬件基础的设计思路一脉相承:通过ARMv8-A的EL2异常级、GICv3/v4中断虚拟化、SMMU/IOMMU地址翻译以及独立的安全域,把一颗物理SoC切分成多个可隔离运行的虚拟机(VM)。理解这些硬件单元各自"虚拟化什么、怎么虚拟化",是后续Hypervisor配置与性能调优的前提。
CPU集群:EL2与多核分区
SA8155的Kryo 485采用1+3+4三丛集:1个2.84GHz超大核、3个2.42GHz大核、4个1.80GHz小核。SA8295的Kryo 695升级为1+3+4的Cortex-X1/A78/A55组合,主频与缓存进一步增大。对虚拟化而言,关键不是核数,而是每个核都实现了ARMv8-A的四个异常级:EL0用户态、EL1 Guest内核态、EL2 Hypervisor态、EL3安全监控态。Hypervisor运行在EL2,通过HCR_EL2寄存器控制Guest对物理资源的访问,用VTTBR_EL2指向Stage-2翻译表,把Guest物理地址(IPA)映射到真实物理地址(PA)。
CPU分区通常按"核绑定"而非"时间片抢占"来做。例如把CPU0-1划给仪表VM(QNX/RTOS),CPU2-5划给Android IVI,CPU6-7留给Hypervisor自身与安全服务。绑定通过设备树中的cpus节点与Hypervisor的vCPU亲和性配置共同完成。需要注意:小核与大核的算力差异明显,实时性要求高的VM应绑定到大核或超大核,避免调度抖动。
GPU与NPU:分时复用与直通
Adreno GPU(SA8155为Adreno 640,SA8295为Adreno 695)在座舱中同时服务多个VM的渲染需求。GPU虚拟化有两条主流路径:一是直通(Passthrough),把整个GPU分配给一个VM独占,性能最好但无法共享;二是分时复用(Time-slicing),由Hypervisor或GPU驱动在多个VM的渲染上下文之间切换,每个VM看到的是虚拟GPU。实际工程中常采用"一个VM直通+其余VM走虚拟GPU"的混合方案,兼顾性能与共享。
NPU(Hexagon Tensor Accelerator)主要用于DMS/OMS等AI推理。由于NPU上下文切换开销大,通常采用直通给单一VM,或通过Hypervisor提供的共享内存队列把推理请求转发给NPU所在的VM。SA8295的NPU算力显著提升,可支持多路摄像头同时推理,但虚拟化时仍需注意DMA缓冲区的IOMMU映射。
内存与外设:SMMU/IOMMU是隔离核心
内存虚拟化的基础是Stage-2翻译。CPU侧由MMU完成,外设侧则由SMMU(System MMU,即ARM的IOMMU实现)完成。SMMU让每个外设的DMA请求也经过地址翻译,从而把外设限制在所属VM的IPA空间内,防止越权访问。SA8155/SA8295集成了多个SMMU实例,分别挂在不同的总线域上,例如显示、摄像头、PCIe、USB等各有对应的SMMU节点。
外设虚拟化的常见策略分三类:直通(如显示控制器直通给仪表VM)、半虚拟化(如virtio-net/virtio-blk,Guest驱动与后端协商)、模拟(如模拟串口,性能最差但兼容性最好)。选择依据是实时性、吞吐量和驱动成熟度。例如CAN总线通常直通给实时VM,而Wi-Fi/BT走半虚拟化共享给Android。
iommus属性指向正确的SMMU节点。中断虚拟化:GICv3/v4与ITS
中断是虚拟化中延迟最敏感的部分。SA8155/SA8295使用GICv3(SA8295支持GICv4),通过虚拟中断机制把物理中断直接注入Guest,避免Hypervisor在每次中断时陷入。GICv3的List Register(LR)保存待注入的虚拟中断,GICv4进一步支持vLPI(虚拟LPI)和直接注入,减少VM-Exit次数。ITS(Interrupt Translation Service)负责把MSI/MSI-X消息翻译为LPI,外设直通时ITS的配置必须与SMMU的Stream ID一致。
平台差异与工程选型
SA8295相比SA8155在虚拟化硬件上有几处关键增强:一是支持GICv4,虚拟中断注入延迟更低;二是SMMU实例更多、Stream ID位宽更大,可支持更多外设直通;三是内存带宽更高,多VM并发渲染时不易成为瓶颈;四是NPU算力提升,可把更多AI任务从CPU卸载。工程选型时,若座舱只需仪表+IVI双VM,SA8155足够;若需要多屏、多摄像头、多AI任务并发,SA8295的硬件余量更充裕。
实际配置中,一个常见的双VM分区方案如下表所示(示例参数,非实测):
| 资源 | 仪表VM | IVI VM | 虚拟化方式 |
|---|---|---|---|
| CPU核 | CPU0-1(大核) | CPU2-5(大核+小核) | 核绑定 |
| GPU | 虚拟GPU(低优先级) | 直通Adreno | 混合 |
| NPU | — | 直通 | 直通 |
| 显示 | DP0直通 | DP1直通 | 直通 |
| CAN | 直通 | — | 直通 |
| Wi-Fi/BT | — | virtio-net | 半虚拟化 |
| 内存 | 2GB IPA | 6GB IPA | Stage-2 |
配置时需同步检查:每个直通外设的Stream ID是否在SMMU中正确绑定到对应VM的Stage-2表;ITS的Device ID是否与SMMU Stream ID一致;GIC的SPI中断是否通过interrupts属性路由到正确的vCPU。任何一处不一致,都可能导致外设无法工作或跨VM访问。
总结来说,SA8155/SA8295的虚拟化硬件基础可以归纳为四条主线:CPU用EL2+Stage-2做隔离,GPU/NPU用直通或分时复用做共享,SMMU/IOMMU用Stream ID做外设DMA隔离,GICv3/v4用List Register做中断注入。掌握这四条主线的配置节点和常见故障模式,就能在Hypervisor层面对座舱资源进行合理的切分与调优。