本文将简单介绍Java 7 SDK里引入的Java套接字直接协议(Sockets Direct Protocol,SDP),这项新技术是个非常激动人心的突破。如果要对InfiniBand的远程直接内存存取(Remote Direct Memory Access,RDMA)进行native访问,SDP就能让超高性能计算(Ultra High Performance Computing,UHPC)社区在这种不常见的场景下使用Java通用的特性和优势。RDMA为低延迟应用提供了一种协议,可以直接访问其他计算机的内存,而不需要操作系统的参与。UHPC社区对低延迟和高吞吐量的要求最为严格,而且不容妥协,UHPC自然就需要使用最好的RDMA。随着Java 7引入SDP,UHPC社区就可以利用Java平台编写能直接利用InfiniBand RDMA功能的应用代码了。
在深入了解新的Java SDP之前,让我们简要回顾一下Java网络编程和套接字API的历史。
Sun Microsystems于1995年推出Java,并宣扬Java能“一次编写,到处运行”,这句口号现在已然广为人知。我们都知道这背后的思想其实很简单:用C++代码编写的应用要在所有环境下构建/部署是极其困难的,追求接近“到处运行”的可移植性就更难了,但现在你可以用一种叫Java的语言编写应用代码,应用可以在虚拟机(并不是底层的操作系统执行环境)上构建/部署。这极大地减少了Java应用程序员对可移植性的关注,而是把可移植性完全交给Java虚拟机(JVM)去处理。JVM承诺:如果你的Java代码可以在针对某个特定底层操作系统的JVM上构建/部署,只要其他操作系统有可用、兼容的JVM,平台就能确保完全相同的代码可以在上面运行。而不需要额外的编译和预处理器宏指令。(有人记得C++里的#ifdef么?JVM可以让应用程序员摆脱这种痛苦。)
这种思想非常有用,得到了应用编程社区的广泛认可。正如我们所知,Java非常迅速地流行起来——以前所未有的速度被全面接受,计算机历史上的很多编程语言平台都没有这么迅速地普及过。
Sun一开始提供的JVM只能运行在三个操作系统上:1、Solaris,2、Linux,3、Windows。微软在1993年发布的Windows就带有WinSOCK协议栈,所以Windows可以做TCP/IP网络编程,而且完全支持API。各种*nix系统从二十世纪七十年代起就一直在支持TCP/IP。微软引入WinSOCK对Java的成形来说绝对必要。没有WinSOCK,就不能发布支持java.net.*和java.io.*这些APIs的Windows VM。没有WinSOCK,Java构建的VM在垄断世界桌面的操作系统上就不具备完整的网络功能了。随着Windows完全支持TCP/IP,运行Java的桌面数量可能增加了上千倍。
事情发生了变化
当然,Java仍然是“一次编写,到处运行”。可移植性仍然是首要任务。但现在用Java 7和SDP,JVM能做更多的事情。可移植性不再是唯一的重点;对JVM来说,满足超高性能用例的需求也是很重要的任务。借助SDP,JVM不需要修改网络、套接字API,就可以直接利用InfiniBand天生的能力。InfiniBand要比以太网快很多。UHPC社区往往会选择InfiniBand作为物理网络层的提供者。
a 7 VM怎么让应用利用InfiniBand原生的功能。
有件有趣的事情要注意(特别是从历史的角度来看):Java决定在两个操作系统上提供SDP支持,而微软Windows并不在其中。Java 7 SDP支持的两个操作系统是Solaris和Linux。Solaris从版本10开始就对SDP提供了规范的支持。只要你有物理InfiniBand网卡,Java 7 SDP就可以立即工作。Linux则通过Open Fabrics Enterprise Distribution(OFED)包支持SDP。要确认Linux版本有没有配置OFED设备驱动器,只需要在安装物理InfiniBand网卡适配器之后简单键入下面的命令:
egrep "^[ \t]+ib" /proc/net/dev
如果命令有输出,就表明你可以在这个操作系统上使用Java 7 SDP。
所有的java.net.*和java.io.*应用代码仍然能在微软Windows上用Java 7 VM运行……但它用不了SDP,运行时的物理层提供者仍然是以太网。即使你在通过WinSOCK Direct子系统提供InfiniBand支持的Windows Server版本上运行,也用不了SDP。所有的内容仍然能在Windows上运行,但速度会比在非Windows(即*nix)上运行得慢。
事情确实发生了变化
现在让我们谈谈Java里面连接操作系统网络协议栈的API。首先,下表显示了网络层标准的开放系统互连(OSI)模型。
从OSI网络层的视角看,Java 7 SDP能让Java应用代码“更接近金属”(物理层)。Java SDP提供了一种直接(SDP里的D)的方式,借助VM就可以连接应用代码和native、物理的InfiniBand。Java 7对SDP的支持不需要应用修改使用java.net.*和java.io.* APIs的代码。此外,只要配置好JVM到InfiniBand操作系统设备和库(即InfiniBand的VERBs层API)的特定连接点,使用java.net.*和java.io.*的应用代码就能绕过传统的网络协议栈“直接”访问InfiniBand(也就是使用Java针对OSI第四层传输层的API,就可以绕过OSI第三层网络层和第二层数据链路层,直接访问OSI第一层物理层)。对性能的影响和收到的回报都非常显著。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, java代码java
, windows
, c++套接字
, 操作系统
, 应用
, 运行
, java网络
, java网络编程
, sdp
, java 7
, java windows api
, ios移植
java 7
java7下载、java 7 32位、java、java7、java 7 64位,以便于您获取更多的相关知识。