3-way benchmark results against trunk:

copy1: 0001-v2-io.c-io_fwrite-copy-to-hidden-buffer-when-writing.patch
built: 0001-basicsocket-Linux-workaround-for-excess-garbage-on-w.patch

Execution time (sec)
name                            trunk   copy1   built
io_copy_stream_write            0.708   0.659   0.707
io_copy_stream_write_socket     1.223   1.050   0.623

Speedup ratio: compare with the result of `trunk' (greater is better)
name                            copy1   built
io_copy_stream_write            1.074   1.001
io_copy_stream_write_socket     1.165   1.964

Memory usage (last size) (B)
name                                  trunk        copy1            built
io_copy_stream_write          75628544.000   6508544.000     75706368.000
io_copy_stream_write_socket  117719040.000   6991872.000      7069696.000

Memory consuming ratio (size) with the result of `trunk' (greater is better)
name                            copy1   built
io_copy_stream_write           11.620   0.999
io_copy_stream_write_socket    16.837  16.651


I plan to commit
0001-basicsocket-Linux-workaround-for-excess-garbage-on-w.patch
in a week or so.  It creates no regression other than larger
socket.so size and extra method entries.  If we find a better
solution than copying to temporary buffer
(0001-v2-io.c-io_fwrite-copy-to-hidden-buffer-when-writing.patch)
we can revert.

I don't like
0001-v2-io.c-io_fwrite-copy-to-hidden-buffer-when-writing.patch
but it may be the least bad generic solution with current Ruby.
Maybe it can be refined to use malloc+free instead of temporary
Ruby string object, but that is an implementation detail.
Extra memcpy bothers me greatly.

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>