Project

General

Profile

Feature #15006

[PATCH] io.c: use copy_file_range with every types of files

Added by byroot (Jean Boussier) over 2 years ago. Updated over 2 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:88528]

Description

Ref: https://bugs.ruby-lang.org/issues/13867

IO.copy_stream only attempt to use copy_file_range if the source is a regular file.

However from my understanding, contrary to sendfile and splice, copy_file_range has no file type restriction, it should be able to copy from and to sockets and pipes just fine.

It does have very optimized paths for regular files on specific file systems, but for other fd types it will fallback to do the copy using the page cache:

https://lwn.net/Articles/659523/

If the function is absent or returns failure, the kernel will, if the COPY_FR_COPY flag is set, fall back to copying through the page cache.

So if it's available, it's preferable to nogvl_copy_stream_read_write.

GitHub PR: https://github.com/ruby/ruby/pull/1932


Files

copy-file-range.patch (1.56 KB) copy-file-range.patch byroot (Jean Boussier), 08/18/2018 03:32 AM

Also available in: Atom PDF