From: pdahorek@... Date: 2017-07-24T19:42:42+00:00 Subject: [ruby-core:82150] [Ruby trunk Bug#13167] Dir.glob is 25x slower since Ruby 2.2 Issue #13167 has been updated by ahorek (Pavel Rosick��). File logruby24.txt added File logruby21.txt added I used Procmon.exe https://live.sysinternals.com to monitor system calls and it looks like ruby 2.4.1 is traversing the whole directory tree over and over again for each {} matcher. This should be definitely avoided! take a look, the same single call for a Dir.glob takes **30** sys-calls on Ruby 2.1.9 but **2086** sys-calls on Ruby 2.4.1! Ruby 2.1.9 just tries to open all combinations without checking the directory structure ~~~ bash c:/test/myapp/app/views/common/_menu_stats.en.html.erb open c:/test/myapp/app/views/common/_menu_stats.en.html.builder open ... ~~~ but Ruby 2.4.1 behaves like this ~~~ bash c:/ open c:/ stats c:/ close c:/test open c:/test stats c:/test close c:/myapp open c:/myapp stats c:/myapp close ... c:/test/myapp/app/views/common/_menu_stats.en.html.erb open c:/test/myapp/app/views/common/_menu_stats.en.html.erb stats c:/test/myapp/app/views/common/_menu_stats.en.html.erb close *** AND AGAIN *** c:/ open c:/ stats c:/ close c:/test open c:/test stats c:/test close c:/myapp open c:/myapp stats c:/myapp close ... c:/test/myapp/app/views/common/_menu_stats.en.html.builder open c:/test/myapp/app/views/common/_menu_stats.en.html.builder stats c:/test/myapp/app/views/common/_menu_stats.en.html.builder close *** AND AGAIN *** c:/ open c:/ stats c:/ close c:/myapp open c:/myapp stats c:/myapp close etc ... ~~~ ---------------------------------------- Bug #13167: Dir.glob is 25x slower since Ruby 2.2 https://bugs.ruby-lang.org/issues/13167#change-65905 * Author: ahorek (Pavel Rosick��) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.4.0 * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- Hello, we've found a huge speed regression in our Rails app. After some digging the reason is in `Dir.glob` method which is much slower since Ruby 2.2.6. This is probably Windows only! This code is used heavily in Rails for partial lookups: ```ruby Dir.glob('c:/test/myapp/app/views/common/_menu_stats{.en,}{.html,}{}{.erb,.builder,.raw,.ruby,.jbuilder,.coffee,}') ``` Comparsion (x64): jruby 9.1.7.0 2540 i/s ruby 2.1.5 2568 i/s ruby 2.1.9 2569 i/s **ruby 2.2.6 99 i/s 25 times slower! ruby 2.3.3 102 i/s ruby 2.4.0 103 i/s** I would like to help, but I don't know much about Ruby C internals. Please let me know if you need any additional info. Now we're stuck at 2.1.9 because this issue makes the development on more recent versions unusable. ---Files-------------------------------- logruby24.txt (484 KB) logruby21.txt (10.8 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: