虚拟机环境下MPI/RDMA库的通信优化

2021-07-08 08:27谢尚威
小型微型计算机系统 2021年7期
关键词:拷贝网络设备高性能

谢尚威,华 蓓

(中国科学技术大学 计算机科学与技术学院,合肥 230027)

1 引 言

高性能计算在科研、工程、金融等许多领域有着广泛的应用.由于超级计算机及定制软件的高昂成本,由廉价服务器构成的计算机集群成为许多企业和组织首选的高性能计算平台.RDMA(Remote Direct Memory Access)是当下高性能计算及分布式系统中应用最广泛的网络通信技术[1],它可将数据从源主机的应用缓存直接传输到目的主机的应用缓存而不需要双方操作系统的参与.RDMA 将传输协议实现在硬件层面上,同时在数据传输路径上绕过操作系统内核,相比于传统的TCP/IP网络,RDMA具有高吞吐、低延迟、低CPU占用的优点[2].RDMA通过专用的RDMA网卡(RNIC)和Verbs接口为应用提供高速通信服务.

近年来,高性能计算正加速向云环境迁移,利用云计算的弹性来适应用户不断变化的计算需求,并节省用户对硬件基础设施的投资[3].虚拟化是云计算的基础,当高性能计算向云端迁移时,如何在虚拟化环境下实现高效的网络通信是需要解决的问题.目前网络I/O设备的虚拟化技术可以分为硬件支持的虚拟化和基于软件的虚拟化两类.硬件支持的虚拟化包括PCI直通和单根虚拟化[4],PCI直通绕过虚拟化平台直接将网卡设备分配给虚拟机使用,相当于虚拟机独占了一个网卡设备;SR-IOV则在PCIe层面将网卡设备虚拟成多个设备接口,从系统设备驱动的角度来看相当于多个网卡设备.硬件支持的虚拟化方法虽然使用方便,虚拟机之间的隔离性也很好,但是在这些硬件虚拟化方法下,虚拟化平台不能对虚拟机中的流量进行诸如流量限速、安全检查等一些必要的流量管理,然而流量管理是很多场景中必不可少的功能,因此目前通过硬件虚拟化实现的网络设备虚拟化的应用场景十分有限.基于软件的虚拟化包括全虚拟化和半虚拟化,全虚拟化使用软件模拟网络设备的IO请求,由于需要对每个IO请求进行模拟,所以其效率较低,但是由于其完整的模拟了一个网络设备,所以其通用性比较好;半虚拟化相当于全虚拟化的进一步优化,相比于完全的模拟一个网络设备,半虚拟化选择设计了一个虚拟机和虚拟化平台之间的IO协议,该协议主要包括两部分,位于客户机操作系统的前端和位于宿主机的后端,由前端和后端共同模拟完成IO请求.半虚拟化技术是一个IO协议,因此灵活性较高,基于该协议可以实现虚拟块设备IO、虚拟网络设备IO等.并且前端和后端之间的通信采用共享内存的方式,所以其也具备不错的性能.半虚拟化是目前云环境主流的网络I/O虚拟化方法[5].

而对于高性能计算中普遍使用的RDMA网络设备来讲,目前成熟的RDMA虚拟化方案仅有SR-IOV方案.如上所说,这种虚拟化方案使用场景有限,共有云环境不适用.VMWare提出的vRDMA[6]方案,可用于云环境,但该方案闭源,且性能也不理想.HyV[7]对RDMA的控制通路采用半虚拟化方法,对数据通路则采用直通的方法来提高虚拟机数据传输速率,然而由于数据通路直通硬件,仍未解决公有云中租户流量隔离等问题.vSocket[6]考虑到公有云中大多数应用采用套接字(socket)通信,提出了连接虚拟化的方法.其基本思想是,后端为前端提供一个虚拟连接而不是一个RDMA虚拟设备,后端为虚拟机中的每一个套接字连接建立一个虚拟连接,每一个虚拟连接映射到底层的一个RDMA连接上,当应用调用套接字收发数据时,虚拟连接接管数据传输过程,在虚拟机和RDMA网卡之间直接传输数据.vSocket实现了平台和RDMA设备及驱动的完全解耦合.

