Skip to content

Implement GCMemoryInfo.TotalCommittedBytes#40

Merged
VSadov merged 1 commit into
mainfrom
bytesCommitted
May 12, 2025
Merged

Implement GCMemoryInfo.TotalCommittedBytes#40
VSadov merged 1 commit into
mainfrom
bytesCommitted

Conversation

@VSadov

@VSadov VSadov commented May 12, 2025

Copy link
Copy Markdown
Owner

No description provided.

@VSadov VSadov merged commit b12453e into main May 12, 2025
@VSadov VSadov deleted the bytesCommitted branch May 12, 2025 00:44
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jun 24, 2025
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 10, 2026
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 10, 2026
allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 10, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
Copilot AI pushed a commit to hez2010/Satori that referenced this pull request Jan 10, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 10, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 10, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 11, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 11, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 11, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 12, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 12, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 12, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 12, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Jan 12, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Feb 1, 2026
noop GC

allocator

escape mark in write barriers

scan current stack

SatoriObject + some cleanup

Lisp2 style sliding compaction in allocating region

marking bitmap

localgc ok

Fixes after Rebasing

SatoriQueue

MarkChunk

DrainMarkQueue

misc fixes

Finalization

Collectible types

Dependent Handles

various fixes (disabled gen0 sweep/compact until recursive escape is implemented)

Disable some tests (mostly nyi GC apis)

Libs tests pass

tests pass with Gen0 sweep/compact

few fixes

syncblocks escape the backpointed obj

added gen num and ForEachObjectRef with range,
ForEachPage, barrier, card size and initialization fixes

disabled few clr tests (mostly for NYI GC APIs)

Card table functional.

generational write barriers in C

asm barrier

Generational GC works

various TODOs

Move Satori files after rebase.

Gen2 compaction (full)

Gen1 compaction (ephemeral only)

Conservative GC

Various TODOs and cleanup

Decommit

fix after rebase

concurrent stack roots and drain

Added SatoriHandlePartitioner

Separated card mark and clean passes

ToggleWriteBarrier

helping with handles and cards

concurrent sweep

Various TODOs

a few tweaks and cleanups

Parallel marking.

More Parallel

scan all stacks in concurrent mark

defer returning to allocator

remaining parallel stages

disable a few tests that always fail locally and in the baseline as well

silence a spurious assert

some TODOs

fix ups after rebase

Apple Silicon  (OSX ARM64)

break build on not yet supported platforms

allow reusing nonempty regions

demotion gen2 -> gen1

conservative mode

allow reusing for gen0

reenable concurrent GC

fix after merge

Linux x64

OSX x64

Various TODOs

Windows ARM64

Linux ARM64

background trim (coalesce and decommit)

lic

GetTotalAllocatedBytes

GC Start/End/Triggered events

GC.GetTotalMemory

GetLastGCStartTime

Config keys

noisy tests

a few fixes

noisy test

addressed various TODOs

Fix after rebase

deleted m_finalizationScanCompleteRegions

clean finalizable

AppendUnsafe

push to queues helpers

extracted IsRelocatible

introduced DoNotSweep

concurrent plan

Low Latency mode. more TODOs and some fixes

accessibility

WorkList and SpinLock

some renames and member reorder

bucket tweaks

lock tweak

min budget

do not wait 1 msec in suspension.

comments

readme

revert unnecessary changes

readme tweak

SpinLock fix

Some more diagnostics

GCHeapStats ETW event

a few fixes

GCAllocationTick ETW event

disable incompatible test

Update README.md

fix build after rebase onto 7.0

switch to nonblocking ditctionary

some improvements in concurrent dictionary

use IsReferenceOrContainsReferences

fixes after rebase

fixes after rebase for 8.0

fixes after rebasing

disabled incompatible tests

tweaked a test

fix stuff up after rebase

