Thread local allocation
Bryce McKinlay
bryce@waitaki.otago.ac.nz
Tue Feb 12 22:05:00 GMT 2002
Boehm, Hans wrote:
>There are two reasons it isn't enabled for *-*-linux*:
>>1) I can only test X86 and Itanium.
>>2) Some of the code, particularly in specific.c, assumes an Itanium-like or
>stronger memory model. In particular, if you look at the code for
>setspecific(), it would need a memory barrier on Alpha, as would the
>corresponding inlined getspecific routine.
>
Right. It seems to me that the inlined getspecific (in specific.h) would
not need any barrier because it does not do any writes? So how about a
GC_memory_write_barrier() before:
*(volatile tse **)(key -> hash + hash_val) = entry;
in setspecific, and:
*cache_ptr = entry;
in slow_getspecific? I'm not sure about remove_specific.
>I would vote for turning this on on a case-by-case basis, after some
>(multiprocessor!) testing. I would guess that for a SPARC running in TSO
>mode, it's safe to turn it on as it is. The same is probably true for MIPS.
>For Alpha, it may be safe to turn on if you define USE_PTHREAD_SPECIFIC, so
>that it uses the official pthread-defined thread local storage primitives
>instead of my (faster on X86) hack. Or you would have to add the memory
>barriers. I don't claim to know anything about the PowerPC memory model,
>but I suspect that if it works for Alpha, it probably works on PowerPC, too.
>
Hmm. I can't easily test MP PowerPC or Alpha, but I'd like to turn it on
anyway in order to get the performance increase. Perhaps we could leave
it disabled (USE_PTHREAD_SPECIFIC) for alpha since it seems like that
would be the most problematic one.
I might do a test with and without USE_PTHREAD_SPECIFIC to make sure
that all this is worthwhile, but I suspect it will be on PowerPC. The
linuxthreads implementation of pthread_self() on PPC looks far far worse
than x86.
regards
Bryce.
More information about the Java
mailing list