RFR: 8276779: (ch) InputStream returned by Channels.newInputStream should have fast path for SelectableChannels [v16]

Lance Andersen lancea at openjdk.java.net
Tue Nov 23 18:45:11 UTC 2021


On Sun, 21 Nov 2021 17:51:22 GMT, Markus KARG <duke at openjdk.java.net> wrote:

>> As proposed in JDK-8265891, this PR provides an implementation for `Channels.newInputStream().transferTo()` which provide superior performance compared to the current implementation. This PR is a spin-off from https://github.com/openjdk/jdk/pull/4263 and deliberately concentrates **only** on `FileChannel`s. Other types of channels will be discussed in future PRs.
>> 
>> * Prevents transfers through the JVM heap as much as possibly by offloading to deeper levels via NIO, hence allowing the operating system to optimize the transfer.
>> 
>> Using JMH I have benchmarked both, the original implementation and this implementation, and (depending on the used hardware and use case) performance change was approx. doubled performance. A rather similar approach in different use casse was recently implemented by https://github.com/openjdk/jdk/pull/5097 which was reported by even provide 5x performance (https://github.com/openjdk/jdk/pull/5097#issuecomment-897271997).
>> 
>> **Update:** This sub-issue *only* defines the work to be done to implement JDK-8265891 *solely* for the particular case of FileChannel.transferTo(WriteableByteChannel), including special treatment of SelectableByteChannel, as the `master` branch already contains code to handle the specific case of FileChannel.transferTo(FileChannel).
>
> Markus KARG has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains five commits:
> 
>  - Closing non-claimed resourced
>    
>    Signed-off-by: Markus Karg <markus at headcrashing.eu>
>  - Closing all claimed resources
>    
>    Signed-off-by: Markus Karg <markus at headcrashing.eu>
>  - Tests IllegalBlockingModeException
>    
>    Signed-off-by: Markus Karg <markus at headcrashing.eu>
>  - JavaDoc proposal by Alan Bateman
>  - 8265891: ChannelInputStream.transferTo() uses FileChannel.transferTo()
>    
>    This sub-issue defines the work to be done to implement JDK-8265891 solely for the particular case of FileChannel.transferTo(WritableByteChannel), including special treatment of SelectableByteChannel.
>    
>    Signed-off-by: Markus Karg <markus at headcrashing.eu>

The current version of this test is missing the previous updates that were pushed to address the 2GB files being left after the test run.  Please update your PR so that reviews are based off of what is in the workspace.

test/jdk/java/nio/channels/Channels/TransferTo.java line 194:

> 192:         try {
> 193:             // testing arbitrary input (here: empty file) to non-blocking selectable output
> 194:             try (FileChannel fc = FileChannel.open(Files.createTempFile(null, null));

As mentioned in a previous PR review, please create the temp file in the test directory and provide a prefix.

-------------

Changes requested by lancea (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/5179


More information about the nio-dev mailing list