pho*_*nix 3 java sockets rdma infiniband ofed
我对 JSOR 和 jVerbs 都有基本的了解。
两者都处理 JNI 的限制并使用快速路径来减少延迟。它们都使用用户 Verbs RDMA 接口来避免上下文切换并提供快速路径访问。两者都有零拷贝传输选项。
不同的是,JSOR 仍然使用 Java Socket 接口。jVerbs 提供了一个新界面。jVerbs 也有一种叫做 Stateful Verbs Call 的东西,以避免重复序列化 RDMA 请求,他们说这可以减少延迟。jVerbs 提供了更原生的接口,应用程序可以直接使用这些接口。我阅读了 jVerbs SoCC 2013 论文,其中他们在 jVerbs 之上构建 jverbsRPC 并表明它显着减少了 zookeeper 和 memcache 操作的延迟。
两者的文档表明,它们的性能优于基于 TCP/IP、SDP 和 IPoIB 的常规 Java 套接字。
我没有 JSOR 和 jVerbs 之间的任何性能比较。我认为 jVerbs 可能比 JSOR 表现得更好。但是,使用 JSOR,我不必更改现有代码,因为它仍然使用相同的 Java 套接字接口。我的问题是使用 jVerbs 相对于 JSOR 的性能提升可能是什么。有没有人知道或有处理这两者的经验?如果您有任何比较数据,那就太好了。我找不到任何。
以下是一些使用DiSNI(IBM jVerbs的新开源继承者)和DaRPC(使用 DiSNI 的低延迟 RPC 库)的数字。
这些基准测试已在使用 Mellanox ConnectX-3 网络接口连接的两台主机上执行。
以下是执行基准测试的命令:
(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
Run Code Online (Sandbox Code Playgroud)
客户:
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
Run Code Online (Sandbox Code Playgroud)
(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
Run Code Online (Sandbox Code Playgroud)
客户:
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
Run Code Online (Sandbox Code Playgroud)