Bug #14490
Updated by sam.saffron (Sam Saffron) almost 8 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.