Files | Admin

Notes:

Release Name: 3.0.0

Notes:
io_splice 3.0.0 - kinder, gentler Linux zero-copy

The splice family of Linux system calls can transfer data between file
descriptors without the need to copy data into userspace.  Instead of a
userspace buffer, they rely on an ordinary Unix pipe as a kernel-level
buffer.

* http://bogomips.org/ruby_io_splice/
* ruby.io.splice@librelist.com
* git://bogomips.org/ruby_io_splice.git

Changes:

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.



Changes: .document | 1 + .gitignore | 2 + .wrongdoc.yml | 5 + GIT-VERSION-GEN | 2 +- GNUmakefile | 200 ++--------------------------------------- README | 4 +- Rakefile | 126 ++++---------------------- ext/io_splice/io_splice_ext.c | 174 ++++++++++++++++++++++++++++-------- io_splice.gemspec | 36 +++----- lib/io/splice.rb | 195 +++++++++++++++++++--------------------- pkg.mk | 168 ++++++++++++++++++++++++++++++++++ test/test_io_splice.rb | 149 ++++++++++++++++++++---------- 12 files changed, 547 insertions(+), 515 deletions(-) commit 73b61c10c0085ee4a26a321375938bce16fb8a6d Author: Eric Wong Date: Tue Mar 1 09:29:57 2011 +0000 io_splice 3.0.0 - kinder, gentler Linux zero-copy 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. commit 9230fba2a4231965687d2e590f8d6ad01a2fa3a8 Author: Eric Wong Date: Mon Feb 28 01:24:01 2011 +0000 doc: more notes for IO.vmsplice HALP! commit 7652c110b2d635300a7e817b69ee4bef6a28d71d Author: Eric Wong Date: Mon Feb 28 01:08:44 2011 +0000 remove VERSION constant Needless cruft and maintenance overhead. commit 30250538e6c48b97a77114705e83fb619f362592 Author: Eric Wong Date: Mon Feb 28 01:05:15 2011 +0000 doc: RDoc for new interfaces and changes And yes, encourage them for non-blocking I/O users. commit 38273a2a81db814eacd2257665eac2fe3ecd3b94 Author: Eric Wong Date: Mon Feb 28 00:21:28 2011 +0000 IO.vmsplice flags argument defaults to zero For consistency with all of our other methods. commit 813c5300294046f9ae0f4bac8449a4734ddd7fd9 Author: Eric Wong Date: Sun Feb 27 23:40:44 2011 +0000 add IO.trytee interface This allows more-efficient use of non-blocking I/O with tee(2) and will return :EAGAIN instead of generating an expensive Errno::EAGAIN exception. commit c32ddca888259c391e126154ff62fdcdb2e3759c Author: Eric Wong Date: Sat Feb 26 16:47:40 2011 -0800 trysplice implies SPLICE_F_NONBLOCK for flags It makes more sense this way if non-blocking I/O is expected. commit 4ba0bb32bb717d1f77c2f4f3cb41e646eb243a7f Author: Eric Wong Date: Sat Feb 26 16:44:17 2011 -0800 flags are optional for splice and trysplice No point in requiring the flags argument if it's going to be zero, so default them to zero if they're unset. commit 24a2f6db438537ff81081a41b5ebf02cda2dec57 Author: Eric Wong Date: Sat Feb 26 16:35:56 2011 -0800 shorten calls to rb_thread_blocking_region Long lines bother me commit 844ed3d36faf14813a2e6f2476920f63bcb3bc89 Author: Eric Wong Date: Sat Feb 26 14:45:04 2011 -0800 avoid signed vs unsigned comparison Caught when compiling with the CFLAGS of Ruby 1.9.3dev commit b122f037c3af81b8e20deb36b9e0706fe8535668 Author: Eric Wong Date: Sat Feb 26 14:43:08 2011 -0800 copy_stream: File.open encoding doesn't matter No need to open in binary mode since no file data goes through luserspace! commit 5c9dc339b355546e68013be26aa54cc0e9978409 Author: Eric Wong Date: Sat Feb 26 14:41:19 2011 -0800 test: fix broken assertions on Ruby 1.9.3dev Oops :x commit fd131dcbf7a9c098099c00790f504908bc2c94a4 Author: Eric Wong Date: Sat Feb 26 14:40:48 2011 -0800 copy_stream uses IO.trysplice instead of IO.splice Things should be slightly faster this way. commit b9119424bdd41e417afae354329e9b6d298baff4 Author: Eric Wong Date: Sat Feb 26 14:20:37 2011 -0800 test: remove unused_port function It's wholly unnecessary when we don't do exec() for other processes. commit 62f706a496eba0bc581fb2c277fed2dc29f60eb0 Author: Eric Wong Date: Sat Feb 26 14:17:25 2011 -0800 add IO.trysplice interface This reduces the cost of EAGAIN and EOF since they are not considered exceptional conditions. commit 1dd7ade30687dfbe220315ab412c33e2edbfa14f Author: Eric Wong Date: Wed Dec 22 10:57:58 2010 -0800 io/splice: unindent This seems to fix the issue we had with older RDoc, too commit 31f77b2a01f69956b034d35a7f12038947b6bdbc Author: Eric Wong Date: Sat Feb 5 03:27:54 2011 -0800 test: cleanup unused_port function Duh! commit cba967458df157f3e4aa2dc885eb87013bece175 Author: Eric Wong Date: Sat Feb 5 03:25:47 2011 -0800 clean up packaging and use pkg.mk commit f62107bf4b5eb01dbc22b68e56b61db78c73336c Author: Eric Wong Date: Mon Dec 27 16:55:28 2010 +0000 doc: switch to wrongdoc No more JavaScript! commit 09cd762eeebc07dd7fd0eef6c3bea40a0f74b030 Author: Eric Wong Date: Mon Dec 27 16:19:30 2010 +0000 GNUmakefile: sync examples for documentation publishing The examples on our site were out-of-date. commit 4df9ceb637abe416ac36608038e440e30bbb6a35 Author: Eric Wong Date: Mon Aug 2 08:14:08 2010 +0000 GNUmakefile: update RAA on new releases