Project

General

Profile

Actions

Feature #5562

closed

Improvement of Windows IO performance

Added by h.shirosaki (Hiroshi Shirosaki) over 10 years ago. Updated over 10 years ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:40706]

Description

=begin
I suggest a patch to improve Windows IO performance.

Ruby's text mode IO is much slower than binary mode.
On Windows text mode is default, so Windows IO is slow.
I assume that's mainly because of CRLF linefeed code conversion.

My idea to improve IO performance is as below.

  • Change default linefeed conversion from Universal newline to CRLF newline on Windows
  • Use binary mode process with OS's text mode if only CRLF conversion is needed
  • Use Ruby's text mode with universal newline conversion if encoding conversion is needed

Although that causes io.c code to be more complicated, IO with CRLF conversion performance seems to be improved much.
I confirmed "make test-all TEST=ruby" have been passed. There was 3 errors, but ruby without this patch had same errors.
I think this patch doesn't affect other OS.

Line endings of "p" or "puts" writing is LF on trunk, but CRLF on 1.8.7 or 1.9.2.
This patch reverts to CRLF.

Here is #1332 benchmark test and results.

time = [Time.new]
c = ''
'aaaa'.upto('zzzz') {|e| c << e}
4.times { c << c }
time << Time.new
File.open('out.file','w') { |f| f.write(c) }
time << Time.new
c = File.open('out.file','r') { |f| f.read }
time << Time.new
0.upto(time.size - 2) {|i| p "#{i} #{time[i+1]-time[i]}" }

  • Result

ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]
"0 0.78125"
"1 0.6875"
"2 0.5625"

ruby 2.0.0dev (2011-11-03) [i386-mingw32]
"0 0.59375"
"1 1.09375"
"2 1.296875"

ruby 2.0.0dev (2011-11-03 trunk 33615) [i386-mingw32] with this patch
"0 0.625"
"1 0.65625"
"2 0.34375"
=end


Files

win_io.patch (12.2 KB) win_io.patch h.shirosaki (Hiroshi Shirosaki), 11/04/2011 12:02 AM
test-all.txt (24.1 KB) test-all.txt h.shirosaki (Hiroshi Shirosaki), 11/04/2011 06:40 PM
win_io_for_r33656.patch (13.6 KB) win_io_for_r33656.patch h.shirosaki (Hiroshi Shirosaki), 11/08/2011 07:16 AM
test_result.tar.gz (154 KB) test_result.tar.gz h.shirosaki (Hiroshi Shirosaki), 11/11/2011 01:23 AM
win_io_for_r33699.patch (14 KB) win_io_for_r33699.patch h.shirosaki (Hiroshi Shirosaki), 11/11/2011 01:23 AM
win_io_for_r33908.patch (15.5 KB) win_io_for_r33908.patch h.shirosaki (Hiroshi Shirosaki), 11/30/2011 11:24 PM

Related issues 1 (0 open1 closed)

Related to Backport193 - Backport #5704: Please backport r33937 (newline decorator)Closedusa (Usaku NAKAMURA)12/04/2011Actions
Actions

Also available in: Atom PDF