could there be a dedicated CPU core for it? if not, then i suppose smaller is always better; could also be adaptive rate: use 5% or higher, as much as is left over for the current frame.
-
-
Replying to @paniq @TimSweeneyEpic and
but constant runtime cost is good thinking. that makes it much easier to reason about it, and we don't get sudden stalls.
1 reply 0 retweets 0 likes -
Replying to @paniq @TimSweeneyEpic and
is the GC available for data allocated on any thread?
1 reply 0 retweets 0 likes -
All threads, all GC overhead being amortized across threads or in negligibly small timeslices.
1 reply 0 retweets 2 likes -
i do like this kind of footprint.
1 reply 0 retweets 0 likes -
Replying to @paniq
Semi random Q: How would you feel about an allocator that intentionally slowed down threads that allocate too many GB/s in order to bound pause times?
1 reply 0 retweets 0 likes -
Replying to @pkhuong
sounds like a heuristic that is difficult to understand in practice. e.g. most allocations happen when a level is loaded, and nobody needs artificial stalls in that scenario.
2 replies 0 retweets 1 like -
i would rather leave allocation bandwidth to profiling.
1 reply 0 retweets 0 likes -
Once we abandon stop-the-world GC, there are some nice choices available. You can have a dedicated GC thread, but it's impossible to guarantee it can keep up with the garbage created by other threads. So you really need the ability for thread that allocate to help with GC.
4 replies 2 retweets 9 likes -
Replying to @TimSweeneyEpic @pkhuong
where and how would you place the roots?
1 reply 0 retweets 0 likes
In my case, box<t> is the type of managed references (like shared_ptr<t>, but GC instead of ARC). There are two types of memory, and the GC treats them differently. References living in unmanaged memory like the stack or C++ heap are roots.
-
-
References in managed memory are not roots. They are tracked by the GC and are only treated as live when the object they reside in is live.
1 reply 0 retweets 3 likes -
The technique for tracking where references live is awesomely brute-force. There's 128TB of address space, so I virtually allocate 32TB of uncommitted memory for tags, with one byte tag for each 8 bytes of address space. I then catch page faults in tag memory, commit, and track.
1 reply 1 retweet 2 likes - 4 more replies
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.