You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ratis.apache.org by "Tsz-wo Sze (Jira)" <ji...@apache.org> on 2020/11/24 14:14:00 UTC

[jira] [Updated] (RATIS-1176) Benchmark various ways to stream data

     [ https://issues.apache.org/jira/browse/RATIS-1176?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tsz-wo Sze updated RATIS-1176:
------------------------------
    Description: 
In RATIS-1175, we provided a WritableByteChannel view of DataStreamOutput in order to support FileChannel.transferTo.  However, [~runzhiwang] pointed out that sun.nio.ch.FileChannelImpl.transferTo has three submethods
- transferToDirectly (fastest)
- transferToTrustedChannel
- transferToArbitraryChannel (slowest, requires buffer copying)

Unfortunately, our current implementation only able to use transferToArbitraryChannel.

There are several ideas below to improve the performance.  We should benchmark them.
# Improve the current implementation of WritableByteChannel so that it may be able to use a faster transferTo method.
# Use [FileChannel.map(..)|https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html#map-java.nio.channels.FileChannel.MapMode-long-long-] and pass MappedByteBuffer to our DataStreamOutput.writeAsync method.
# Add a new API
{code}
//DataStreamOutput
 CompletableFuture<DataStreamReply> writeAsync(File);
{code}
Internally, use Netty DefaultFileRegion for zero-copy file transfer:
https://github.com/netty/netty/blob/4.1/example/src/main/java/io/netty/example/file/FileServerHandler.java#L53

  was:
In RATIS-1175, we provided a WritableByteChannel view of DataStreamOutput in order to support FileChannel.transferTo.  However, [~runzhiwang] pointed out that sun.nio.ch.FileChannelImpl.transferTo has three submethods
# transferToDirectly (fastest)
# transferToTrustedChannel
# transferToArbitraryChannel (slowest, requires buffer copying)
Unfortunately, our current implementation only able to use transferToArbitraryChannel.


> Benchmark various ways to stream data
> -------------------------------------
>
>                 Key: RATIS-1176
>                 URL: https://issues.apache.org/jira/browse/RATIS-1176
>             Project: Ratis
>          Issue Type: Sub-task
>          Components: client, Streaming
>            Reporter: Tsz-wo Sze
>            Priority: Major
>
> In RATIS-1175, we provided a WritableByteChannel view of DataStreamOutput in order to support FileChannel.transferTo.  However, [~runzhiwang] pointed out that sun.nio.ch.FileChannelImpl.transferTo has three submethods
> - transferToDirectly (fastest)
> - transferToTrustedChannel
> - transferToArbitraryChannel (slowest, requires buffer copying)
> Unfortunately, our current implementation only able to use transferToArbitraryChannel.
> There are several ideas below to improve the performance.  We should benchmark them.
> # Improve the current implementation of WritableByteChannel so that it may be able to use a faster transferTo method.
> # Use [FileChannel.map(..)|https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html#map-java.nio.channels.FileChannel.MapMode-long-long-] and pass MappedByteBuffer to our DataStreamOutput.writeAsync method.
> # Add a new API
> {code}
> //DataStreamOutput
>  CompletableFuture<DataStreamReply> writeAsync(File);
> {code}
> Internally, use Netty DefaultFileRegion for zero-copy file transfer:
> https://github.com/netty/netty/blob/4.1/example/src/main/java/io/netty/example/file/FileServerHandler.java#L53



--
This message was sent by Atlassian Jira
(v8.3.4#803005)