高性能计算任务通常具有数据量大,计算量大的特点,因此目前大多数的高性能计算均采用并行计算的方式来提高计算性能.目前高性能计算中使用比较普遍的并行编程框架是MPI[8](Message Passing Interface)通信库.MPI的基本思想是通过在不同的计算节点之间通过消息传递将数据分配到不同的节点做并行计算,进而达到并行使用计算节点资源的目的,提高了计算的效率.该库规定了基本的点对点通信和群集通信原语用来将数据在多个节点上做不同的运算操作.在实现方式上,MPI通常以第三方库的形式存在,为了提高可用性,MPI目前已经支持如RDMA网络、以太网等主流网络平台.当高性能计算迁移到云环境时,MPI/RDMA的通信性能取决于所采用的RDMA虚拟化技术.从目前已有的RDMA虚拟化方案来看,既能满足云环境要求、又能充分发挥RDMA性能优势的方案只有vSocket,但是注意到为兼容套接字API的语义,vSocket在应用进程与vSocket前端之间传输数据时需要一次数据拷贝.

在要求低延迟的通信中,优化延迟一直是广受关注的课题,通信延迟优化除了可以在网络链路上做传输延迟优化以外,主机侧的数据处理造成的延迟也是不容忽视的一部分,特别是数据拷贝.不少研究工作都是从减少数据拷贝入手来减少网络通信主机侧的延迟[9].MPI目前支持通过socket进行通信,但由于API采用non-block通信,因此上述方案中的vSocket必须通过数据拷贝来确保应用数据能在用户传输函数调用结束后依然可用,满足用户数据传输的需求.然而在MPI中,应用数据在传输函数调用结束后并不能直接回收使用,需要用户显式的调用buffer回收接口,因此MPI不需要采用像vSocket一样通过拷贝应用数据来确保数据被可靠传输.

本文借鉴vSocket的连接虚拟化思想,提出了在虚拟机环境下优化MPI/RDMA数据传输延迟的通信方案VMPI,可满足云环境对流量管理的要求,同时实现了数据路径上的零拷贝传输,进一步降低了MPI通信中端到端的通信延迟.实验表明,VMPI可将MPI的点对点通信延迟减少40%左右,并可降低Graph500的通信时间占比.

2 基础知识

2.1 消息传递接口MPI

MPI是一种基于消息传递的编程接口,该接口目前已有OpenMPI、MVAPICH、IntelMPI等多种实现版本.为兼容不同的底层网络,MPI库在物理网络上实现了一个设备抽象层,用以提供与底层网络无关的统一接口;同时,MPI库针对不同的网络平台实现了不同的通信模块,以提供最佳的通信延迟.设备抽象层上面是一个通道层,不同进程之间的通信抽象为一个通道,消息在通道中传输.在通道层之上提供各种通信函数,如点对点通信、群集通信等.

2.2 半虚拟化与virtio

半虚拟化由于同时具备良好的性能以及能够对虚拟网络流量进行精细的管理,在云计算中被广泛使用.半虚拟化由运行在客户机中的前端和运行在宿主机上的后端驱动组成.前端驱动将Guest OS的I/O请求发送给后端,后端通过物理设备实现I/O操作,并将请求结果通知前端.

由IBM于2008年提出的virtio[10]半虚拟化前后端通信协议已成为I/O设备半虚拟化的应用标准.virtio是对一组通用I/O设备的抽象,包括前端驱动、后端驱动以及用于前后端通信的虚拟队列(virtqueue).通过半虚拟化网络I/O,实现了前后端驱动分离,方便了虚拟机迁移,同时宿主机通过后端驱动可以监管客户机网络流量,也方便实施租户网络隔离、网络安全监控等.

2.3 远程直接内存访问RDMA

RDMA是一种新兴的网络通信技术,它的特点是远程直接内存访问功能.RDMA技术最早出现在高性能计算中的Infiniband网络,用于高性能计算集群内部计算节点的高速互联,这种Infiniband网络性能优良,但网卡和交换机的价格都非常昂贵.后来出现了基于以太网的RDMA技术RoCE,这一技术使得RDMA技术在许多数据中心得到普及.

RDMA通过verbs软件库向应用提供编程接口.Verbs支持两种消息传输模式:单边模式和双边模式.单边模式可以直接对远端内存进行读写等操作,只需发起读写指令一端的CPU参与,不需要远端机器的CPU参与,因而能有效的减少网络IO对CPU资源的消耗,同时也具有很低的延迟和很高的带宽.双边模式包括发送、接收等操作,需要双方的CPU参与,接收端准备好接收数据所需的内存,通过发送端的发送操作将数据写入到接收端提供的的用于接收数据的内存块中来完成一次数据传输.

