26 karma · joined September 14, 2012
https://www.ravenbrook.com/consultants/rb/
http://www.linkedin.com/in/richardbrooksby
etc.
[ my public key: https://keybase.io/rptb1; my proof: https://keybase.io/rptb1/sigs/Yb00f8EkL7zPAf23EdyvKaF7F2_YBq82rSb3nHYowiY ]
And we're definitely not proselytizing garbage collection here. The MPS is a framework for both manual and automatic memory management (and co-operation between the two). One of our main high performance commercial applications is all about the manual management, and for very good reasons.
But nobody should be rejecting GC out of hand, that's for sure.
The restriction could be removed if either:
* the MPS could use a different set of protections to the mutator program
* the mutator program uses a software barrier
The first one is tricky, and the second one just hasn't come up in any implementation we've been asked to make yet. Given a VM, it could happen, and the MPS would be concurrent.So, I believe there's nothing fundamentally non-concurrent about the MPS design. It's kind of waiting to happen.
[I've put this in a comment in the code. Thanks for making me write it down :)]
Since we're just moving our commercial clients onto 64-bit, we don't have experience except up to the 4GB limit (or 3GB in old Windows) which they approach regularly. We're still waiting for it to become a problem. I may have a different opinion in a year.
One of my short term goals is just to get some measurements together to publish. Watch this space, and sorry that they aren't here yet.
That said, we have an abstract framework that could be made to work in other ways, depending on requirements. It wouldn't be much work to hook in a write-barrier-only pool class, etc. etc. and have it co-operate. However, most of the development effort so far has gone on the read barrier approach.
As to how this effects overall run-time, well, that's where we'd have to arrange a side-by-side comparison, and make sure it included one of those compactions :P
Most of the problems are around the bottleneck of stopping threads on other cores in order to get privileged access to memory while preserving their consistent view of the heap. What the MPS needs is its own protection map. Most OSs don't help much with that, although Mac OS X, for a while, allowed you to map the same physical RAM at two addresses with different protections. Sadly, no longer.