基于Linux数据链路层MPI通信机制的设计与实现
扫描二维码
随时随地手机看文章
摘 要: 针对MPI集群通信的特点,通过分析当前网络的通信结构和MPI的点到点通信模式,提出了一种基于数据链路层的集群通信机制,用以减少协议开销和内存拷贝次数,从而提高集群节点间的通信性能,并且通过实验验证了该机制的可行性。
关键词: 内存映射; 数据链路层; 内存拷贝
中图分类号:TP393 文献标识码:A 文章编号:0258-7998(2012)02-0127-04
在集群计算系统中,随着系统规模的增大,通信效率是影响整个系统获得高性能的关键因素之一。而随着局域网传输性能的快速提高,Myrinet、Gigabit Ethernet和Infiniband等千兆位网络设备已被广泛使用,当前影响集群节点间通信性能的瓶颈已经从通信硬件的传送开销转移到了通信处理软件的开销上,所以采用优化的通信协议是降低通信成本、提高结点间通信的有效手段。
在当前的集群通信应用中,普遍采用两类通信结构,即核心级通信和用户级通信。但由于它们设计的初衷并非是针对集群通信,所以并不适合当前集群环境的特点。为此,本文通过分析这两类通信结构的特点,提出了以核心级通信为基础,旁路内核中IP层及以上协议层,实现数据链路层直接与MPI通道接口层通信的新机制,并通过实验验证,为传统集群的升级改造提供一种新的无连接、无差错控制,开销小、延时低的通信机制。
1 基于数据链路层的集群通信结构的提出
目前各种通信协议普遍采用两种通信结构,即核心级通信和用户级通信[1]。
1.1 核心级通信
在核心级通信中,操作系统内核控制着所有消息传递中的发送与接收处理,并且负责它们的缓冲管理和通信协议的实现,设备驱动程序也是通过内核来完成所有的硬件支持与协议软件处理的任务,如图1所示。在通信过程中,系统要经过多次内核态与用户态之间的数据拷贝才能够实现数据的传送。有数据表明[2],一般奔腾处理器的内存拷贝速率平均为70 Mb/s,但是由于操作系统在交换页面时的 I/O 数据传送都是阻塞操作,若出现缺页中断,其时延将会更大,所以频繁的内存拷贝操作的开销将是影响整体性能的瓶颈所在。因此,对于通信效率要求较高的集群计算系统,核心级通信是不适合的。
1.2 用户级通信
在用户级通信中,操作系统内核将网络接口控制器NIC(Network Interface Controller)的寄存器和存储器映射到用户地址空间,允许用户进程旁路操作系统内核从直接访问NIC,直接将数据从用户空间发送到网络中进行传输。通信事件处理的触发采用查询方式而不是中断方式,由于旁路操作系统内核,使得整个通信过程省掉了执行系统调用、用户态与核心态之间的数据拷贝及用户与内核的上下文切换等软件上的开销,进而减少对主机CPU资源的占用,缩短通信操作的关键路径,实现通信与计算的重叠。如图2所示[3]。
但是,采用用户级通信协议时,通信过程中的所有操作均在用户空间中进行,当用户程序出错或有恶意用户进行破坏时,系统就很容易被破坏。这是因为系统数据结构中不仅包含本进程(或并行任务)及其相关信息,同时也包含与本进程无关的其他进程(或并行任务)的相关信息。若某一用户(并行任务)出错或失误,都将会影响到其他用户(并行任务)的执行,因而很难保证系统的安全性和可靠性,也无法保证并行任务间的相互独立性。
1.3 基于数据链路层通信
为了既能保证系统安全、可靠以及并行任务间相互独立,同时又能降低通信成本,本文提出了一种以核心级通信为基础的基于数据链路层的通信结构,即在操作系统内核(以Linux内核为例)中旁路IP层、INET Socke层和BSD Socket层,使得数据链路层直接与应用程序的通道接口层通信。如图3所示。