• Tom Lane's avatar
    Use ppoll(2), if available, to wait for input in pgbench. · 60e612b6
    Tom Lane authored
    Previously, pgbench always used select(2) for this purpose, but that's
    problematic for very high client counts, because select() can't deal
    with file descriptor numbers larger than FD_SETSIZE.  It's pretty common
    for that to be only 1024 or so, whereas modern OSes can allow many more
    open files than that.  Using poll(2) would surmount that problem, but it
    creates another one: poll()'s timeout resolution is only 1ms, which is
    poor enough to cause problems with --rate specifications approaching or
    exceeding 1K TPS.
    
    On platforms that have ppoll(2), which includes Linux and recent
    FreeBSD, we can use that to avoid the FD_SETSIZE problem without any
    loss of timeout resolution.  Hence, add configure logic to test for
    ppoll(), and use it if available.
    
    This patch introduces an abstraction layer into pgbench that could
    be extended to support other kernel event-wait APIs such as kevents.
    But actually adding such support is a matter for some future patch.
    
    Doug Rady, reviewed by Robert Haas and Fabien Coelho, and whacked around
    a good bit more by me
    
    Discussion: https://postgr.es/m/23D017C9-81B7-484D-8490-FD94DEC4DF59@amazon.com
    60e612b6
linux 1.02 KB