6.1. SMP对称多核处理器
6.1.1. SMP多核处理器概述
SMP(Symmetric Multi-Processing,对称多处理)是一种紧耦合多处理器架构,核心特征是多个处理器共享内存子系统与总线资源,所有处理器地位平等(无主从之分),可对称访问内存、I/O设备及中断。这种架构通过“共享一切”(Shared Everything)的模式,实现多处理器的协同工作,是服务器、工作站及高性能计算(HPC)领域的经典架构。
6.1.2. SMP的核心特征
SMP的“对称性”体现在三个维度:
处理器对称:所有处理器型号相同、性能一致,无主从区分,均可执行任意任务。
内存对称:所有处理器访问内存的延迟、带宽完全一致(即统一内存访问UMA,Uniform Memory Access),不存在“本地内存”与“远程内存”的差异。
资源访问对称:所有处理器共享I/O设备(如磁盘、网卡)、总线及中断资源,无专属资源分配。
这种对称设计的核心目标是简化编程模型——应用程序无需关心处理器的具体分配,操作系统会自动将任务动态分配到空闲处理器,实现负载均衡。
6.1.3. SMP的技术原理
6.1.3.1. 硬件要求
CPU内置APIC单元:高级可编程中断控制器(APIC)是多处理器通信的基础,用于协调处理器间的中断与任务调度。
相同型号与频率:SMP系统要求所有CPU为同型号、同核心、同运行频率(如双至强866MHz处理器),否则会因指令集或中断协调差异导致系统不稳定。
共享内存与总线:所有处理器通过高速总线(如QPI、HyperTransport)连接至共享内存,内存数据由硬件缓存一致性协议(如MESI)保证一致性。
6.1.3.2. 操作系统支持
SMP需单操作系统实例管理所有处理器(如Linux、Windows Server),操作系统通过分布式调度器实现任务分配:
将进程/线程动态分配到空闲处理器,保证负载均衡;
通过线程亲和性(Thread Affinity)允许开发者指定任务运行在特定处理器,优化性能;
利用全局任务队列,由空闲处理器主动获取任务,实现动态负载调整。
6.1.4. SMP的优缺点
6.1.4.1. 优点
编程模型简单:继承单处理器(UP)的编程模型,多线程程序无需修改即可在SMP系统运行,降低了开发成本。
资源利用率高:共享内存与I/O资源,避免了重复配置,提高了资源使用效率。
负载均衡:操作系统自动分配任务,可有效利用多处理器资源,提升系统吞吐量。
兼容性好:支持绝大多数现有软件,无需额外移植。
6.1.4.2. 缺点
扩展性有限:受共享总线与内存带宽限制,处理器数量通常不超过32个(常规为8-16个),超过后性能提升非线性(如16个处理器时,性能可能仅提升50%)。
总线瓶颈:所有处理器共享总线,当任务需频繁访问内存时,总线会成为性能瓶颈(如数据库事务处理场景)。
可靠性较低:共享操作系统与内存,若操作系统崩溃,整个系统瘫痪。
6.1.5. SMP的应用场景
SMP适用于需要高并行性与负载均衡的场景,典型包括:
服务器与数据库:如Oracle、MySQL等数据库系统,通过SMP实现多线程并行查询,提升单节点处理能力;
高性能计算(HPC):如科学计算、工程仿真,通过多处理器协同加速复杂运算;
工作站:如3D建模(3DMax)、图像处理(Photoshop),通过SMP提升单任务处理速度。
6.1.6. SMP与其他架构的对比
为弥补SMP的扩展性缺陷,衍生出以下架构:
架构 |
核心特征 |
适用场景 |
|---|---|---|
NUMA |
非统一内存访问,处理器分组,每组有本地内存,远程内存访问延迟高 |
大规模服务器(如64+处理器) |
MPP |
大规模并行处理,多节点通过网络连接,每个节点有独立内存与OS |
超大规模计算(如超级计算机) |
AMP |
非对称多处理,每个处理器运行独立OS或任务,主从关系 |
实时性要求高的场景(如工业控制) |
SMP与NUMA的关键区别在于内存访问方式:SMP的所有处理器访问内存延迟一致,而NUMA的本地内存访问延迟远低于远程内存,因此NUMA更适合大规模扩展。
6.1.7. SMP的发展趋势
随着多核技术的普及,SMP正朝着异构多核与低功耗方向演进:
异构多核:将不同类型的处理器(如CPU+GPU、CPU+FPGA)集成在同一芯片,通过SMP架构实现协同工作(如Intel Core i7的CPU+核显);
低功耗设计:通过动态电压与频率调整(DVFS)、**电源门控(Power Gating)**等技术,降低空闲处理器的功耗(如手机SoC中的异步SMP设计);
与CMP结合:将SMP与单芯片多处理器(CMP,如Intel Core 2 Duo)结合,通过片内互连减少处理器间通信延迟,提升性能。
6.1.8. 总结
SMP多核处理器是一种经典的对称多处理架构,通过共享内存与总线实现多处理器的协同工作,适用于需要高并行性与负载均衡的场景。
尽管其扩展性有限,但凭借简单的编程模型与良好的兼容性,仍是服务器、工作站等领域的核心架构之一。未来,随着异构多核与低功耗技术的发展 ,
SMP将继续演化,以适应更复杂的应用需求。
6.2. SMP与LoongArch
LoongArch架构对于多核处理器的实现细节没有明确的规定。对于多核的使用,我们本章节按照3A5000/3A6000处理的实现方式来说明。
但是对于64位架构的处理器来说,需要支持硬件支持下面:
在CSR.ESTAT寄存器中的IS[12],支持核间中断IPI。当来自于其他核的ipi中断时,会将当前处理器核的IPI中断位置起,
等待处理器相应。具体的操作方式和其他普通的异常和中断相同。可查阅前面的章节。在处理器层面,需要有硬件支持Cache一致性,比如3A6000处理器的最后一级(LLC)Cache,也就是共享SCache通过
目录支持 Cache 一致性协议。我们需要具备操作当前处理器核和目标处理器核的中断的能力。 比如每个处理器核都有各自对应的多核中断的寄存器。
IPI_Status: 状态寄存器
IPI_Enable: 使能寄存器
IPI_Set: 置位寄存器
IPI_Clear: 清除寄存器
MailBox0: 缓存寄存器0
MailBox1: 缓存寄存器1
MailBox2: 缓存寄存器2
MailBox3: 缓存寄存器3
访问上述寄存器,在LoongArch中,可根据具体的处理器实现来决定。 通常有两种方式:
使用MMIO的方式,通过使用基址0x1fe00000来操作,具体的各个寄存器的偏移值,可查看相关的手册。
使用IOCSR指令的方式访问。具体的操作方式可查看指令手册和各自处理器手册。