<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>http://bogomips.org/ruby_io_splice/NEWS.atom.xml</id>
<title>io_splice news</title>
<subtitle>zero-copy pipe I/O for Linux and Ruby</subtitle>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice/NEWS.html"/>
<updated>2011-05-18T00:19:01Z</updated>
<entry>
<title>io_splice 4.1.1 - workaround socket -&gt; pipe issues</title>
<updated>2011-05-18T00:19:01Z</updated>
<published>2011-05-18T00:19:01Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v4.1.1"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v4.1.1</id>
<content type="text">IO::Splice.copy_stream now uses SPLICE_F_NONBLOCK whenever the
destination is a pipe.  Our documentation is also updated to
reflect the issue of splicing from sockets into pipes.

ref: http://lkml.org/lkml/2009/1/13/478</content>
<content type="xhtml">
<pre>IO::Splice.copy_stream now uses SPLICE_F_NONBLOCK whenever the
destination is a pipe.  Our documentation is also updated to
reflect the issue of splicing from sockets into pipes.

ref: http://lkml.org/lkml/2009/1/13/478
</pre>
</content>
</entry>
<entry>
<title>io_splice 4.1.0 - copy_stream enhancement for 1.9</title>
<updated>2011-05-16T16:53:55Z</updated>
<published>2011-05-16T16:53:55Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v4.1.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v4.1.0</id>
<content type="text">IO::Splice.copy_stream coerces based on the availability of
the #to_path method in source and destination arguments.

This is to be compatible with IO.copy_stream and also
Rack::File since this may be used in web servers.

This is NOT visible with Ruby 1.8 since File.open
doesn't coerce with #to_path on the given object.</content>
<content type="xhtml">
<pre>IO::Splice.copy_stream coerces based on the availability of
the #to_path method in source and destination arguments.

This is to be compatible with IO.copy_stream and also
Rack::File since this may be used in web servers.

This is NOT visible with Ruby 1.8 since File.open
doesn't coerce with #to_path on the given object.
</pre>
</content>
</entry>
<entry>
<title>io_splice 4.0.0 - easier to use!</title>
<updated>2011-05-13T02:40:16Z</updated>
<published>2011-05-13T02:40:16Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v4.0.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v4.0.0</id>
<content type="text">Methods now automatically retry on EINTR after checking
IO#closed? and executing interrupts.

There is a new IO::Splice::WAITALL flag (implemented in
userspace) which may be used to cause IO.splice and IO.tee
to retry (while the GVL is released) until the operation
is complete.

IO::Splice.copy_stream now works correctly for large copies
if source offset is specified.

MRI 1.8 is only weakly supported now, MRI 1.9 is the
preferred platform though Rubinius appears to work, too.</content>
<content type="xhtml">
<pre>Methods now automatically retry on EINTR after checking
IO#closed? and executing interrupts.

There is a new IO::Splice::WAITALL flag (implemented in
userspace) which may be used to cause IO.splice and IO.tee
to retry (while the GVL is released) until the operation
is complete.

IO::Splice.copy_stream now works correctly for large copies
if source offset is specified.

