Project

General

Profile

Bug #14490

Updated by sam.saffron (Sam Saffron) about 1 year 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