在使用RDMA进行通信时,应用需要首先通过RNIC对需要发送的数据块进行注册,注册的本质是将该内存块对应虚拟地址与物理地址的映射关系同步给RDMA网络设备,以便RDMA设备能够通过DMA绕过CPU直接读取数据,提高RDMA网络设备的IO效率,同时被注册的内存块也会被设置为不可置换页(不会被操作系统交换到磁盘上),防止页置换引发数据读取错误.可见注册内存块是一个高开销的操作[11].

RDMA的通信模式不同于socket的字节流通信模型,其通信模型是基于消息的传输模型.当应用需要和远端应用通信时,它们之间创建一条逻辑上的消息队列.该消息队列由一个发送队列(SQ)和一个接收队列(RQ)组成的队列对(Queue Pairs,QP),读/写或收/发请求被封装成工作请求项放到相应的队列中.每个队列还关联一个完成队列(CQ),用于通知相应队列中的请求已处理完成[12].

2.4 vSocket

考虑到公有云环境对网络的特殊需要,以及应用对网络的高性能的追求,vSocket提出了一个可行的解决方案.该方案通过传统的socket接口为应用提供网络通信,同时在虚拟化后端利用高性能的RDMA网络设备为应用提供高性能的网络传输服务.该方案的基本思想是网络连接虚拟化,即不再采用半虚拟化的方法对RDMA网络设备进行IO虚拟化,而是通过RDMA连接来模拟传统的socket应用中的TCP连接.一条虚拟连接与一条TCP连接提供数据报文的转发服务,每条虚拟连接都通过一个物理的RDMA连接传输数据.同时为了兼顾公有云环境网络连接的管理需要,vSocket采用了控制路径和数据路径分离的方法,控制路径通过virtio-net半虚拟化框架,通过virtio-net客户机可以在网络创建阶段执行连接控制策略;当需要传输数据时,网络连接被虚拟连接接管,数据传输绕过内核协议栈通过特别设计的virtio消息通道进行数据传输.

在具体实现上,vSocket实现了一个截获模块,虚拟机发出的所有socket函数调用都会被该模块拦截.位于虚拟机机中的前端模块,用于将拦截到的socket请求通过virtio通信框架传输给后端模块.后端模块则负责根据前端发来的控制消息或者数据报文做出相对应的处理,完成一次完整的数据传输操作.

3 VMPI的设计与实现

3.1 VMPI的总体结构

本文提出在虚拟机环境下优化MPI/RDMA传输延迟的通信方案VMPI.VMPI的设计目标是既能够满足云环境对虚拟机网络管控的需求,同时又能提供高性能的网络通信,这与vSocket的设计目标一致.因此,我们借鉴vSocket的系统框架,保留其连接虚拟化、控制路径和数据路径相分离的先进设计,通过改造数据路径来优化对MPI编程接口的支持,为基于MPI的高性能计算提供最佳的通信性能.

在vSocket的系统框架上,VMPI需要做两方面的改造.首先,socket接口与MPI接口差异较大,需要重新设计截获层;其次,要实现数据路径上的零拷贝,这也是VMPI的设计重点.

在数据路径上,应用需要通过verbs接口为待发送的数据提前进行注册,而内存注册会引入系统调用进而带来不必要的延迟.所以RDMA应用通常在程序初始化阶段预先准备一块内存池,对这块内存池做一次性的注册,后续需要传输的数据可以拷贝到这块内存中之后,再进行发送,这样就避免了频繁的内存注册操作.这种方式能在一定程度上解决内存注册所带来的延迟开销,其弊端在于引入了内存拷贝带来的延迟增大,特别是在待传输的数据为比较大的数据块时,拷贝带来的开销就更加显著.考虑到内存注册和内存拷贝这两部分的延迟开销,VMP在数据路径的设计上需要同时权衡这两方面.由于内存注册时间不会随着注册内存块的增大而线性增长,而内存拷贝时间却与内存块大小成线性增长关系.通过以上分析,可以总结出以下规律,小消息的注册开销对通信延迟的影响较大,而大消息的拷贝开销对通信延迟的影响较大.基于这种规律,VMPI选择对不同大小的消息采用不同的处理方法.消息大小小于一定阈值的消息(小消息)先拷贝到预先分配和注册好的通用消息池中,再进行传输.消息大小大于一定阈值的消息(大消息)则采用零拷贝传输,即在需要传输之前进行注册.另外,考虑到部分应用为了优化内存注册所带来的延迟开销通常会在初始化阶段分配好通信需要的缓存区,然后在进行数据传输时会尽量重用这些缓存区,因此VMPI在后端模块中设计了一个注册缓存系统,将完成大消息传输的缓存区的相关地址信息记录在缓存系统中,当该缓存区被用于下一次消息传输时,通过查询注册缓冲中的一些地址信息就可以复用已经注册过的内存,避免了不必要的内存注册开销.

