微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Linux数据链路层的MPI集群通信机制的设计与实现

基于Linux数据链路层的MPI集群通信机制的设计与实现

时间:08-17 来源:3721RD 点击:

3 基于数据链路层的MPI通信机制的设计与实现

若要实现本文所提出的基于数据链路层的集群通信机制,则需要开发一个中间件DLMC(Data_link Layer MPI Communication)用于提供双方进行通信的底层交换协议、数据包校验、用户空间与内核空间的数据交换和重传机制等。这里需要注意的问题有:

(1)编译方式

对于Linux内核编译分为直接编译进内核和通过模块编译加载进内核。本系统采用模块加载的方式进行编译,其理由是由于系统是在传统Linux网络下进行的修改,只有MPI计算才会用到此中间件,而对于计算之外的部分仍然要依靠传统的TCP/IP。例如计算前期的准备工作,虽然模块加载比直接编译的效率低,但它可以随意动态加载和卸载,这样不仅灵活,而且有利于开发、调试等工作。

(2)用户空间和内核空间之间的数据交换

基于数据链路层的通信进程是在内核空间运行的,而MPI进程是在用户空间进行的,所以需要在用户空间和内核空间进行通信。通过利用Linux内核机制,在用户空间缓存页面以及物理页面之间建立映射关系,将物理内存映射到进程的地址空间,从而达到直接内存访问的目的。

在Linux中,对于高端物理内存(896 MB之后),并没有与内核地址空间建立对应的关系(即虚拟地址=物理地址+PAGE_OFFSET),所以不能使用诸如get_free_pages()函数进行内存分配,而必须使用alloc_pages()来得到struct *page结构,然后将其映射到内核地址空间,但此时映射后的地址并非和物理地址相差PAGE_OFFSET[5]。为实现内存映射技术,其具体使用方法是:使用alloc_pages()在高端存储器区得到struct *page结构,然后调用kmap(struct *page)在内核地址空间PAGE_OFFSET+896M之后的地址空间中建立永久映射。DLMC首先让内核得到用户空间中发送缓冲区的页信息,再将其映射到内核地址空间,并且返回内核虚拟地址,以供DLMC直接将发送缓冲区中的数据传递到数据链路层进行发送,这样就完成了用户地址空间到内核地址空间的映射。

(3)校验与重传机制

由于数据链路层的传输是一种不可靠的网络传输方式,涉及到对传输数据进行数据校验重传等工作。考虑到局域网或者机对机传输的稳定性和可靠性,系统校验方式使用简单的数据校验和,重传机制使用选择重传ARQ方案。当出现差错必须重传时,不必重复传送已经正确到达接收端的数据帧,而只重传出错的数据帧或计时器超时的数据帧,以避免网络资源的浪费。

(4)中断机制

由于本系统改变了TCP/IP的传输机制,所以需要对发出的数据包进行协议标识。系统在初始化阶段,调用内核的dev_add_pack()函数向内核注册了标识为Ox080A的网络数据处理函数。在发送数据包时,系统先通过kmap()函数将MPI的发送缓冲区sendbuff映射到内核映射缓冲区sysbuff,以软中断的方式通知系统,申请分配一个新的SKB来存储sysbuff里的数据包,调用dev_queue_xmit函数,使数据包向下层传递,并清空sysbuff,释放SKB。在接收端需要向内核注册相应的硬件中断处理函数,在接收到数据后唤醒上层的处理函数,并在netif_receive_skb函数(net/core/dev.c)中屏蔽将SKB包向上层传递的语句,改为将SKB里的数据以MPI数据包格式通过copy_to_user函数拷贝到MPI的接收缓冲区recvbuff中,完成数据的接收,其传输过程如图4所示。
\

4 实验结果与分析

4.1 实验结果和方法

本实验环境是一个4节点的Beowulf集群系统,每个节点包含一个PIV处理器和2 GB内存,操作系统采用Redhat Linux Enterprise 5,并行集群软件为OPEN MPI 1.3。由于条件所限,加之实验规模较小,本实验采用MPI自带的函数MPI_Wtime()来采集MPI计算的开始时间和结束时间,取二者的时间差作为程序的运行时间并对其进行比较和分析。

由于本实验的目的是要测试基于数据链路层的通信机制的可行性,而该通信机制是在TCP/IP协议基础之上构建的,所以本实验对象将以单机系统、基于TCP/IP的MPI集群和基于DLMC的MPI集群作为参照平台进行测试。在实验用例设计上,考虑到两种MPI集群的通信机制中的传输路径不同,所以采用如下两种测试方案:

(1)计算圆周率,主要测试系统的数学函数浮点计算性能,以点对点短消息传输为主;

(2)计算求解三对角方程组,主要测试通信和计算的平衡,以点对点长消息传输为主。

4.2 性能分析

(1)计算圆周率,如表1所示。
\
测试结果表明,在精度值设为10-8,精确值比较大时,基于TCP/IP的集群(4个进程)的运行时间是19.540 237 s,单机系统(单进程)运行时间是84.798 166 s,并行运算效果明显。在精度值设为10-4,精确值比较小时,基于TCP/IP的集群(4个进程)的运行时间是0.026 346 s,单机系统(单进程)运行时间是0.013 742 s,这是由于并行运算过程中,参与运算的机器需要通过网络传递消息,若计算量规模不大,则在网络传输上花费的时间会比较多,所以反不如单机的运行速度快。从基于DLMC的集群与基于TCP/IP的集群运行结果对比看,在精度值较大时,前者略微快于后者,而在精度值较小时,后者略快于前者,这主要是因为基于TCP/IP的MPI集群在发送和接收的整个过程中,需要2次数据拷贝,即发送缓冲区到内核的拷贝和内核到接收缓冲区的拷贝,同时还有经过各协议层的开销。而基于DLMC的MPI集群在整个的传输过程中,通过使用内存映射,只需要1次数据拷贝,同时旁路IP层及以上各协议层,在这种以短消息传输为主的测试中使得DLMC集群不能发挥其在网络传输上的优势,所以在精度值较大时,二者相差无几;在精度值较小时,反而基于TCP/IP的集群更快一些,这是因为内存映射和内核操作所引入的开销大于1次内存拷贝开销而造成性能的下降。

(2)计算求解三对角方程组,如表2所示。

由测试结果表明,在传输消息较小时,基于DLMC的MPI集群花费的时间略微小于基于TCP/IP的MPI集群,这说明此时基于内存映射和内核调用等操作的开销要高于两次数据拷贝的开销,造成网络延迟略高。但随着传输消息规模的增大,特别是消息大小超过1 MB时,基于内存映射和数据链路层协议的DLMC相对于具有2次内存拷贝的多协议机制的网络延时要小得多,这样使得系统的整体运行时间明显低于传统的TCP/IP集群。

由上分析可知,基于Linux数据链路层的集群通信机制是可行的。在该机制下构建的MPI集群系统完成了无IP条件下的数据传输,并且支持多用户调用,在传输过程中减少了协议开销、和内存拷贝次数,相比于TCP/IP传输有一定提高。但是基于数据链路层协议的特点,该机制只能在局域网范围内运行,所以集群节点数量或规模会受到一定的限制,只能适合中小集群系统的应用。由于实验条件的有限,对集群通信系统未能充分验证,希望在今后的研发工作中能够进一步加强。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top