我对JSOR和jVerbs都有基本的了解。

两者都处理JNI的局限性,并使用快速路径来减少延迟。它们都使用用户Verbs RDMA接口(interface)来避免上下文切换并提供快速的路径访问。两者都有用于零拷贝传输的选项。

不同之处在于JSOR仍使用Java Socket接口(interface)。 jVerbs提供了一个新的界面。 jVerbs还具有一种称为“状态动词调用”的功能,可以避免RDMA请求的重复序列化,他们称这样可以减少延迟。 jVerbs提供了更多 native 界面,应用程序可以直接使用它们。我阅读了jVerbs SoCC 2013论文,他们在jVerbs之上构建了jverbsRPC,并表明它显着减少了zookeeper和memcache操作的延迟。

两者的文档均显示,它们的性能优于基于TCP/IP,SDP和IPoIB的常规Java套接字。

我在JSOR和jVerbs之间没有任何性能比较。
我认为jVerbs的性能可能比JSOR好。但是,使用JSOR,我不必更改现有代码,因为它仍使用相同的Java套接字接口(interface)。我的问题是,相对于JSOR,使用jVerbs可能会提高性能。有谁知道或有处理这两者的经验?如果您有任何比较数据,那就更好了。我找不到任何东西。

最佳答案

以下是使用DiSNI(这是IBM jVerbs的最新开放源代码)的一些数字,以及使用DiSNI的低延迟RPC库DaRPC

  • 64字节的DiSNI RDMA读取延迟低于2微秒
  • 64字节(请求和响应)的DaRPC RDMA发送/接收延迟大约为5微秒
  • Java/DiSNI和C native RDMA之间的差异对于单面操作而言可以忽略不计

  • 这些基准测试已在使用Mellanox ConnectX-3网络接口(interface)连接的两台主机上执行。

    以下是执行基准测试的命令:

    (1)阅读基准

    服务器:
    java -cp disni-1.0-jar-with-dependencies.jar:disni-1.0-tests.jar com.ibm.disni.examples.benchmarks.AppLauncher -t java-rdma-server -a <address> -o read -s 64 -k 100000 -p
    

    客户:
    java -cp disni-1.0-jar-with-dependencies.jar:disni-1.0-tests.jar com.ibm.disni.examples.benchmarks.AppLauncher -t java-rdma-client -a <address> -o read -s 64 -k 100000 -p
    

    (2)发送/接收基准

    服务器:
    java -cp darpc-1.0-jar-with-dependencies.jar:darpc-1.0-tests.jar com.ibm.darpc.examples.server.DaRPCServer -a <address> -d -l 64 -r 64
    

    客户:
    java -cp darpc-1.0-jar-with-dependencies.jar:darpc-1.0-tests.jar com.ibm.darpc.examples.client.DaRPCClient -a <address> -k 1000000 -l 64 -r 64 -b 1
    

    java - RDMA(JSOR)上的Java套接字与Infiniband中的jVerbs性能-LMLPHP

    关于java - RDMA(JSOR)上的Java套接字与Infiniband中的jVerbs性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33098306/

    10-09 20:48