图1是VMPI的总体结构,包括截获层、前端、后端3个部分,前端和后端之间利用virtio框架进行通信.截获层用于拦截与MPI通信相关的函数调用.在控制路径上,截获的MPI初始化连接请求被转换通过基于内核协议栈的virtio-net模块建立的网络连接,同时,VMPI会在前端和后端之间建立一个对应的虚拟连接,虚拟连接并没有实际的网络连接,本质上是用于记录虚拟机中应用网络连接的数据.在前端模块中使用<目的IP地址,目的端口号,源IP地址,源端口号>四元组记录该虚拟连接,后端模块使用上述四元组外加租户IP来标识虚拟连接,添加租户ID是考虑到在公有云环境中同一个宿主机上可能存在IP相同的客户机.因此,为了标识宿主机上的不同虚拟机,后端添加了租户ID字段.在数据路径上,与消息传输相关的函数被转发到前端.前端接收虚拟机需要传输的消息,根据元数据(缓存区地址、消息长度等)中的消息长度确定使用大消息路径还是小消息路径,之后将其元数据通过virtio转发到后端.后端从应用缓存区(大消息)或通用消息池(小消息)中取出消息,通过RDMA连接转发出去.

图1 VMPI总体结构Fig.1 VMPI architecture

3.2 连接建立过程

VMPI的通信连接在逻辑上包括两部分,其一是通过内核协议栈建立的一个基于virtio-net的传统socket连接(控制路径),这条网络连接的作用是为虚拟机或者宿主机能够对虚拟机中的网络连接提供访问控制;其二是为该socket连接构造的虚拟连接.后端针对每一个虚拟连接对象在宿主机中映射到一个RDMA连接,为虚拟连接网络通信服务.

在宿主机中建立RDMA连接时,需要知道两端宿主机的IP地址.因此需要一个机制用来交换通信双方宿主机的IP地址.VMPI采用的具体方案是:当VMPI建立连接时,前端通过virtio通知后端虚拟机请求创建一个网络连接,后端需要建立对应的RDMA连接用来提供流量转发;然而RDMA网络连接的建立需要知道对端的IP地址,后端目前没有这一信息,所以宿主机此时无法立即建立RDMA连接.因此,后端通知前端自己需要知道对端宿主机的IP地址,前端在收到后端的这一请求后,通过之前同对端已经建立好的网络连接请求对端的宿主机IP并通知对端自己所在宿主机的IP地址,在得到另一端宿主机的IP地址后通告给后端;此后后端才可以根据两端宿主机的IP地址建立RDMA连接.具体建立连接的算法如算法1所示.

算法1.VMPI建立连接算法

输入:<源IP地址,源端口号,目的IP地址,目的端口号>,简记为conn;

输出:true:成功;false:失败;

Begin:

Step1.MPI_init(conn);//MPI初始化连接.

Intercept(conn);//截获该调用.

Transfer-front(conn);//转发到前端.

Step2.Table[num++]=conn;//前端记录该连接.

sock=Create_socket(conn);

//通过内核协议栈建立socket连接.

Step3.Get_host_ip(HIP);

//向后端请求获取宿主机IP记为HIP.

Step4.Swap_IP(sock,HIP,tmp_IP);

//通过建立的socket与另一端交换HIP,并

//将远端IP记为tmp_IP.

Step5.Transfer-back(conn,tmp_IP);

//前端将连接信息转发到后端

Step6.rdma_conn=search(tmp_IP)

If(!rdma_conn){

rdma_conn=Create_rdma(tmp_IP);

//检查是否已存在对应的rdma连接,如果没有则重//新建立,并记录为rdma-conn.

If(!result)

Map(conn,rdma_conn);

//将虚拟连接映射到物理RDMA连接上.

}

Step7.Return result;//返回结果.

End

3.3 消息传输过程

