ORC: make rootsThreshold thread local [backport]

This commit is contained in:
Araq
2023-05-06 08:52:04 +02:00
parent 85dbfc68b5
commit 5dfbf2d2e2
3 changed files with 7 additions and 7 deletions

View File

@@ -350,7 +350,7 @@ const
when defined(nimStressOrc):
const rootsThreshold = 10 # broken with -d:nimStressOrc: 10 and for havlak iterations 1..8
else:
var rootsThreshold = defaultThreshold
var rootsThreshold {.threadvar.}: int
proc partialCollect(lowMark: int) =
when false:
@@ -392,13 +392,13 @@ proc collectCycles() =
# of the cycle collector's effectiveness:
# we're effective when we collected 50% or more of the nodes
# we touched. If we're effective, we can reset the threshold:
if j.keepThreshold and rootsThreshold <= defaultThreshold:
if j.keepThreshold and rootsThreshold <= 0:
discard
elif j.freed * 2 >= j.touched:
when not defined(nimFixedOrc):
rootsThreshold = max(rootsThreshold div 3 * 2, 16)
else:
rootsThreshold = defaultThreshold
rootsThreshold = 0
#cfprintf(cstderr, "[collectCycles] freed %ld, touched %ld new threshold %ld\n", j.freed, j.touched, rootsThreshold)
elif rootsThreshold < high(int) div 4:
rootsThreshold = rootsThreshold * 3 div 2
@@ -411,7 +411,7 @@ proc registerCycle(s: Cell; desc: PNimTypeV2) =
if roots.d == nil: init(roots)
add(roots, s, desc)
if roots.len >= rootsThreshold:
if roots.len >= rootsThreshold+defaultThreshold:
collectCycles()
when logOrc:
writeCell("[added root]", s, desc)
@@ -427,7 +427,7 @@ proc GC_enableOrc*() =
## Enables the cycle collector subsystem of `--gc:orc`. This is a `--gc:orc`
## specific API. Check with `when defined(gcOrc)` for its existence.
when not defined(nimStressOrc):
rootsThreshold = defaultThreshold
rootsThreshold = 0
proc GC_disableOrc*() =
## Disables the cycle collector subsystem of `--gc:orc`. This is a `--gc:orc`

View File

@@ -1,5 +1,5 @@
discard """
outputsub: "(allocCount: 4302, deallocCount: 4300)"
outputsub: "(allocCount: 4050, deallocCount: 4048)"
cmd: "nim c --gc:orc -d:nimAllocStats $file"
"""

View File

@@ -1,6 +1,6 @@
discard """
nimoutFull: true
cmd: '''nim c -r --warnings:off --hints:off --gc:arc --expandArc:newTarget --expandArc:delete --expandArc:p1 --expandArc:tt --hint:Performance:off --assertions:off --expandArc:extractConfig --expandArc:mergeShadowScope --expandArc:check $file'''
cmd: '''nim c -r --warnings:off --hints:off --mm:arc --expandArc:newTarget --expandArc:delete --expandArc:p1 --expandArc:tt --hint:Performance:off --assertions:off --expandArc:extractConfig --expandArc:mergeShadowScope --expandArc:check $file'''
nimout: '''
--expandArc: newTarget