-
- Downloads
Make pgbench use erand48() rather than random().
glibc renders random() thread-safe by wrapping a futex lock around it; testing reveals that this limits the performance of pgbench on machines with many CPU cores. Rather than switching to random_r(), which is only available on GNU systems and crashes unless you use undocumented alchemy to initialize the random state properly, switch to our built-in implementation of erand48(), which is both thread-safe and concurrent. Since the list of reasons not to use the operating system's erand48() is getting rather long, rename ours to pg_erand48() (and similarly for our implementations of lrand48() and srand48()) and just always use those. We were already doing this on Cygwin anyway, and the glibc implementation is not quite thread-safe, so pgbench wouldn't be able to use that either. Per discussion with Tom Lane.
Showing
- configure 1 addition, 13 deletionsconfigure
- configure.in 1 addition, 7 deletionsconfigure.in
- contrib/pgbench/pgbench.c 15 additions, 17 deletionscontrib/pgbench/pgbench.c
- src/backend/optimizer/geqo/geqo_random.c 1 addition, 1 deletionsrc/backend/optimizer/geqo/geqo_random.c
- src/backend/optimizer/geqo/geqo_selection.c 3 additions, 3 deletionssrc/backend/optimizer/geqo/geqo_selection.c
- src/include/optimizer/geqo.h 1 addition, 1 deletionsrc/include/optimizer/geqo.h
- src/include/pg_config.h.in 0 additions, 3 deletionssrc/include/pg_config.h.in
- src/include/port.h 3 additions, 6 deletionssrc/include/port.h
- src/port/Makefile 2 additions, 2 deletionssrc/port/Makefile
- src/port/erand48.c 11 additions, 7 deletionssrc/port/erand48.c
- src/port/random.c 1 addition, 1 deletionsrc/port/random.c
- src/port/srandom.c 1 addition, 1 deletionsrc/port/srandom.c
Loading
Please register or sign in to comment