由于MPI应用运行在虚拟机OS中,所以MPI应用程序中的消息的地址是虚拟机操作系统中的虚拟地址GVA(guest virtual address).然而后端数据转发进程将缓存区中的数据经过网络设备传输时,需要将其转化为其在后端进程中的虚拟地址HVA(host virtual address),因此VMPI需要维护GVA到HVA的映射关系,这样才能完成地址转换.

VMPI设计了以下机制用来维护GVA到HVA的的映射关系:虚拟化平台通常将虚拟机作为一个单独的进程运行.而虚拟机中运行的进程通过虚拟机OS自身的页表维护GVA到GPA的地址转换关系,这与普通的OS一致,可以将这个映射关系简记为f1(GVA,GPA).另外,虚拟化平台通过扩展页表(EPT)记录虚拟机硬件地址GPA(guest physical address)到宿主机硬件地址HPA(host physical address)的映射关系,简记为f2(GPA,HPA).而在Virtio框架中会维护每个GPA到HVA的映射关系,简记为f3(GPA,HVA).通过上述的3个信息,VMPI可以掌握GVA到HVA的地址映射关系,从而完成MPI应用中的消息缓存区地址(GVA)到后端进程中的虚拟地址(HVA)的转化工作.具体实现时,f1和f2分别由客户机OS、VMM自动完成,不需要干涉,而f3则由VMPI通过第三方库DPDK-vhost实现.

VMPI传输消息的过程如下:

步骤1.截获层将拦截的MPI数据传输请求转发到前端,转发给前端的信息包括数据在客户机中的虚拟地址(GVA)、数据大小(size)和虚拟连接信息(vconn);前端依据客户机中的页表信息,将GVA转换为GPA,将三元组转换为

步骤2.前端将三元组放入virtio发送队列,并根据size选择消息传输路径;如果size小于预先设置的阈值,使用小消息传输路径,如果size大于预先设置的阈值,使用大消息传输路径,之后将三元组放到virtqueue中;

步骤3.后端扫描virtqueue中的三元组,将其中的缓存区GPA地址转换为宿主机HVA地址,生成新的三元组

步骤4.后端根据vconn以及虚拟连接和物理连接之间的映射关系,找到对应的RDMA连接,将缓存区中的内容发送出去.

VMPI采用send、receive接口传输内存地址、内存大小等元数据,采用RDMA write接口传输内存数据.这两个过程存在依赖关系,因为通信的双发只有知道了需要传输的内存信息,才能将需要传输的内存通过RDMA传输出去.VMPI设计了一组协议来协调上述的两个过程进行数据传输.图2是一次数据传输的交互过程:

图2 一次数据传输的交互过程Fig.2 Interactive process of a data transmission

1)接收端通过注册缓存系统准备好接收缓存区后,使用send接口向发送端发送一个srcAvail包,通知发送端接收缓存区已准备完毕.srcAvail中包含接收缓存区地址、接收缓存区的rkey值、虚拟连接的四元组信息以及租户id等信息.

2)发送端使用receive接口收到srcAvail包后,等待对应发送缓存区通过注册缓存系统准备完成后,通过RDMA write来完成数据的传输操作.

3)发送端等待write操作完成后,使用send 接口发送compl包告知接收端传输完成;接收端使用receive接口收到compl包,之后MPI send函数返回.一次数据传输操作完成.

3.4 注册缓存系统

注册缓存系统用于缓存那些在大消息传输时已注册并使用过的缓存区,以便下次可以直接重用,避免频繁进行注册.为向RNIC注册一个缓存区,首先将send、receive等函数中的缓存区虚拟地址(GVA)转换为后端进程地址空间中的地址(HVA),然后后端将这块缓存区向RNIC注册,得到返回的一个rkey,最后将该缓存区的三元组记录到一个数组中,这样就完成了缓存区注册的过程.VMPI对主机上的每一个虚拟机维护一个这样的注册缓存区数组,每当决定对一个消息进行零拷贝传输时,首先检查该消息缓存区是否已在注册缓存区数组中,若存在就直接使用三元组记录中的rkey进行消息传输.然而,随着越来越多的缓存区被注册和缓存,注册缓存系统将出现空间不足.为此,VMPI采用LRU算法实现回收机制,对已注册的部分缓存区解除注册.LRU(Least Recently Used,最近最少使用)缓存算法根据数据最近被访问的情况来进行淘汰数据.

4 实验评估

4.1 实验环境

