From: Bil Kleb Date: 2001-08-18T12:58:31+09:00 Subject: [ruby-talk:19964] Slow file I/O? (newbie) So we were trying to test the speed of mirrored versus non-mirrored disks and decided to use Ruby to do the testing. We wrote a couple one-liners to write and read a Gigabyte-sized file of all 1's, viz, File.open("testFile","w") { |f| (2**30).times{f.putc "1"} } and File.open("testFile") { |f| (2**30).times{f.getc} } but we found the writing was so slow that we abandoned all hope before we even got around to the reading part... We tried setting a variable instead of using "1", but it didn't noticeably alter the speed. What are we doing wrong? (We're running Ruby 1.6.4 on Pentium II's and III's via GNU/Linux.) For a MB file, i.e., 2**20, ruby -r profile testw.rb gives: % cumulative self self total time seconds seconds calls ms/call ms/call name 77.74 189.94 189.94 1 189940.00 244320.00 Fixnum#times 22.26 244.32 54.38 1048576 0.05 0.05 IO#putc 0.00 244.32 0.00 1 0.00 244320.00 File#open 0.00 244.32 0.00 1 0.00 0.00 Fixnum#< 0.00 244.32 0.00 1 0.00 0.00 Fixnum#** 0.00 244.32 0.00 1 0.00 244320.00 #toplevel (BTW: it only takes 3 seconds without the profiling.) The comparable c routine runs several orders of magnitude faster: #include #include int main(){ FILE *outfile= fopen("ctestFile","w"); unsigned int i; for (i=0; i