From: Yusuke Endoh Date: 2012-02-16T21:55:43+09:00 Subject: [ruby-core:42683] [ruby-trunk - Feature #5995][Rejected] calling io_advise_internal() in read_all() Issue #5995 has been updated by Yusuke Endoh. Status changed from Assigned to Rejected Hello, There is indeed something wrong, but anyway, I agree with kosaki's point; we cannot import the patch until we know the exact reason why it brings performance improvement. So please reopen this ticket if you find the reason. (I expect kosaki-san to consider this!) I wrote a simple C code to experiment this. The result is as kosaki said; when calling only one read syscall, posix_ fadvise does NOT bring performance improvement (even slower). I really wonder why File#read becomes faster. # using posix_fadvise $ sudo sysctl -w vm.drop_caches=1 && time ./t dummy T vm.drop_caches = 1 314572800 real 0m5.401s user 0m0.000s sys 0m0.740s # NOT using posix_fadvise $ sudo sysctl -w vm.drop_caches=1 && time ./t dummy F vm.drop_caches = 1 314572800 real 0m3.967s user 0m0.000s sys 0m0.896s #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd = open(argv[1], O_RDONLY); char *buf; struct stat s; fstat(fd, &s); buf = malloc(s.st_size); if (argv[2][0] == 'T') { posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL); } printf("%d\n", read(fd, buf, s.st_size)); return 0; } -- Yusuke Endoh ---------------------------------------- Feature #5995: calling io_advise_internal() in read_all() https://bugs.ruby-lang.org/issues/5995 Author: Masaki Matsushita Status: Rejected 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/