From: Yusuke Endoh Date: 2012-02-14T23:26:40+09:00 Subject: [ruby-core:42627] [ruby-trunk - Feature #5995][Assigned] calling io_advise_internal() in read_all() Issue #5995 has been updated by Yusuke Endoh. Status changed from Open to Assigned Assignee set to Motohiro KOSAKI Hello, 2012/2/14 Motohiro KOSAKI : > Huh? fadvise() is a hint for _future_ io access. but usually read_all() don't have any future access. The patch calls posix_fadvise *before* the main part of read_all. Doesn't it make sense? Quoted from the manpage of POSIX_FADVISE(2): > Under Linux, POSIX_FADV_NORMAL sets the readahead window to > the default size for the backing device; POSIX_FADV_SEQUENTIAL > doubles this size, I don't wonder that the patch works well. Actually I can reproduce the speed up. $ sudo sysctl -w vm.drop_caches=1 vm.drop_caches = 1 $ ./ruby.old t.rb user system total real 0.100000 1.150000 1.250000 ( 3.776475) $ sudo sysctl -w vm.drop_caches=1 vm.drop_caches = 1 $ ./ruby.new t.rb user system total real 0.090000 0.750000 0.840000 ( 3.766539) $ uname -a Linux inch 3.0.0-16-generic-pae #28-Ubuntu SMP Fri Jan 27 19:24:01 UTC 2012 i686 i686 i386 GNU/Linux -- Yusuke Endoh ---------------------------------------- Feature #5995: calling io_advise_internal() in read_all() https://bugs.ruby-lang.org/issues/5995 Author: Masaki Matsushita Status: Assigned Priority: Normal Assignee: Motohiro KOSAKI Category: core Target version: =begin I propose to call io_advise_internal() in read_all(). It will increase performance. I created a dummy file: dd if=/dev/zero of=dummy bs=1M count=100 Then, I ran the following: require 'benchmark' Benchmark.bm do |x| x.report do f = File.open("dummy") # dummy file(about 100MB ) f.read end end I freed page cache before each test: sudo sysctl -w vm.drop_caches=1 results on Ubuntu 11.10(3.0.0-15-server): r34462: user system total real 0.050000 0.220000 0.270000 ( 0.356033) user system total real 0.050000 0.190000 0.240000 ( 0.332243) user system total real 0.060000 0.210000 0.270000 ( 0.347758) patched ruby: user system total real 0.030000 0.130000 0.160000 ( 0.225866) user system total real 0.040000 0.170000 0.210000 ( 0.250172) user system total real 0.040000 0.150000 0.190000 ( 0.254654) It shows the patch increases performance. =end -- http://bugs.ruby-lang.org/