diff options
| author | Luke Gruber <luke.gruber@shopify.com> | 2025-11-03 14:30:59 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-03 14:30:59 -0500 |
| commit | 16af72790837ffb10c87ec23f99a6c519abc21e3 (patch) | |
| tree | d9ecb0e55ba2489f8e30e14ef018f8bd383a5c8f /doc/optparse/ruby/explicit_array_values.rb | |
| parent | 505fcf5dcfb59e91ed97e770b166793e44845bd8 (diff) | |
Avoid taking vm barrier in heap_prepare() (#14425)
We can avoid taking this barrier if we're not incremental marking or lazy sweeping.
I found this was taking a significant amount of samples when profiling `Psych.load`
in multiple ractors due to the vm barrier. With this change, we get significant improvements
in ractor benchmarks that allocate lots of objects.
-- Psych.load benchmark --
```
Before: After:
r: itr: time r: itr: time
0 #1: 960ms 0 #1: 943ms
0 #2: 979ms 0 #2: 939ms
0 #3: 968ms 0 #3: 948ms
0 #4: 963ms 0 #4: 946ms
0 #5: 964ms 0 #5: 944ms
1 #1: 947ms 1 #1: 940ms
1 #2: 950ms 1 #2: 947ms
1 #3: 962ms 1 #3: 950ms
1 #4: 947ms 1 #4: 945ms
1 #5: 947ms 1 #5: 943ms
2 #1: 1131ms 2 #1: 1005ms
2 #2: 1153ms 2 #2: 996ms
2 #3: 1155ms 2 #3: 1003ms
2 #4: 1205ms 2 #4: 1012ms
2 #5: 1179ms 2 #5: 1012ms
4 #1: 1555ms 4 #1: 1209ms
4 #2: 1509ms 4 #2: 1244ms
4 #3: 1529ms 4 #3: 1254ms
4 #4: 1512ms 4 #4: 1267ms
4 #5: 1513ms 4 #5: 1245ms
6 #1: 2122ms 6 #1: 1584ms
6 #2: 2080ms 6 #2: 1532ms
6 #3: 2079ms 6 #3: 1476ms
6 #4: 2021ms 6 #4: 1463ms
6 #5: 1999ms 6 #5: 1461ms
8 #1: 2741ms 8 #1: 1630ms
8 #2: 2711ms 8 #2: 1632ms
8 #3: 2688ms 8 #3: 1654ms
8 #4: 2641ms 8 #4: 1684ms
8 #5: 2656ms 8 #5: 1752ms
```
Diffstat (limited to 'doc/optparse/ruby/explicit_array_values.rb')
0 files changed, 0 insertions, 0 deletions
