[RFC] Enable use of UserLocal Register (ULRI) if detected (patches)

Warner Losh wlosh at bsdimp.com
Wed Feb 19 18:12:59 UTC 2014


On Feb 19, 2014, at 11:01 AM, Robert Watson wrote:
> On Wed, 19 Feb 2014, Warner Losh wrote:
> 
>>> For more information about the ULRI see "MIPS Architecture for Programmers Volume III"  section 9.9 UserLocal Register (CP0 Register 4, Select 2).
>> 
>> Thanks for doing this!
> 
> I would note, BTW, that the current use of TLS in malloc()/free() and today's MIPS exception handler for TLS implementation do introduce a very measurable overhead.  I'm left wondering if there is something we can do for unthreaded processes to avoid taking kernel traps on every memory allocation and free for MIPSes without ULRI.  (Note that that problem is present before Stacey's patch: the reason we added ULRI support is that our hardware does support ULRI, and we can therefore avoid that nasty overhead ...)  I understand there's work on a new MIPS ABI that specifies a TLS register not requiring a trap to read on non-ULRI hardware, but I'm not sure how far that is from being available.  Certainly it will require compiler/OS/etc work before it becomes useful to us.

One could easily have a global, static TLS value that gets set at startup, and cleared when the first thread is forked. The gettls calls then become something akin to

if (global_tls) return global_tls; else return _get_tls();

without changes to the ABI at all...

Warner




More information about the freebsd-mips mailing list