非对称多处理(Asymmetric multiprocessing,AMP)
非对称多处理(AMP)给开发者提供了一个与传统单核CPU系统相类似的运行环境,使得开发者已有的一系列经验和知识可以继续加以利用;同时,这也为老程序的移植提供了相当大的便利性,AMP模式的运行机制使得开发者可以直接调控CPU内核运作情况;最重要的是,开发者可以使用标准的调试工具和技术来完成既定的设计。
AMP可以是同构的(homogeneous),也可以是异构的(heterogeneous)。前者是指所有内核运行同一种类型和版本的操作系统,后者则是指每个内核运行不同类型或版本的操作系统(比如一个内核运行QNX Neutrino RT,而另一个内核运行Linux)。
在同构环境中,开发人员只要选择一个可提供分布式编程模式的操作系统,就能最大化地利用多核,允许某个内核上的应用程序透明地与另一个内核上的应用/系统服务(如设备驱动、协议堆栈)进行通信,但不会有传统IPC机制所造成的高CPU占有率。
异构环境的要求有些不同。在这种环境下,开发人员要么执行专有的通信协议,要么选择可供IPC共享相同架构(如基于IP)的两个操作系统。为了避免资源冲突,两个操作系统还需要通过一个标准机制来访问被共享的硬件。
![]() |
图2 使用同构AMP控制输入和输出流量
在如图2所示的同构环境中,一个内核处理来自某硬件接口的输入流量(ingress traffic),而另一个内核处理输出流量(egress traffic)。由于这两种流量彼此独立,因此,两内核之间无须进行通信或共享数据,操作系统也就不用提供内核间的IPC。但是,操作系统必须拥有足够的效率来进行实时流量的管理。
![]() |
图3 使用同构AMP执行分布式控制面板
图3所示的则是另一个同构例子。在这种情况下,两个内核基于分布式控制面板(distributed control plane),每个内核要处理数据面板(data plane)的不同方面。为了正确地控制数据面板,运行在不同内核上的应用程序之间必须相互协调。而为了实行这种协调,操作系统需要提供足够强大的IPC支持,比如拥有共享内存来存储路由信息。
在图4所示的异构环境中。一个内核运行控制面板(control plane),另一个内核处理所有的数据面板流量,并实时监控。在这种环境下,运行在两个内核上的不同操作系统需要提供一致的IPC机制,以允许两个内核可以高效的通信,抑或通过共享数据结构来实现。
![]() |
图4 基于异构AMP的控制面板和数据面板
实际上,在所有上述情况中,操作系统对易用的通信协议的支持都会大大地增强内核间的操作。特别是,基于分布式编程的操作系统还能最大化地利用多核所具有的并行处理机制。
资源分配
使用AMP,应用开发人员就可以决定不同内核上的应用以何种方式共享硬件资源。通常情况下,资源分配是在系统启动时静态地实现的,包括物理内存分配、外设调用和中断处理。当然,系统也可以动态地分配资源,但内核与内核之间的协调也会变得更加复杂。
在AMP系统中,一个进程(process)总是运行在同一个内核中,即使其他内核处于空闲状态。结果会导致一个内核要么没有被充分利用,要么被利用过度。为了解决这个问题,系统会允许应用程序在内核间动态迁移。然而,这样就需要对状系统信息进行相当复杂的检测。或者,当应用在内核间迁移的过程中,可能会导致服务中断。还有,如果核心运行不同的操作系统,这种迁移是相当困难的。
为了支持AMP,多核CPU必须执行一个抽象层(abstraction layer),以使得某种资源看起来是被每个内核所独占。目前一个较好的例子就是基于X86多核CPU的虚拟化概念。
