Java 7 引入的 Sockets Direct Protocol (SDP) 使 JVM 能直接利用 InfiniBand 的 RDMA(遠程直接內存訪問) 能力,繞過操作系統 TCP/IP 協議棧,實現超低延遲、高吞吐、零拷貝網絡傳輸。這對超高性能計算(UHPC)領域具有革命性意義。
Java 早期依賴 WinSOCK 實現跨平台網絡,JVM 屏蔽了底層差異。隨著 InfiniBand 普及,UHPC 社區需要繞過內核協議棧直接訪問硬件。Java 7 SDP 在不修改 java.net.*/java.io.* API 的前提下,通過 JVM 配置實現零代碼遷移。
從 OSI 模型視角,SDP 讓 Java 應用直接連接物理層(InfiniBand),跳過網絡層、數據鏈路層。JVM 啟動時加載 SDP 配置,將特定 IP/端口綁定到 InfiniBand 適配器,數據經 VERBS 接口直達對端內存,全程無系統調用、無上下文切換。
接收數據路徑對比:
研究表明 InfiniBand 延遲優於 10G 以太網 6 倍,吞吐量高 3.7 倍。結合零拷貝,CPU 佔用極低。
# 綁定規則:本地 IP 192.0.2.1 所有端口使用 SDP bind 192.0.2.1 * # 連接規則:連接 192.0.2.0/24 網段 1024 以上端口使用 SDP connect 192.0.2.0/24 1024-*
java -Dcom.sun.sdp.conf=sdp.conf -Djava.net.preferIPv4Stack=true Application.class
必須指定 IPv4 棧,因 Solaris/Linux 不支持 IPv6 映射。