On Tue, 13 May 2014 12:14:06 -0400, Ola Fosheim Grøstad <[email protected]> wrote:

On Tuesday, 13 May 2014 at 14:13:31 UTC, Steven Schveighoffer wrote:
I know this is coming from a position of extreme ignorance, but why do we have to do copy on write? What about pause on write?

Not sure how that will help? Pointers may still escape collection?

(but you get that with transactional memory, on the cache level)

My understanding is that the way the fork collector works is that it makes pages copy-on-write. Then if the original process writes to one of the pages, the page is copied, which may be expensive in terms of total memory and time consumed.

The idea I had was to make them pause-on-write. This means, when the original process attempts to write to the page, it gets a page-fault, which pauses the thread until the collector is done with it. This causes the same halting that normally happens with stop-the-world, but only on-demand, instead of preemptively. If a thread is doing only reads, or is only touching non-Scanned memory, it continues.

A collector may be able to take advantage of this knowledge to avoid as many pauses as possible, but I'm not sure.

Just an idea, I make no claims to its actual benefits :)

-Steve

Reply via email to