Bug #14490
closedMJIT slows down Rails applications
Description
This was reported earlier but I would like to add some test methodology here: (tested using Discourse)
What I tested¶
-
Run
ruby script/bench.rb
to warm up profiling database -
Run
RUBYOPT='--jit --jit-verbose=1 --jit-max-cache=10000' RAILS_ENV=profile bin/puma -e production
- Increasing the cache size is an attempt to get higher hit rates
-
WAIT 5-15 or so minutes for all jitting to stop so we have no cross talk
-
Run
ab -n 100 http://localhost:9292/
-
Wait for all new jitting to finish
-
Run
ab -n 100 http://localhost:9292/
The absolute best I get is around 61ms median for the test. With 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 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.