adding rsockets support into JDK

Lu, Yingqi yingqi.lu at intel.com
Fri Apr 27 15:59:27 UTC 2018


Hi Alan,

Thank you very much for your feedback. I will modify the patch accordingly into version.03. 

Thanks,
Lucy

>-----Original Message-----
>From: Alan Bateman [mailto:Alan.Bateman at oracle.com]
>Sent: Friday, April 27, 2018 5:23 AM
>To: Lu, Yingqi <yingqi.lu at intel.com>; nio-dev at openjdk.java.net
>Cc: Kaczmarek, Eric <eric.kaczmarek at intel.com>; Aundhe, Shirish
><shirish.aundhe at intel.com>; Viswanathan, Sandhya
><sandhya.viswanathan at intel.com>
>Subject: Re: adding rsockets support into JDK
>
>On 24/04/2018 06:18, Lu, Yingqi wrote:
>> Hi All,
>>
>> The version 2 of the patch is available at
>> http://cr.openjdk.java.net/~ylu/8195160.02/
>>
>> In this version, I did following changes:
>>
>> 1. Remove RdmaSocket/RdmaServerSocket. Instead, use
>jdk.net.Sockets.openRdmaSocket and jdk.net.Sockets.openRdmaServerSocket to
>create RDMA based sockets. Internally, I use SocketImplFactory to connect
>Socket/ServerSocket with RdmaSocketImpl.
>>
>> 2. Remove RdmaSocketChannel/RdmaServerSocketChannel. Instead, use
>jdk.net.Sockets.openRdmaSocketChannel and
>jdk.net.Sockets.openRdmaServerSocketChannel to create RDMA based channels.
>>
>> 3. Move all the *impl classes from jdk.net to rdma.ch. rdma.ch only exports to
>java.base.
>>
>> A side note: rSocket does not currently support IPv4-mapped address. Since
>Java uses IPv6 as default whenever it is available, -
>Djava.net.preferIPv4Stack=true is needed for using IPv4 addresses. I think Socket
>Direct Protocol (SDP) has similar issue?
>>
>> Please let me know your feedback and comments. Really appreciate your help!
>I've looked through the current webrev.
>
>At a high-level, adding factory methods to jdk.net.Sockets looks reasonable, as
>does jdk.net.RdmaSocketOptions with the RDMA specific socket options.
>
>I may have missed it, but I don't see how I can obtain a Selector to multiplex
>SocketChannels to RDMA sockets. Are you planning to add a factory method to
>jdk.net.Socket for this? A factory method will work and gives you somewhere to
>specify that it can only be used to multiplex SocketChannels to RDMA sockets.
>
>Using a RdmaSocketImplFactory for the sockets created with classic networking
>seems reasonable. In the prototype you are changing the system-wide
>SocketImplFactory so it won't work when there are several threads creating
>sockets at around the same time. Instead, you'll need to change these to return
>new Socket(impl) { };  That will allow you to keep jdk.net.RdmaSocketImplFactory
>out of the API too.
>
>For the initial version it might better to trim down the number of factory methods.
>You currently have 5 x openRdmaSocket and 4 x openRdmaServerSocket. One of
>each should be okay initially until you are further along.
>
>There are few accidental API additions in the current webrev. It's really important
>that InetAddress doe snot have a public constructor, also the methods changed
>to public in Socket/ServerSocket are (I assume) just temporary.
>
>One thing that we'll have to figure out at some point is testing as the API needs
>special hardware. This leads to a discussion on longer maintenance too.
>
>The addressing issue is awkward. If there is no support for IPv4-mapped
>IPv6 address then it means running with -Djava.net.preferIPv4Stack=true as you
>mention. Yes, it's same issue with the SDP implementation on Linux. The
>DatagramChannel is the only example that comes to mind that has support for
>protocol specific sockets (you can create a DatagramChannel to an IPv4 only
>socket via the API). We may have to consider extending this support to Socket
>and SocketChannel. Most of work would be tests and testing of course. For now,
>requiring IPv4 only mode should be okay.
>
>-Alan



More information about the nio-dev mailing list