Uthreads do not require TLS
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 30 Jul 2013 02:11:03 +0000 (19:11 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 30 Jul 2013 18:23:03 +0000 (11:23 -0700)
commitb8235ea4090f8219930f52da17affe33c5178528
tree95aaf4bcf1e341a806c4fabb1d031aa2c2f5ccbd
parenta6f23e5562cefd5b2b967864128229ff753d4a20
Uthreads do not require TLS

By default, individual uthreads will not have their own TLS; they will piggyback
off of their vcore's TLS.  The uthread library can handle individual
uthreads having TLS.

Note that thread0 (from glibc) will have TLS, no matter what.   FYI,
thread0's TLS gets used at exit, and needs to be the same as when the
program started (C++ programs, fluidanimate at least).

2LSs choose whether or not their specific uthreads have TLS.  To be
somewhat compatible, pthreads will have them by default.  If you're app
doesn't need TLS, call pthread_need_tls(FALSE), preferably before call
pthread_create().

For reference, this lowers the latency of the context switch (via the
untuned pthread_test 100 100000 1) from ~360ns -> 194ns.  That includes
3 mcs locks in the 2LS, which we could minimize.
tests/lock_test.c
tests/pthread_test.c
user/parlib/include/uthread.h
user/parlib/include/x86/vcore64.h
user/parlib/uthread.c
user/pthread/pthread.c
user/pthread/pthread.h