mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-12 09:27:04 +08:00
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
37 lines
1.0 KiB
Plaintext
37 lines
1.0 KiB
Plaintext
# src/template/linux
|
|
|
|
# Prefer unnamed POSIX semaphores if available, unless user overrides choice
|
|
if test x"$PREFERRED_SEMAPHORES" = x"" ; then
|
|
PREFERRED_SEMAPHORES=UNNAMED_POSIX
|
|
fi
|
|
|
|
# Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise
|
|
# This is also required for ppoll(2), and perhaps other things
|
|
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
|
|
|
|
# If --enable-profiling is specified, we need -DLINUX_PROFILE
|
|
PLATFORM_PROFILE_FLAGS="-DLINUX_PROFILE"
|
|
|
|
if test "$SUN_STUDIO_CC" = "yes" ; then
|
|
CC="$CC -Xa" # relaxed ISO C mode
|
|
CFLAGS="-v" # -v is like gcc -Wall
|
|
if test "$enable_debug" != yes; then
|
|
CFLAGS="$CFLAGS -O" # any optimization breaks debug
|
|
fi
|
|
|
|
# Pick the right test-and-set (TAS) code for the Sun compiler.
|
|
# We would like to use in-line assembler, but the compiler
|
|
# requires *.il files to be on every compile line, making
|
|
# the build system too fragile.
|
|
case $host_cpu in
|
|
sparc)
|
|
need_tas=yes
|
|
tas_file=sunstudio_sparc.s
|
|
;;
|
|
i?86|x86_64)
|
|
need_tas=yes
|
|
tas_file=sunstudio_x86.s
|
|
;;
|
|
esac
|
|
fi
|