什么是SMP

SMP的全称是"对称多处理"(Symmetrical Multi-Processing)技术,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构

它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台电脑不再由单个CPU组成,而同时由多个处理器运行操作系统的单一复本,并共享内存和一台计算机的其他资源。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。所有的处理器都可以平等地访问内存、I/O外部中断。在对称多处理系统中,系统资源被系统中所有CPU共享,工作负载能够均匀地分配到所有可用处理器之上。 我们平时所说的双CPU系统,实际上是对称多处理系统中最常见的一种,通常称为"2路对称多处理",它在普通的商业、家庭应用之中并没有太多实际用途,但在专业制作,如3DMax Studio、Photoshop等软件应用中获得了非常良好的性能表现,是组建廉价工作站的良好伙伴。随着用户应用水平的提高,只使用单个的处理器确实已经很难满足实际应用的需求,因而各服务器厂商纷纷通过采用对称多处理系统来解决这一矛盾。在国内市场上这类机型的处理器一般以4个或8个为主,有少数是16个处理器。但是一般来讲,SMP结构的机器可扩展性较差,很难做到100个以上多处理器,常规的一般是8个到16个,不过这对于多数的用户来说已经够用了。这种机器的好处在于它的使用方式和微机或工作站的区别不大,编程的变化相对来说比较小,原来用微机工作站编写的程序如果要移植到SMP机器上使用,改动起来也相对比较容易。SMP结构的机型可用性比较差。因为4个或8个处理器共享一个操作系统和一个存储器,一旦操作系统出现了问题,整个机器就完全瘫痪掉了。而且由于这个机器的可扩展性较差,不容易保护用户的投资。但是这类机型技术比较成熟,相应的软件也比较多,因此现在国内市场上推出的并行机大量都是这一种。PC服务器中最常见的对称多处理系统通常采用2路、4路、6路或8路处理器。目前UNIX服务器可支持最多64个CPU的系统,如Sun公司的产品Enterprise 10000。SMP系统中最关键的技术是如何更好地解决多个处理器的相互通讯和协调问题。

要组建SMP系统,首先最关键的一点就是需要合适的CPU相配合。我们平时看到的CPU都是单颗使用,所以看不出来它们有什么区别,但是,实际上,支持SMP功能并不是没有条件的,随意拿几块CPU来就可以建立多处理系统那简直是天方夜谈。要实现SMP功能,我们使用的CPU必须具备以下要求:

1、CPU内部必须内置APIC(Advanced Programmable Interrupt Controllers)单元。Intel 多处理规范的核心就是高级可编程中断控制器(Advanced Programmable Interrupt Controllers--APICs)的使用。CPU通过彼此发送中断来完成它们之间的通信。通过给中断附加动作(actions),不同的CPU可以在某种程度上彼此进行控制。每个CPU有自己的APIC(成为那个CPU的本地APIC),并且还有一个I/O APIC来处理由I/O设备引起的中断,这个I/O APIC是安装在主板上的,但每个CPU上的APIC则不可或缺,否则将无法处理多CPU之间的中断协调。

2、相同的产品型号,同样类型的CPU核心。例如,虽然Athlon和Pentium III各自都内置有APIC单元,想要让它们一起建立SMP系统是不可能的,当然,即使是Celeron和Pentium III,那样的可能性也为0,甚至Coppermine核心的Pentium III和Tualatin的Pentium III也不能建立SMP系统--这是因为他们的运行指令不完全相同,APIC中断协调差异也很大。

3、完全相同的运行频率。如果要建立双Pentium III系统,必须两颗866MHz或者两颗1000MHz处理器,不可以用一颗866MHz,另一颗1000MHz来组建,否则系统将无法正常点亮。

4、尽可能保持相同的产品序列编号。即使是同样核心的相同频率处理器,由于生产批次不同也会造成不可思议的问题。两个生产批次的CPU作为双处理器运行的时候,有可能会发生一颗CPU负担过高,而另一颗负担很少的情况,无法发挥最大性能,更糟糕的是可能导致死机,因此,应该尽可能选择同一批生产的处理器来组建SMP系统。

### SMP存储定义 SMP(Symmetric MultiProcessing,对称多处理)是一种用于多处理器系统的计算架构设计模式。在这种架构下,多个处理器共同协作完成任务,并通过共享同一片物理内存来进行通信和数据交换[^2]。 在SMP系统中,所有的CPU都具有平等的地位,能够访问相同的资源池,包括I/O设备、缓存以及主存。这种结构使得操作系统可以灵活调度任何可用的处理器去运行进程或线程,而无需考虑具体哪个核心正在工作。 --- ### SMP存储原理 从硬件层面分析,SMP中的内存屏障机制(如`smp_wmb()` 和 `smp_rmb()`)对于维护一致性和同步至关重要。这些函数通常通过对底层处理器及其关联组件(例如缓存层次结构、总线协议等)的操作来实现。它们确保写入操作按照程序指定顺序提交到全局可见状态,防止因乱序执行引发错误行为。 此外,在软件方面,为了支持高效并发管理,现代OS都会提供锁原语和其他同步工具供开发者调用。这允许应用程序安全地更新共享变量而不破坏整体一致性模型。 --- ### 使用场景 #### 高性能计算环境 由于具备强大的并行能力,因此非常适合应用于科学仿真模拟等领域内的复杂数值运算任务之中。这里需要强调的是,尽管单节点内部实现了高度集成化的互联网络以减少延迟时间,但随着规模扩大仍不可避免面临扩展瓶颈问题[^4]。 #### 数据库管理系统(DBMS) 许多关系型DBMS也采用了类似的思路构建其事务处理引擎部分。比如Oracle RAC(Real Application Clusters),它允许多台服务器实例同时读取同一个磁盘上的相同数据集副本,从而提高吞吐率和服务水平目标(SLO)[^3]. #### 虚拟化平台 像VMware ESXi这样的hypervisor产品利用主机上配置好的NUMA节点布局信息合理分配虚拟机放置位置,进而达到最佳性能表现的目的。同样道理适用于容器编排框架Kubernetes当中node affinity rules的设计理念之上[^1]。 ```python import multiprocessing as mp def worker(shared_memory_block): """ A simple function demonstrating access to shared memory """ with shared_memory_block.get_lock(): value = int.from_bytes(shared_memory_block.buf[:8], 'big') new_value = (value + 1).to_bytes(8,'big') shared_memory_block.buf[:8] = new_value if __name__ == "__main__": shm = mp.shared_memory.SharedMemory(create=True,size=8) p_list=[mp.Process(target=worker,args=(shm,))for _ in range(mp.cpu_count())] for proc in p_list: proc.start() for proc in p_list: proc.join() final_val=int.from_bytes(shm.buf[:8],'big') print(f"After {len(p_list)} increments, the result is:{final_val}") shm.close() shm.unlink() ``` 上述代码片段展示了如何创建一块跨进程可写的共享内存区域,并让不同子进程对其进行原子级别的修改操作演示了典型的SMP编程范式之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值