我对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。
这些基准测试已在使用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性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33098306/