Project

General

Profile

Bug #14490

Updated by sam.saffron (Sam Saffron) almost 7 years ago

This was reported earlier but I would like to add some test methodology here: (tested using Discourse) 

 ### What I tested 

 1. Run `ruby script/bench.rb` to warm up profiling database 

 2. Run `RUBYOPT='--jit --jit-verbose=1 --jit-max-cache=10000' RAILS_ENV=profile bin/puma -e production` 

    1. Increasing the cache size is an attempt to get higher hit rates 

 3. WAIT 5-15 or so minutes for all jitting to stop so we have no cross talk 

 4. Run `ab -n 100 http://localhost:9292/` 

 5. Wait for all new jitting to finish 

 6. Run `ab -n 100 http://localhost:9292/` 


 The absolute best I get is around **61ms** median for the test. With Without MJIT 

 This is MJIT results! 

 ``` 
 Percentage of the requests served within a certain time (ms) 
   50%       61 
   66%       63 
   75%       70 
   80%       71 
   90%       73 
   95%       83 
   98%      106 
   99%      109 
  100%      109 (longest request) 

 ``` 

 Compared to w/o non MJIT which is: 


 ``` 
 Percentage of the requests served within a certain time (ms) 
   50%       47 
   66%       48 
   75%       50 
   80%       51 
   90%       60 
   95%       62 
   98%       75 
   99%       77 
  100%       77 (longest request) 

 ```   


 ### Theory on why this happens 

 I suspect this is happening cause we are introducing new overhead to every single method dispatch (counting for mjit, and hash lookup and so on). This overhead adds up. 


Back