Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Shared arena threads, GC, executable memory allocator

5 views
Skip to first unread message

Leopold Toetsch

unread,
Dec 31, 2003, 8:47:09 AM12/31/03
to P6I
As already outlined the current copying GC isn't really thread-safe. A
possible solution is to suspend all threads, while the shared
interpreter is running garbage collection.

A shared-all thread type could use the same scheme, instead of
explicitely declare a PMC to be shared, all is shared implicitely and is
living in the shared interpreters arena_base.

OTOH the copying collector has disadvantages for the unthreaded case too
(e.g. hash buckets can get moved during string_compare). We already have
a non-moving GC system selectable at configure time. But when the
external LEA allocator is used, memory allocation isn't thread safe.
Libc's allocator is based on ptmalloc[1] - an early offspring of the LEA
allocator, but ptmalloc isn't portable.

We can use the underlaying C-library as our allocator, but there are
AFAIK speed issues on some systems.

And finally: Recent issues with fedora and non-executable JIT code also
show a demand for an allocator inside parrot.

Writing a full-fledged allocator isn't trivial. Following the glossary
and bibliography links from e.g. [2] may keep you reading for a while :)

Having an own allocator would have another advantage: We can pass hints
to the allocator about the usage of the memory block. Executable code
for JIT is long-living and unlikely to be resized. String buffers used
e.g. in string_append, freeze, or Parrot_sprintf are very likely of
having a short life-time and being subject to resizing.

leo

[1] http://www.malloc.de
[2] http://www.memorymanagement.org

0 new messages