Ravenbrook / Projects / Memory Pool System / Issues

Memory Pool System


MPS issue job001147

Title: MPS on OS X needs a protection module in order to be faster
Status: closed
Priority: essential
Assigned user: David Jones
Product: mps
Organization: Ravenbrook
Description: The MPS on OS X is slow. In particular it is much slower than a stop-and-copy collector. See [1], RB's experiments with sc

(Implemented on PowerPC OS X) Now required on Intel OS X.
Analysis: One of the reasons it is slow is that OS X has no protection module (protxc). We need to implement a protection module in order to remove this cause of slowness.

We could probably use protfr.c unmodified, or modified very little.

So far, 2005-03-04 it seems that whilst the mprotect code works
more or less as is, the signal handling seems screwed. Tests
seem to go into an infinite loop and when running under a debugger
it doesn't seem possible to handle the signal properly or break into the
signal handler, and so is impossible to debug.

Looking at the Boehm GC code (this is very unpleasant) suggests
that they use Mach vm_protect and exception handling. Not only
is this cool, it just might work.

[2] (a post by Timothy Wood of Omnigroup) seems incredibly
useful; I find by looking at the Boehm GC code.

Aha, it turns out that si_addr is the address of the faulting
instruction, and the faulting address is someplace else. Thanks
to NB for some snorkelling help.

Now proceeding with traditional UNIX mprotect / sigaction
handler. Which seems to work just fine.

2007-02-20 DRJ:

Need to implement on Intel OS X. Probably using some
combination of protxcpp.c, protfri3.c, and protso.c

2007-03-02 DRJ:

On Intel OS X the info->si_addr field is correct, so we can use
code which looks much like proto1.c (which is slightly cleaner
than protso.c).

2007-03-09 DRJ:

Implemented in protix.c for Intel Darwin.
How found: manual_test
Evidence: [1] //info.ravenbrook.com/mail/2005/03/01/11-16-25/0.txt
[2] http://www.omnigroup.com/mailman/archive/macosx-dev/2000-June/002030.html
Observed in: 1.105.0
Introduced in: 0.0.0
Test procedure: none
Created by: David Jones
Created on: 2005-03-02 09:51:10
Last modified by: David Jones
Last modified on: 2007-03-09 11:26:10
History: 2005-03-02 DRJ Created
2005-03-04 DRJ Updated
2007-02-20 DRJ Required for Intel now.
2007-03-02 DRJ MacTel notes.
2007-03-09 DRJ Closed

Fixes

Change Effect Date User Description
161905 closed 2007-03-09 09:35:31 David Jones MPS: Typo in config.h was breaking FreeBSD builds.
161902 open 2007-03-08 21:50:28 David Jones MPS: Protection for Intel Darwin. Hopefully cross-platform.
147633 open 2005-03-04 15:53:57 David Jones MPS: Removing some pretty useful printf debugging code from
protxcpp
147632 open 2005-03-04 15:53:00 David Jones MPS: oops. previous submit blatted over my dirty branch. must
have forgotten to p4 edit it.
147629 open 2005-03-04 15:37:12 David Jones MPS: implemented prot on OS X.

Generated at 2008-07-21 01:15:40 by $Id: //info.ravenbrook.com/infosys/cgi/issue.cgi#430 $

Copyright © Ravenbrook Limited. This document is provided "as is", without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this document. You may not duplicate or reproduce this document in any form without the express permission of the copyright holder.

Ravenbrook / Projects / Memory Pool System / Issues