Immortal Allocations (VSadov#30)

* can allocate

* recycler aware of 3rd gen

* barriers are gen3 aware

* zeroing and linking

* some tweaks to immortal alloc

* Update README.md

Fix after rebase

Support for NativeAOT (VSadov#31)

Fixes after rebasing

Fixes after rebasing

fix after rebasing

Shared nursery regions, more TODOs (VSadov#32)

* HelpOnce improvements

* Shared Pinned

* Individual promotion and some TODOs

* Shared Large

* Shared regular

* more TODOs

fix after rebasing

Concurrent cleaning of cards dirtied by incremental marking. (VSadov#33)

* Concurrent card cleaning on all platforms

* larger cache

* update year

* use ld_classic in ILC build and in build integration

* Missing checkbox

Write barrier improvements and some clean ups (VSadov#34)

* Write Barrier updates for arm64

* some allocator and relocation tweaks

* dictionary fixes

* disable test and stress nuisances

Low Latency Mode TODOs (VSadov#35)

* Gate and new Lock, also GC thread spin/rate

* barrier tweaks

* GetGCSafeMethodTable

* Suspend SpinWait tweak

* GetMemoryInfo throttling

* collection heuristics

* avail ram

* recycler and env changes

* barriers

* bulk copy

* gc spin tweak

* TryPopWithTryEnter

* small commit is back

* m_helperWoken

* AskForHelp

* tweaks

* do stacks last

* only lock changes

* AllocAligned

* misalign TLABs

* prefer concurrent in LowLat mode

* worklist

* spin in TryEnter

* rationalizing mark chunk size

* shorter card groups

* a few todos

* Gen0 Gen1 switches

* gcTHP switch

* tweak conc block time

* more conservative trimming

* fixes for OSX

* fix for arm64

* tweak helper counts

* round up

* helper --> worker

Arm64 tweaks (VSadov#36)

* tweaks

* Gen2Target

* trimmer pause

* style and comment fixes

Improve pacing (VSadov#37)

* pacing tweaks and fixes

* 2025

* RelocatedToUnchecked

* cmp when checking same region

* coments

Concurrent Mark completion and Card Cleaning improvements  (VSadov#38)

* simpler ShouldDoConcurrent
* m_ccHelpersNum
* more pacing tweaks
* comments and todos

fix after rebase

Concurrent phase completion improvements. (VSadov#39)

Implement GCMemoryInfo.TotalCommittedBytes (VSadov#40)

Fix scenarios around committing the page map (VSadov#49)

* Make page map reservation and commit more precise.

* fix for arm64

* better comment

* one more comment

Report collection counts non-inclusively (VSadov#51)

Revert "Report collection counts non-inclusively (VSadov#51)" (VSadov#52)

This reverts commit 50b175b.

Implement GetTotalPauseDuration and GC counters (VSadov#50)

* Implement GC counters

* Introduce a separate set of counters

* GCMemoryInfo.PauseTimePercentage

---------

Co-authored-by: vsadov <8218165+VSadov@users.noreply.github.com>

fixes after rebasing

Make ByRefWriteBarrier to use the same call convention as in standard GC for R2R compatibility.  (VSadov#56)

Reduce pacing frequency. (VSadov#57)

* DOTNET_gcPace knob

* less frequent alloc pacing

fixes (VSadov#58)

short circuit gen0 collection if surviving set is too large (VSadov#61)

Improve efficiency on some finalization code paths (VSadov#63)

* Finalization queue improvements

* test related fixes

Inject `{SatoriGC, true}` into config values. (VSadov#67)

* Inject {SatoriGC, true} into config values.

* DOTNET_gcForceCompact

Improving compaction heuristics + Some other tweaks while looking at compaction. (VSadov#74)

fix osx-x64 build with new Apple compilers
VSadov added a commit that referenced this pull request Feb 4, 2026
hez2010 pushed a commit to hez2010/Satori that referenced this pull request Feb 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant