Files.copy does userspace copies but FileChannel uses sendfile
Martin Buchholz
martinrb at google.com
Wed Oct 12 16:22:03 UTC 2016
sendfile(2) says
sendfile() copies data between one file descriptor and another.
Because this copying is done within the kernel, sendfile() is more
efficient than the combination of read(2) and write(2), which would
require transferring data to and from user space.
The advantage of read/write is portability, but we've already paid the
price and are already using sendfile. The savings with a particular pair
of fds may not be great, but in principle we should always be using
sendfile when we can.
On Tue, Oct 11, 2016 at 10:41 PM, Alan Bateman <Alan.Bateman at oracle.com>
wrote:
> On 12/10/2016 00:30, Max Kanat-Alexander wrote:
>
> :
>
> Should these be merged? Or should the Java-side implementation of
> Files.copy be changed to use FileChannel underneath?
>
>
> It's been a copy while the performance was checked but the last time then
> sendfile was great for file <--> socket but we weren't see any benefit for
> file <--> file. Kernels improve and there are many different file systems
> so it probably should be remeasured. If there are benefits to the
> FileSystemProvider to use sendfile then it could do that.
>
> -Alan
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/nio-dev/attachments/20161012/e40ced7d/attachment.html>
More information about the nio-dev
mailing list