论文部分内容阅读
InfiniBand(IB)是I/O技术领域的一种新型体系结构,提供具有低延迟、高带宽特性的RDMA传输方式,为提高集群通信性能提供了支持。当前在Java应用程序中使用构建于InfiniBand网络之上的TCP/IP通信模拟层(IPoIB、SDP等)性能较差,在通信延迟和通信带宽方面都与使用C语言获得的性能有较大差距,并且带来很大的主机CPU开销,导致InfiniBand网络的通信优势不能充分发挥。研究基于InfiniBand的Java通信层支持,对充分利用InfiniBand网络的RDMA机制,提升Java的I/O性能,满足当前Java服务器集群的通信性能提升需求具有重要意义。
本文研究了设计和实现基于RDMA的Java通信库的3个关键问题:对InfiniBandVerbs API的封装方法、封装中函数参数的传递方法和采用NIO direct buffer实现零拷贝数据通路的方法,这些问题直接影响着InfiniBand网络RDMA优势的发挥。本文总结相关研究,分析了InfiniBand VerbsAPI的函数参数传递特点,同时结合已有对NIO directbuffer的使用和对InfiniBand网络特性的实验评测,探讨了上述问题的解决方法。
首先,在Jdib通信库的初步实现中提出了传地址+传对象的封装方法,对基本的InfiniBand Verbs API函数进行封装,向上层应用提供了基本的RDMA操作接口。之后,对初步实现的通信库进行性能测试发现,当使用传地址加传对象方式通过JNI进行InfiniBand Verbs调用时,对对象内部成员进行操作的JNI函数(getXXXfield和setXXXfield)非常耗时,成为限制通信库性能的瓶颈,导致网络性能无法充分发挥。本文进一步提出了传地址加传对象,传地址加传参数结合使用的方法,避免了JNI对象操作函数的开销,提高通信库的性能;同时,针对JVM buffer和native buffer之间数据拷贝增加数据传输延迟的问题,通过使用direct buffer达到Java应用程序和本地库函数之间的数据共享,对通信库进行进一步改进。
对Jdib通信库进行实验评测表明,改进后的RDMA读操作和RDMA写操作的性能都有了显著提高:封装方式的改进使RDMA读写操作的延迟性能提高3~5us;零拷贝的实现避免了数据量较大时由于数据拷贝导致的网络空闲,缩小了与C测试程序的带宽差距。上述改进使得Jdib通信库的延迟和带宽性能对比现有的TCP/IP模拟层具有显著优势。
本文设计实现的通信库能够为上层Java应用直接使用InfiniBand Verbs提供支持,同时对于构建上层的分布式通信范型,如Java RMI,也提供必要的支持。