adding rsockets support into JDK
Lu, Yingqi
yingqi.lu at intel.com
Fri Apr 27 17:26:29 UTC 2018
Hi Alan,
I have a question regarding to replace "changing system-wide SocketImplFactory" to "returning new Socket(impl)". Is it OK if I change Socket(impl) constructor from protected to public? I need to call it from jdk.net module.
Thanks,
Lucy
>-----Original Message-----
>From: nio-dev [mailto:nio-dev-bounces at openjdk.java.net] On Behalf Of Lu,
>Yingqi
>Sent: Friday, April 27, 2018 8:59 AM
>To: Alan Bateman <Alan.Bateman at oracle.com>; nio-dev at openjdk.java.net
>Cc: Viswanathan, Sandhya <sandhya.viswanathan at intel.com>; Aundhe, Shirish
><shirish.aundhe at intel.com>; Kaczmarek, Eric <eric.kaczmarek at intel.com>
>Subject: RE: adding rsockets support into JDK
>
>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