libera/#sicl - IRC Chatlog
Search
23:39:39
moon-child
I think only acq/acqrel fences need to recohere, and ditto atomic loads/rmw; not release fences or atomic stores (except seqcst maybe). But I am not sure about that
23:42:10
hayley
We still need to flip other threads out of replication, when a minor GC starts. I thought this would nearly work, as it uses CAS, but it could end up diddling another object with the same value at the same location after compaction.
23:47:11
hayley
There could still be a count of writes in flight, but that would cause some contention and starting GC would not be lock-free.
23:49:22
moon-child
well, suppose we use semispace. Then it's very unlikely that, when you get to gc, there are _still_ in-flight writes to to-space
23:50:47
moon-child
if there are, though, then allocate a fresh newspace, ditch the old one, and set a flag on it saying that, once the last writer finishes, it's responsible for reclaiming that space
23:51:01
moon-child
and use a per-thread in-flight write counter with a hash table, to avoid contention
23:54:52
moon-child
it's very annoying to have to track this. If there were no scheduler, and hence no chance of being scheduled out, I would be tempted to count cycles and let the race be
23:59:26
moon-child
you have to finish writing to the global heap before you can start on the nursery
0:05:35
hayley
"What do we want?" "Transactional memory!" "When do we want it?" *aborts" "What do we want?"
3:41:30
hayley
One minor thing is that we could also mark incoherent objects (or slots), so that they aren't added to the list again upon further races; a similar technique is used with coalescing reference counting. But the idea is still that only racing writes have to be recohered, so it might not matter much; and we'd have three bitmaps I think (is object marked, is object replicated, is slot/object incoherent).
3:47:19
hayley
Coalescing can be done at either object or slot granularity; Levanoni and Petrank described an algorithm with slot granularity, but actually implemented the algorithm with object granularity, and LXR uses slot granularity. Though, if we need a slot for a forwarding pointer, the "is object replicated" bit can be stored in the same bitmap as the "is slot incoherent" bitmap, as the forwarding pointer cannot be incoherent.
4:05:21
hayley
Wait, how do we find the local replica if we have the address of the global replica? We could have a...reverse forwarding pointer in the global heap, too, but we'd need to shrink the allocation. I think shrinking allocations was mentioned when discussing how to implement bignums, but I forgot.
4:51:02
hayley
I guess a hash table would suffice. We can also use the forwarding pointer to store pretenuring information if an object is not forwarded, too.