本节评估VMPI的通信性能.服务器A配有Intel E5-2650 CPU/64GB内存,服务器B配有Intel E5-2630 CPU/32GB内存,两台服务器通过40Gbps RDMA网卡直接相连,网卡型号为Mellanox ConnectX-3 40G QDR infiniband.两台服务器均运行Ubuntu14.04操作系统,verbs库使用OFED-3.4.测试时,两台物理机上各运行一个虚拟机,用于测试的应用程序运行在虚拟机中.本节设计了两组实验,第1组使用微基准测试程序测量VMPI的通信延迟,第2组使用Graph500作为MPI应用,通过对比测试验证VMPI对MPI应用的通信性能是否有优化效果.Graph500是高性能计算领域可信度较高的基准测试程序,该程序的核心部分是图算法中的广度优先搜索算法和单源最短路径算法.

4.2 微基准性能测试

这一部分的实验是VMPI在有拷贝和无拷贝两种机制下的延迟对比实验.第1组实验中采用拷贝机制,第2组实验采用无拷贝机制.测量指标是一次数据传输的往返时间RTT(round trip time).实验中设置消息大小从2B到54KB不等.对于每一种消息长度,利用MPI receive和 MPI send收发消息.对于每一种消息长度,测量1000次RTT,并计算平均RTT值.

两组实验的测试结果如图3所示,横坐标为消息长度,纵坐标为RTT值.从图3中可以看到,当消息长度小于2KB,零拷贝组的RTT值略大,说明这时注册开销大于拷贝开销.随后拷贝组的RTT值开始大于零拷贝组,但是两者之间的差值并不大,说明拷贝开销开始对通信延迟的产生影响.当消息长度大于40KB时,随着消息增大,两者之间的差值也在增大,此时零拷贝组的延迟却并没有大幅增加.可以发现,在大消息传输时,相比于拷贝组,通信延迟的降幅可以达到40%左右.这组实验说明,当传输大消息时,零拷贝具有降低通信延迟的效果.

图3 有拷贝和无拷贝情形下的往返延迟Fig.3 Round trip time with/without data copy

4.3 应用性能测试

本节在3个平台上通过Grapha500进行对比测试实验:1)物理机环境,Graph500应用运行在宿主机中,直接使用RDMA网络设备;2)graph500运行在虚拟机中,虚拟机使用传统的virtio半虚拟化的RDMA网络设备;3)本文提出并实现的VMPI环境,消息的阈值设为40KB.Graph500应用程序运行时包括2个参数,scale值用来表示图的顶点规模,edge factor表示图的边规模.实验时edge factor采用了8和16两个值.Scale采用10,15,20三个值.实验采用交叉组合测的方法,利用perf工具统计MPI应用在一次完整的运行过程中调用MPI接口通信的时间在Graph500整个运行时间中所占的比例,实验结果如图4所示.

图4 graph500的通信时间占比Fig.4 Proportion of communication time on graph500

从图4中的实验结果可以发现,物理机平台下通信时间占比最小,这是因为物理机环境没有引入虚拟化所带来的通信延迟开销.相比于以太网模式的半虚拟化方案,VMPI平台可使Graph500的通信时间占比降低10%~30%.这组实验说明,VMPI可以有效降低MPI应用的通信时间占比,VMPI的方案具有一定的延迟优化效果.

5 总 结

为支持高性能计算向云环境迁移,本文提出了MPI/RDMA库在虚拟机环境下的通信优化方案VMPI,重点解决了数据路径上的零拷贝传输问题.VMPI采用控制路径和数据路径相分离的技术,控制路径满足云环境对虚拟机网络的管控要求,数据路径实现高效率数据传输.为平衡数据拷贝和内存注册的开销,VMPI对小消息采用拷贝传输,对大消息采用零拷贝传输.为分摊内存注册开销,VMPI设计了注册缓存系统来重用已经注册过的缓存区.使用微基准测试程序和Graph500应用基准测试程序的实验表明,VMPI可以有效提高MPI的通信性能.

猜你喜欢
拷贝网络设备高性能
高性能轻集料混凝土运用分析
网络设备的安装与调试课程思政整体设计
高性能混凝土不同配合比下的性能研究
高性能混凝土开裂成因及控制要点
新型“纺布工” 纺就高性能CFM——记国家自然科学基金青年基金获得者王晓旭
文化拷贝应该如何“拷”
优化网络设备维护提高数据通信传输质量
影子与我
漫话拷贝