• Robert Haas's avatar
    Make pgbench use erand48() rather than random(). · 4af43ee3
    Robert Haas authored
    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.
    4af43ee3
geqo_selection.c 3.45 KB