Commit 16af727
authored
Avoid taking vm barrier in heap_prepare() (ruby#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
```1 parent 505fcf5 commit 16af727
1 file changed
+8
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
985 | 985 | | |
986 | 986 | | |
987 | 987 | | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
988 | 991 | | |
989 | 992 | | |
990 | 993 | | |
| |||
2022 | 2025 | | |
2023 | 2026 | | |
2024 | 2027 | | |
2025 | | - | |
| 2028 | + | |
| 2029 | + | |
| 2030 | + | |
| 2031 | + | |
2026 | 2032 | | |
2027 | 2033 | | |
2028 | 2034 | | |
| |||
2031 | 2037 | | |
2032 | 2038 | | |
2033 | 2039 | | |
2034 | | - | |
2035 | | - | |
2036 | | - | |
| 2040 | + | |
2037 | 2041 | | |
2038 | 2042 | | |
2039 | 2043 | | |
| |||
0 commit comments