From: Eric Wong Date: 2017-01-18T18:39:16+00:00 Subject: [ruby-core:79125] Re: [Ruby trunk Bug#13085] io.c io_fwrite creates garbage 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: