多核下基于RDMA的高效RPC研究1,2,31,21,2,,李波孟丹霍志刚1(中国科学院计算技术研究所国家智能计算机研究开发中心北京100190)2(中国科学院计算机系统结构重点实验室北京100190)3(中国科学院研究生院北京100049)摘要本文针对目前基于远程直接内存访问(remotedirectmemoryaccess,RDMA)的远程过程调用(remoteprocedurecall,RPC)设计在多核背景下存在的性能和扩展性问题,提出了一种新的基于RDMAWrite的高效RPC设计方法并对网络文件系统(networkfilesystem,NFS)提供了支持。本文重点就设计中的安全性问题和内存管理机制进行了分析,并针对内存有效利用提出了被动和主动两种回收机制。测试结果表明,本文提出的设计能降低RPC延迟13%~20%。对内存文件系统及真实磁盘文件系统的测试表明,本设计能有效提高多核系统中RPC的性能和扩展性。关键词远程直接内存访问(remotedirectmemoryaccess,RDMA),远程过程调用(remoteprocedurecall,RPC),多核,网络文件系统(networkfilesystem,NFS)就设计中的安全性问题和内存管理机制进行了分析,1.引言并针对内存有效利用提出了被动和主动两种回收机制。测试结果表明,本文提出的设计能有效提高RPC随着具备远程直接内存访问(remotedirect及其上层应用的性能和扩展性。memoryaccess,RDMA)特性的高性能网络(如Myrinet、InfiniBand等)的广泛应用,作为网络文件系[1]基于的设计统(networkfilesystem,NFS)底层通信协议的远程过程调用(remoteprocedurecall,RPC)开始将RDMA作在文献[5,6]的RPC设计中,对于NFS客户的文为一种新的通信传输方式。与传统的基于TCP/UDP件写操作,底层RPC采用了RDMARead的方法。即客的RPC设计相比,RDMA具有更高的性能和扩展性。户在RPC请求中包含了待写入内容的地址信息,服务针对RDMA的iSCSI扩展(iSCSIextensionsforRDMA,[2]端收到请求后,主动发起RDMARead操作,将待写iSER)和直接存储文件系统(directaccessfilesystem,[3]入数据从客户内存读到服务端。在该过程中存在两个DAFS)即利用网络的RDMA特性来访问远程文件。[4]方面的并发:Goglin等将NFS的RPC协议替换为MyrinetGM协议[5]客户的一个NFS写文件操作,在RPC层会转变为�并获得了优化的远端文件系统访问。Callaghan等在多个并发的RPC请求(这是由于RPC请求有最大Solaris上提供了基于InfiniBand的RPC的最初设计,该[6,7]长度限制);设计利用了网卡的RDMARead特性。Noronha等提出了RDMARead和RDMAWrite相结合的设计进�当底层的一个RPC请求大小为多个页面时,服务一步提高了基于RDMA的RPC的性能和扩展性。Yu端需要发起多个RDMARead操作(每一个操作读[8]等对广域网下基于RDMA的NFS进行了性能评测,取一个页面)。作者认为基于RDMA的存储系统需要避免基于页面以上两个方面的并发,将使得网卡的RDMA的RDMA操作方式,同时作者指出需要提高RDMARead并发个数的限制在NFS写文件时成为影响性能Read操作的并发性。和扩展性的主要因素。对于多进程/线程、多客户并由于RDMARead操作的特殊性,在操作过程中,发应用,该问题将变得更加突出。发起方和接收方都需要保存操作的相关上下文,而网针对上述问题,在本文的设计中,NFS的写文件卡保存相关上下文个数受限于网卡有限的资源。以目操作将基于RDMAWrite特性来实现,即客户直接将前主流的InfiniBandConnectX网卡为例,其支持应用待写入的数据通过RDMAWrite发送给服务端,从而程序并发的RDMARead操作数为8个。在单核系统避免了由于RDMARead带来的局限。为此,在建立中,这通常不会带来大的影响;而随着多核在服务器连接的过程中,服务端在收到客户的连接请求后,将中的广泛应用,服务端处理并发RPC请求的能力不断注册一段连续的内存区域以使客户能对该段内存执增强,这使得底层的通信网络可能成为系统性能和扩行RDMAWrite操作。该段注册内存的地址和访问权展性的新瓶颈。而RDMARead的并发数的限制是一限将附在连接响应报文中告知客户。个突出的问题。图1描述了基于RDMAWrite的RPC设计方案。针对基于RDMARead的RPC设计在多核背景下在该设计中,当客户从服务端读取文件时,RPC存在的性能和扩展性问题,本文提出了基于RDMA请求中包含了一个数据块列表,该列表中的数据块用Write的高效RPC设计并对NFS提供了支持。本文重点于保存读取的文件数据。当服务端收到该请求并准备
好文件数据时,服务端向客户的每一个数据块发起安全性考虑RDMAWrite操作。最后服务端发送RPC响应给客户,虽然目前基于RDMA的网络设备一般用于专用表示客户的读文件操作结束。该过程与现有设计基本网络,安全性不是一个突出的问题,但是底层RPC设相同,不再赘述。计的一个重要原则是不引入新的安全性问题。这也是当客户执行大文件写操作时,客户首先将待写入本文设计的原则。数据通过RDMAWrite写入服务端的内存(图1步骤1),在基于RDMAWrite的设计中,客户可以直接写然后一个标准的RPC请求将通过一个包含立即数的服务端的内存,这就可能出现恶意用户向服务端的RDMAsend发送给服务端(图1步骤2);其中四字节的RDMA内存写入错误数据而导致文件被篡改的问题。立即数用于告知待写入数据被写入服务端内存的位例如,在图2的可选设计方案中,RPC请求与待写入置及长度。数据一起通过RDMAWrite写给服务端,则恶意用户服务端客户服务端客户可能伪造一个合法的RPC写文件请求(包括RPC请求写文件内容RPC/请求写文件内容①(RW?)和待写入数据),服务端将不能检测到该非法操作,(RWI)RPC请求从而可能导致对NFS文件的恶意篡改。(RSI)②RW?)内存回收(针对以上问题,本文使用了图1所示的设计。在RW?)内存回收(③图1中,RPC请求是通过通道语义(即RDMASend操作)读文件内容读文件内容(RW*)(RW*)发送给服务端,保证了RPC请求本身不会被篡改。如RPC(RSI)响应果恶意用户向RDMA内存写入非法数据,即使该RPC(RSI)响应④RDMAWrite操作在服务端不被察觉,服务端仍可通————?操作执行0/1次*操作执行0/N次过RPC请求中包含的数据完整性检测信息(如在RPCRW(I)——RDMAWrite操作(I表示带立即数)RS(I)——RDMASend操作(I表示带立即数)请求中保存写文件内容的校验和)检测出恶意用户篡图1RPC设计图2可选的RPC设计改数据,从而阻止对NFS文件的篡改。这也是该设计中保留通道语义来发送RPC请求的主要原因。图1中步骤3的“内存回收”数据用于在服务端读此外,网卡对RDMA操作有特定的访存保护机取数据后通知客户回收RDMAWrite的内存。最后,制。以InfiniBand为例,恶意用户要向服务端的RDMA服务端将RPC响应发送给客户(图1步骤4),该响应包内存写入数据,除了需要得到RDMA内存的地址和权也可包含立即数,用于通知客户回收RDMAWrite内限外,还必须与正常用户共享同一个通信连接。这是存。其中,步骤3是可选的,这依赖与所采取的内存因为在InfiniBand中,每一个连接及其对应的RDMA回收机制。这将在节进行介绍。内存都在一个保护域内;InfiniBand的保护域机制保下面介绍设计原则,包括安全性考虑和服务端证了在该保护域外对RDMA内存的访问是非法的。因RDMAWrite内存的管理。此,网卡的访存保护机制减小了恶意用户非法篡改数据的可能性。RDMA网络RPCRPC客户服务端RW②32KB32KBLBG32KB32KB⑥4B32KB32KB⑤RW:长度为4BY4BLBG拷贝主动回收4B④Y①RPC写文件请求大小RNARPCN>4K收到③请求大小RSI请求>4K请求RPC服务RSI⑦N回收bufferRPC响应⑧RW②4KB4KB4KB4KB4KB4KBSBGSBGbufferbuffer空闲已使用当前选择的bufferRW(I)——RDMAWrite操作(I表示带立即数)网络收发操作RS(I)——RDMASend操作(I表示带立即数)图3RDMA内存管理机制中,R=16,S=32KB。因此服务端最多需要为每一个内存管理机制客户注册的RDMA内存大小为512KB。在实际应用服务端分配RDMA内存的大小取决于RPC协议中,服务端可以根据内存使用量及客户的不同服务质的配置。设客户允许发起的最大并发RPC请求数为R,量需求,为不同客户分配不同大小的RDMA内存。每个RPC请求的最大长度为S,则服务端最多需要分为了有效利用服务端的RDMA内存,客户将内存配的RDMA内存大小为RXS。通常情况下,在sunRPC按大小分为两组,小块组(SBG)和大块组(LBG)。SBG
中块大小为4KB,块数为R,用于小块文件写请求;采用的内核版本为,InfiniBand协议LBG中块大小为RPC请求的最大长度S(sunRPC中为栈版本为。32KB),用于大块文件写请求。延迟测试客户对RDMA内存的使用机制如图3所示。初始本小节对内核级的RPC延迟进行测试。本测试模化时,每一个块组中的块均处于空闲状态。客户写文拟上层的写文件方式。测试中,客户发送不同大小的件操作的流程如下:请求(1KB~32KB)给服务端,服务端返回4字节大小的�根据写操作的大小从两个块组中选择一个适当响应。测试重复了1000次,图4给出了对应RPC请求的块,并将其置为已使用状态(图3第1步);的平均延迟。客户发起RDMAWrite操作,将待写入数据写到�80服务端的内存中(图3第2步);70�客户发起RDMAsend操作发送RPC请求,其中6050RDMAsend操作附带的立即数内容为所选择40RDMA内存块的地址和长度(图3第3步);30WW-主动回收客户根据不同的回收机制对RDMA内存块进行�20WW-被动回收RW10回收。0内存块何时可以被回收以再次使用依赖于所采1248121620242832KB大小()用的回收机制。本文设计了两种回收机制:1)被动回收机制图4RPC延迟测试服务端在处理完RPC请求并返回RPC响应时,告知客户对应的内存块可以回收(图3第7、8步)。由于服从测试结果可以看出:务端处理RPC请求的时延,被动回收机制将降低内存基于RDMAWrite的WW设计在文件写延迟上比�的利用率。该机制适用于RDMA内存块足够多的情采用RDMARead的RW设计降低13%~20%;况。图3中的SBG块组即采用被动回收机制。�采用主动回收机制与被动回收机制相比,由于增2)主动回收机制加了一次内存拷贝,延迟略有增加,但与RW设服务端在收到RPC请求后,立即主动通知客户可以回收该块内存。主动回收机制可以提高内存块的利计相比仍然降低了7%~20%的延迟。用率,但是需要服务端首先拷贝待写入数据(图3第4以上的测试结果验证了WW设计的写文件性能步)以避免后续的写请求在该请求未被及时处理前改比RW设计好。这得益于RDMAWrite的性能优于写了数据。客户在连接建立过程中注册一段回收通知RDMARead。区域(RNA)并告知服务端,服务端通过内存文件系统测试将待回收的内存信息写入RNA(图3第5步)。客户则在下面对NFS的写文件性能进行测试。服务端的后下一个RPC请求中,检查RNA区域是否有待回收的内端文件系统为内存文件系统,这能更好的验证RPC设存(图3第6步)。主动回收机制适用于RDMA内存块较计对NFS性能的影响。图5给出了不同并发进程数时少的情况。图3中的LBG块组采用主动回收机制。IOzone的写带宽。测试中使用直接IO的方式。在直接两种回收机制各有优缺点,本文将在下一节对两IO方式下,底层的RPC使用异步机制,所以当文件记种机制的性能进行比较。录大小大于最大RPC请求大小时,将会有多个RPC请需要说明的是,当两个块组的所有块均被使用或求同时被触发。在该测试中,RDMA内存足够大,因没有适当大小的块时,该设计可回退到文献[6]中基于此使用被动回收机制。测试文件大小为128MB。RDMARead的方式。IOzone采用不同的写文件记录大小(128KB、512KB及1MB等)时得到了相似的测试结果,因此图5仅给出3.性能评价了记录大小为1MB的情况。700为了对基于RDMAWrite的RPC设计的性能进行RWWW600评估,本文对文献[6]中基于InfiniBand的sunRPC实现500进行了修改,并对上层的NFSv3提供支持。由于文献400[6]的设计基于RDMARead和RDMAWrite,下面用300200“RW”来标识。本文的设计则使用“WW”标识。100测试平台为曙光5000A集群系统中的9个刀片服0务器。每一个刀片配置为4个四核AMD1248进程数Barcelona处理器(共16核),64GB内存。各刀片采用的InfiniBand网卡为MellanoxConnectXDDRHCA图5内存文件系统的IOzone写文件带宽MT25418;网卡之间通过24端口的MT47396Infiniscale-III交换机相连。带宽(MB/s)延迟()μs
从图5的结果可以看出,基于RDMAWrite的设计真实磁盘测试在所有的测试中都优于RW设计。随着并发进程数的本节首先测试单客户-多进程时真实磁盘文件系增加,性能的提升更加明显(在单进程时写带宽提高统的性能,然后测试多客户时的性能。测试中,RDMA11%,2个进程时为20%,4个进程时为37%,8个进程内存足够大,因此采用被动回收机制。服务端后端文时为38%)。这表明本文的设计在并发应用中具有更好件系统为ext3。测试文件大小为1GB,记录大小为的扩展性。1MB。从测试结果还可以看出,在并发进程数大于2时,图7显示了单客户-多进程的IOzone写文件带宽RW设计的性能几乎没有提高,这说明该设计中使用及客户端的CPU使用率。从图中可以看出,WW设计的RDMARead在并发文件写操作中成为了性能和扩的写带宽性能比RW高,且未增加客户端的CPU利用展性的瓶颈。一方面,RDMARead的性能不及RDMA率。当并发进程数大于3时,WW设计能提高约Write;另一方面,在并发文件写情况下,基于RDMA50MB/s(13%)的写带宽。Read的性能受限于网卡允许同时提交的RDMARead带宽-RW带宽-WWCPU%-RWCPU%-WW请求的个数,从而使得性能受到限制。与之相反,基400100于RDMAWrite的设计不存在以上局限,因此能获得80300更好的性能和扩展性。内存回收机制评估1002000本小节评测不同的内存回收机制对性能的影响。12345678测试中,服务端的后端文件系统为真实磁盘文件系统进程数ext3,文件大小为128MB,记录大小为1MB,并发进程数为4。图7多进程IOzone写文件带宽带宽-被动回收带宽-主动回收RWWWU-被动回收U-主动回收600LBGLBG3701205003601004003508034030060330200403202010031030000124812162345678LBG块数并发客户数图8多客户IOzone写文件带宽图6内存回收机制对性能的影响图8给出了多客户的IOzone写带宽。测试中,多个为了验证不同回收机制对性能的影响,定义NREQ客户同时启动测试,每个客户启动一个进程。将各个客表示测试中RPC写文件请求的个数,N表示使用W户的写带宽相加,得到了图8中的写带宽。从图中可以RDMAWrite实现底层RPC写文件请求的个数。由于看出,WW设计能提高10%~22%的写带宽。RW设计最使用RDMAWrite即表示使用了RDMA内存,因此可多能得到480MB/s的峰值带宽,而WW设计可达到以得出RDMA内存的利用率(用表示)为:ULBG540MB/s。U=(N/N)X100%LBGWREQ图6给出了在不同LBG内存块数取值情况下,使4.结论用不同内存回收机制的IOzone写文件带宽和RDMA内存利用率。从测试结果可以看出:本文针对目前基于RDMA的RPC设计在多核系�写文件带宽随着LBG内存块数的增加而增加;统中的性能局限,提出了新的设计方案——基于�在LBG内存块数小于16时,LBG内存块数越小,RDMAWrite的RPC设计,并在InfiniBand网络环境下主动回收机制的效果越明显;当内存块数为1时,对NFS提供了支持。测试表明,新的设计能降低内核主动回收机制使U提高了约32%;当内存块数LBG级RPC延迟13%~20%。当使用内存文件系统时,写文为12时,U提高了约6%;LBG件带宽在多进程应用中提高30%以上。使用主动回收�当LBG内存块数足够多(等于16)时,与被动回收机制,最多能提高32%的RDMA内存利用率从而提高机制相比,由于主动回收机制需要额外的内存拷性能。在真实磁盘文件系统的测试中,写带宽在多进贝,所以性能略有降低。程时提高约13%,在多客户时提高。测试结10%~22%因此,当RDMA内存足够大时,应选择被动回收果说明,本文提出的基于RDMAWrite的RPC设计能机制;反之,应选择主动回收机制。有效避免RDMARead在多核系统下的性能和扩展性瓶颈,因此具有更高的性能和扩展性。带宽(MB/s)U (%)LBG带宽(MB/s)带宽(MB/s)CPU利用率(%)
InternationalParallelandDistributedProcessing本文提出的设计方法可应用到基于RPC的应用Symposium’04,SantaFe,NewMexico,USA,2004.中,如NFS、并行NFS及Lustre文件系统等,以提高185-192分布式存储的性能和扩展性。[5],-Raj,,:ProceedingsoftheACM参考文献SIGCOMMworkshoponNetwork-I/Oconvergence:Experience,Lessons,:ACM[1]:Design,Press,,:Distributed[6]RanjitNoronha,LeiChai,ThomasTalpey,:,ComputerSocietyPress,LosAlamos,CA,USA,:-316InternationalConferenceonParallelProcessing,[2],,,,China,-56ExtensionsforRDMA.[7]RanjitNoronha,LeiChai,SpencerShepler,://