SMP和AMP不同的特点
随着多核处理器的出现,为了提高整个系统性能,诞生了不同的可部署技术。多处理主要有两种类型:对称多处理(SMP)和非对称多处理(AMP)。
在SMP中,所有处理器或CPU内核都被认为是平等的,可以分享相同的系统资源,例如:操作系统、主存的地址空间、I/O和外部设备等;而AMP中,每个处理器或CPU有它们自己的软件,它们独立于其他处理器或内核来处理应用程序。
AMP的设计优势在于,每个CPU在处理特定的应用程序时,不会被其他CPU的任务打断。正如前面所说,在AMP中每个处理器都有自己单独的内核处理逻辑。这样的设计更适合工业现场的实时性需求。
详细的内容可以看文末最后对SMP和AMP不同架构的讨论。
而我们提出了一种新的解决方案,通过Hypervisor技术对SMP架构的CPU进行资源划分,让其每个分割部分运行独立的操作系统和应用程序,同时保证其不会被其他CPU的任务打断。
在SMP架构上实现多操作系统部署
SMP架构上实现单操作系统——Linux使用多个CPU内核
在SMP中,大多数情况下一个计算系统运行一个单一的操作系统,如Linux。操作系统可以利用多个处理器或CPU内核来运行系统中的各种应用程序。
SMP架构CPU采用共享内存
在SMP中各个CPU通过共享内存空间的方式进行数据交互,所有的处理器都可以平等地访问内存、I/O和外部中断。
SMP架构上实现多操作系统部署——实时Linux使用多个CPU内核
在工业现场上,单个计算系统上部署多个操作系统变得越来越普遍。在使用SMP的管理程序解决方案中,多个不同的操作系统(例如Windows + real-time Linux)可以各自独立地利用一组多个处理器或CPU内核。
Hypervisor技术可以很好的管理这些CPU内核,正如之前所述的SMP的两大特性:多核心处理单任务及共享内存。在工业控制中为了保证实时性,必须确保运行实时任务的CPU不被其他应用占用;必须保证实时任务的内存不被其他应用占用。这些都需要Hypervisor在底层逻辑上将其完全划分开。通过Hypervisor技术,我们可以将专用的CPU和内存分配给实时操作系统。让其他操作系统的应用不能”触碰“这些资源,
相比于直接使用异构的CPU,SMP+Hypervisor的优势还在于可以按需分配整个设备资源,而AMP的异构则是在系统设计之初就固定的了。比如说,我的实际应用需要更强大的非实时应用,需要更多相关资源。相比之下,AMP在异构实现上就有很大的限制,无法按需分配,有时候不得不对应用做减法。而SMP+Hypervisor则可以灵活的倾斜更多资源给非实时应用,而给实时应用的资源可能只需要整个CPU核心的10%。
Hypervisor技术不仅仅可以构建一个实时系统,他还可以构建多个实时系统,只要硬件的资源足够丰富,多个不同的操作系统部署在同一个硬件上面是完全可行的。
SMP和AMP不同架构的讨论
对称多处理(SMP)
SMP通常用于高端计算,这些计算环境需要大量的计算能力去执行应用程序任务和进程,许多多处理系统使用SMP架构。SMP最适用于分时(timesharing)和多线程时间共享系统。分时是指将计算资源同时分配给多个用户。类似地,多线程是中央处理器(CPU)的一个特性,它允许单个进程同时执行多个任务。更具体地说,多线程允许指令的多个线程独立执行,所有线程共享相同的处理资源。分时操作系统也使用SMP。这是因为计算资源可以分配给多个用户,多个进程可以并行运行。SMP支持该进程,SMP旨在在不同的处理单元上运行多个进程。出于同样的原因,SMP也是多线程的。这是因为多线程同时处理多个进程,而SMP在每个处理器之间划分线程。但是,SMP通常不会用于那些未针对多线程编程进行修改的pc或应用程序。应用程序和程序集应该设计成允许多线程。允许在不同的并行处理器上调度线程。
• SMP架构CPU采用共享内存
不对称多处理(AMP)
传统的单处理器系统提供的执行环境与非对称多处理的工作方式非常相似。它提供了一种相对简单的方式来移植代码,并提供了一种控制CPU使用的直接机制。在大多数情况下,你可以使用标准的调试工具和技术。AMP系统可以是同构的(每个CPU运行相同类型和版本的操作系统)或异构的(每个CPU运行不同的操作系统或相同操作系统的不同版本)。此外,AMP最有可能用于不同的CPU架构对特定应用的优化,如数字信号处理器(DSP)和微控制器(MCU)。在AMP系统中,可以在每个处理器或CPU内核上部署不同的操作系统。
如果你的操作系统支持特定的分布式编程模型,则可以充分利用同构环境中的多个cpu。在特定CPU上运行的应用程序将能够与其他CPU上的应用程序和系统服务(例如,协议栈、设备驱动程序等)透明地通信,而不需要传统的处理器间通信所带来的高CPU负载。在异构系统中,必须选择两个共享公共基础资源(最常见的是基于ip的)的操作系统,或者为处理器间的通信实现专有的通信方案。操作系统还应该提供访问共享硬件组件的机制,以帮助避免资源冲突。使用AMP,应用程序使用的共享硬件资源必须在CPU之间分配。外设、物理内存以及中断处理等资源通常是在启动时静态分配的。
动态分配资源会导致CPU之间复杂的协调。在AMP系统中,即使其他CPU空闲,一个进程也总是运行在同一个CPU上。因此,CPU可能会轻负荷或过载。为了解决这个问题,系统可以允许应用程序动态地从一个CPU迁移到另一个CPU。然而,这可能涉及复杂的状态信息检查,如果应用程序在一个CPU上停止,而在另一个CPU上重新启动,可能会中断服务。此外,如果cpu运行不同的操作系统,这样的迁移即使不是不可能,也是非常困难的。
• 使用AMP在不同的cpu上分区内存和I/O