MRI 1.8 is only weakly supported now, MRI 1.9 is the
preferred platform though Rubinius appears to work, too.
</pre>
</content>
</entry>
<entry>
<title>io_splice 3.1.0 - IO::Splice.copy_stream improvement</title>
<updated>2011-05-01T21:17:18Z</updated>
<published>2011-05-01T21:17:18Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v3.1.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v3.1.0</id>
<content type="text">IO::Splice.copy_stream no longer modifies the actual file offset
of the given source file (if it's a regular file).  This follows
IO.copy_stream and IO#sendfile semantics, allowing multiple
threads/processes to simultaneously stream a single regular file
descriptor to multiple sockets/pipes.</content>
<content type="xhtml">
<pre>IO::Splice.copy_stream no longer modifies the actual file offset
of the given source file (if it's a regular file).  This follows
IO.copy_stream and IO#sendfile semantics, allowing multiple
threads/processes to simultaneously stream a single regular file
descriptor to multiple sockets/pipes.
</pre>
</content>
</entry>
<entry>
<title>io_splice 3.0.0 - kinder, gentler Linux zero-copy</title>
<updated>2011-03-01T09:38:36Z</updated>
<published>2011-03-01T09:38:36Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v3.0.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v3.0.0</id>
<content type="text">This release adds the IO.trysplice and IO.trytee interfaces
to avoid expensive EAGAIN exceptions for non-blocking I/O.

There is no IO.tryvmsplice method as we still haven't figured
out a good use for IO.vmsplice in Ruby, and non-blocking I/O
with iovecs is just painful!  If you want more zero-copy fun
without needing mmap(2), check out the "sendfile" RubyGem and
IO.copy_stream (1.9).  As of Linux 2.6.33+, sendfile(2) can copy
mmap-able files to +any+ descriptor, not just sockets.

Please email us at ruby.io.splice@librelist.com if you can think
of a good use for IO.vmsplice or IO.trysplice in Ruby.</content>
<content type="xhtml">
<pre>This release adds the IO.trysplice and IO.trytee interfaces
to avoid expensive EAGAIN exceptions for non-blocking I/O.

There is no IO.tryvmsplice method as we still haven't figured
out a good use for IO.vmsplice in Ruby, and non-blocking I/O
with iovecs is just painful!  If you want more zero-copy fun
without needing mmap(2), check out the "sendfile" RubyGem and
IO.copy_stream (1.9).  As of Linux 2.6.33+, sendfile(2) can copy
mmap-able files to +any+ descriptor, not just sockets.

Please email us at ruby.io.splice@librelist.com if you can think
of a good use for IO.vmsplice or IO.trysplice in Ruby.
</pre>
</content>
</entry>
<entry>
<title>Ruby io_splice 2.2.0 - updates for Linux 2.6.35</title>
<updated>2010-08-02T08:05:47Z</updated>
<published>2010-08-02T08:05:47Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v2.2.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v2.2.0</id>
<content type="text">This release adds IO#pipe_size and IO#pipe_size= accessors for
resizing the kernel pipe buffer under Linux 2.6.35+.  This
functionality may be used to either reduce memory footprint or
make large copies with fewer method dispatches and system calls.

These methods are only available when run under Linux 2.6.35 or
later (but always built, so there's no need to recompile this
library after upgrading your kernel).

http://bogomips.org/ruby_io_splice/doc/IO.html#method-i-pipe_size
http://bogomips.org/ruby_io_splice/doc/IO.html#method-i-pipe_size%3D</content>
<content type="xhtml">
<pre>This release adds IO#pipe_size and IO#pipe_size= accessors for
resizing the kernel pipe buffer under Linux 2.6.35+.  This
functionality may be used to either reduce memory footprint or
make large copies with fewer method dispatches and system calls.

These methods are only available when run under Linux 2.6.35 or
later (but always built, so there's no need to recompile this
library after upgrading your kernel).

http://bogomips.org/ruby_io_splice/doc/IO.html#method-i-pipe_size
http://bogomips.org/ruby_io_splice/doc/IO.html#method-i-pipe_size%3D
</pre>
</content>
</entry>
<entry>
<title>Ruby io_splice 2.1.0 - IO::Splice.copy_stream fixes</title>
<updated>2010-06-06T20:37:43Z</updated>
<published>2010-06-06T20:37:43Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v2.1.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v2.1.0</id>
<content type="text">This fixes the issue with our copy_stream where non-pipe
descriptors with the O_NONBLOCK flag set were not handled
correctly.  Like IO.copy_stream in Ruby 1.9, our
IO::Splice.copy_stream will _always_ block until IO is available
(or raise if there are errors).

IO::Splice.copy_stream now closes all file descriptors that were
opened within the method, reducing pressure on the garbage
collector.

There are also new singleton convenience methods:

* IO::Splice.full - blocks and splices the full amount
* IO::Splice.partial - blocks until something is spliceable

They are used internally to implement IO::Splice.copy_stream,
but may also be useful to end users.

Rcov shows 100% test coverage \o/</content>
<content type="xhtml">
<pre>This fixes the issue with our copy_stream where non-pipe
descriptors with the O_NONBLOCK flag set were not handled
correctly.  Like IO.copy_stream in Ruby 1.9, our
IO::Splice.copy_stream will _always_ block until IO is available
(or raise if there are errors).

IO::Splice.copy_stream now closes all file descriptors that were
opened within the method, reducing pressure on the garbage
collector.

There are also new singleton convenience methods:

* IO::Splice.full - blocks and splices the full amount
* IO::Splice.partial - blocks until something is spliceable

They are used internally to implement IO::Splice.copy_stream,
but may also be useful to end users.

Rcov shows 100% test coverage \o/
</pre>
</content>
</entry>
<entry>
<title>Ruby io_splice 2.0.0</title>
<updated>2010-06-05T08:48:07Z</updated>
<published>2010-06-05T08:48:07Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v2.0.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v2.0.0</id>
<content type="text">There is a new IO::Splice.copy_stream method which is similar to
the IO.copy_stream method in 1.9 core, but uses splice()
internally to avoid copies to userspace in situations where
sendfile() is not possible.

With Linux 2.6.35 (and header files to match), we will also
export the F_GETPIPE_SZ and and F_SETPIPE_SZ constants so
they can be used with fcntl() to resize pipe buffers.

The documentation is also updated to reflect the returned
usefulness of the IO::Splice::F_MOVE constant for FUSE
filesystems under Linux 2.6.35.

I've also relicensed to LGPLv2.1+ (from LGPLv3-only) to allow
bundling with GPLv2-only applications (I'm currently the sole
copyright holder).

Signed-off-by: Eric Wong &lt;normalperson@yhbt.net&gt;</content>
<content type="xhtml">
<pre>There is a new IO::Splice.copy_stream method which is similar to
the IO.copy_stream method in 1.9 core, but uses splice()
internally to avoid copies to userspace in situations where
sendfile() is not possible.

With Linux 2.6.35 (and header files to match), we will also
export the F_GETPIPE_SZ and and F_SETPIPE_SZ constants so
they can be used with fcntl() to resize pipe buffers.

The documentation is also updated to reflect the returned
usefulness of the IO::Splice::F_MOVE constant for FUSE
filesystems under Linux 2.6.35.

I've also relicensed to LGPLv2.1+ (from LGPLv3-only) to allow
bundling with GPLv2-only applications (I'm currently the sole
copyright holder).

Signed-off-by: Eric Wong &lt;normalperson@yhbt.net&gt;
</pre>
</content>
</entry>
<entry>
<title>io_splice 1.0.0</title>
<updated>2010-05-27T20:43:22Z</updated>
<published>2010-05-27T20:43:22Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v1.0.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v1.0.0</id>
<content type="text">io_splice is now easier to use, as it can take IO/File objects in
addition to raw file descriptors as arguments.

IO.vmsplice now always splices buffers in full, since it's too difficult
to use otherwise.  Keep in mind that the usefulness of vmsplice is still
questionable from Ruby and IO.writev (from the "io-extra" gem) is more
flexible as it allows writing to non-pipe descriptors.

There are also some code cleanups and improved documentation.</content>
<content type="xhtml">
<pre>io_splice is now easier to use, as it can take IO/File objects in
addition to raw file descriptors as arguments.

IO.vmsplice now always splices buffers in full, since it's too difficult
to use otherwise.  Keep in mind that the usefulness of vmsplice is still
questionable from Ruby and IO.writev (from the "io-extra" gem) is more
flexible as it allows writing to non-pipe descriptors.

There are also some code cleanups and improved documentation.
</pre>
</content>
</entry>
<entry>
<title>io_splice 0.1.0</title>
<updated>2010-02-15T08:36:34Z</updated>
<published>2010-02-15T08:36:34Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link type="text/html" rel="alternate" href="http://bogomips.org/ruby_io_splice.git/tag/?id=v0.1.0"/>
<id>http://bogomips.org/ruby_io_splice.git/tag/?id=v0.1.0</id>
<content type="text">initial release</content>
<content type="xhtml">
<pre>initial release
</pre>
</content>
</entry>
</feed>
