AMP与逻辑核心原理
一、概述
1.1 什么是AMP?
非对称多处理(Asymmetric Multiprocessing, AMP)是指系统中包含多种不同类型的处理器核心,这些核心可能具有不同的微架构、功耗特性、指令集或专用功能。典型例子包括 ARM big.LITTLE 架构中的大小核、Intel 混合架构的性能核(P-core)与能效核(E-core),以及集成的 GPU、NPU、DSP 等专用加速器。
AMP 系统的核心优势在于通过异构计算实现性能与功耗的平衡:高性能核心处理突发重负载,能效核心处理后台任务,专用加速器卸载特定计算。然而,传统操作系统缺乏对异构资源的统一抽象,导致编程复杂、调度困难、隔离性差,难以充分发挥 AMP 硬件的潜力。
1.2 HIC 逻辑核心的引入
HIC 架构将每个物理核心(包括异构核心)抽象为逻辑核心——一个可被能力系统管理的资源对象。逻辑核心封装了核心的类型、性能系数、功耗系数、缓存拓扑等属性,并以统一的能力接口暴露给上层。开发者可以像申请内存一样申请、持有、使用和释放计算资源,实现真正的“资源即能力”。
逻辑核心不是对物理核心的简单映射,而是一个独立的资源抽象:它代表了对计算时间、执行上下文和硬件上下文的所有权,而不是临时借用。这种设计将 CPU 资源从“调度器管理的共享池”转变为“开发者持有的能力对象”,从根本上解决了传统操作系统中资源不可控、隔离不彻底的问题。
二、设计目标
- 解耦:将软件对计算资源的需求与底层物理核心的细节(数量、拓扑、异构性)彻底分离。上层代码无需感知硬件差异,只需声明需求类型。
- 可控:让开发者真正“拥有”计算单元,能够指定配额、优先级、独占性、迁移策略等属性,实现精确的资源控制。
- 高效:通过轻量级抽象实现接近裸金属的性能,核心切换开销低于 150ns,能力验证开销低于 5ns,确保抽象不成为性能瓶颈。
- 安全:将核心纳入能力系统,所有操作必须经过授权,杜绝资源滥用和恶意抢占。逻辑核心的持有、传递、撤销均由能力系统严格管理。
- 可扩展:支持超配(逻辑核心数可远大于物理核心数)和透明迁移,适应动态负载变化;同时支持未来新增的硬件核心类型,无需改动上层框架。
三、核心机制
3.1 逻辑核心表
Core-0 维护一张全局的逻辑核心映射表,记录每个逻辑核心当前映射到的物理核心、持有者、配额、状态等信息。该表采用 O(1) 访问设计,关键路径可硬件化,查询开销趋近于零。映射表本身受能力保护,只有授权的服务才能修改。
3.2 能力化
每个逻辑核心都是一个能力对象。只有持有对应能力的域才能使用该核心。能力支持以下操作:
· 分配:从空闲逻辑核心池中分配一个或多个核心,返回能力句柄。 · 传递:将逻辑核心的能力传递给另一个域,实现计算资源的委托。 · 派生:从现有逻辑核心派生一个权限子集的能力,例如从独占核心派生一个只读监控能力,用于性能监测而不影响原核心。 · 撤销:回收逻辑核心能力,强制释放核心资源,该核心上的所有线程被挂起或迁移。
3.3 配额与属性
每个逻辑核心可以附带以下属性:
· 配额:保证的最小 CPU 时间比例(如 30%),由 Core-0 调度器硬性保证。配额可以是绝对值(如每 10ms 运行 3ms)或相对值。 · 优先级:实时、普通、后台,用于调度决策。 · 独占性:标记为独占的逻辑核心不允许其他任何任务运行,确保完全隔离。 · 亲和性:倾向的物理核心集合,用于 NUMA 优化或避免迁移开销。 · 迁移策略:允许迁移、禁止迁移、代价提示,系统据此决定是否在核心间迁移逻辑核心。 · 能耗偏好:高性能、平衡、节能,引导系统在异构核心间做出调度选择。 · 类型属性:标记逻辑核心的类型(高性能、能效、GPU 等),用于匹配开发者需求。
3.4 超配
逻辑核心数量可以远超物理核心数。当多个逻辑核心映射到同一物理核心时,系统通过快速分时复用实现并发。调度器为每个逻辑核心分配时间片,切换开销低于 150ns,使得超配成为轻量级任务调度的基础。
3.5 透明迁移
监控服务可根据负载、温度、功耗等指标,将逻辑核心在不同物理核心间迁移。迁移过程对持有者完全透明:逻辑核心的句柄不变,线程继续运行,只有底层映射表被原子更新。同类型核心(如大小核)间的迁移开销低于 500ns,跨类型迁移(如从 CPU 到 GPU)需持有相应能力,通常需要应用显式配合。
四、与传统模型对比
| 概念 | 传统模型 | HIC 逻辑核心 |
|---|---|---|
| 资源视角 | 线程临时借用核心,核心是公共资源 | 开发者持有核心,核心是能力对象 |
| 控制粒度 | 弱,只能通过优先级、亲和性间接建议 | 强,可指定配额、独占性、迁移策略 |
| 调度单位 | 线程,调度器全局管理 | 逻辑核心,线程绑定到核心,调度以核心为单位 |
| 隔离性 | 共享核心,相互干扰,无时间隔离 | 配额或独占保证,时间维度硬隔离 |
| 可观测性 | 系统级统计,难以定位单个任务资源消耗 | 每个逻辑核心独立计数器,精确可审计 |
五、性能指标
· 能力验证开销:<5ns(内联,约 15 条指令) · 逻辑核心分配:<100ns(仅更新映射表) · 线程在核心上切换:<150ns(无需页表切换,仅保存/恢复寄存器) · 透明迁移:<500ns(原子更新映射,线程继续运行)
六、与硬件虚拟化的区别
逻辑核心不是传统的 vCPU(如 KVM 中的 vCPU),它不模拟完整 CPU,只抽象计算资源。因此:
· 无虚拟化层开销,无需硬件虚拟化扩展(VT-x/AMD-V)。 · 切换延迟低一个数量级,适合操作系统内部资源管理。 · 适用于运行原生任务,而非完整客户机操作系统。