Issue #5562 has been updated by Jon Forums.


FYI, unrelated to the patch failure on my system (but related to Windows IO performance) I've found a way to build a profileable MRI on Windows (basically `optflags='-gstabs+'` for MinGW builds) and analyze with the freely available AQtime Standard http://smartbear.com/products/free-tools/aqtime-standard/

Detailed build instructions at https://github.com/thecodeshop/ruby/wiki/Building-MRI-on-Windows on how to tweak the RubyInstaller build recipes.

Here's a screenshot of a profile result on a workload that performs a text read on a 500,000 line (LF delimited) test file

  http://www.mediafire.com/imgbnc.php/dd9263c046e611fb09011894cd545fc80cbcbd177bb56c296aa986782b8c00346g.jpg

The specific workload I used was

  https://github.com/jonforums/measurements/blob/master/workloads/core_rd_filelines_lf.rb

and is part of the benchmark/profiler/tracer helper tool (runs standalone or with pik or rvm on Windows and Linux) I wrote https://github.com/jonforums/measurements

If any of this looks helpful for what you're trying to do, please feel free to contact me off-list.  There's also a small group of interested folks trying to looking at Windows performance improvement opportunities on the http://groups.google.com/group/thecodeshop ML if you want to post there.  

And I bet there are others hard at work on optimizations ;)

Given what I think your patch is trying to do, and the current profiling results I seen, I really think your patch can make a very large improvement for Windows by getting much closer to full binary read performance on Linux. Very exciting, and I hope to quickly find a fix so I can start investigating your patch.

Jon

---
http://thecodeshop.github.com | http://jonforums.github.com/
twitter: @jonforums
----------------------------------------
Feature #5562: Improvement of Windows IO performance
http://redmine.ruby-lang.org/issues/5562

Author: Hiroshi Shirosaki
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


=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



-- 
http://redmine.ruby-lang.org