Bruce Momjian wrote: > Tom Lane wrote: > > Gregory Stark <stark@xxxxxxxxxxxxxxxx> writes: > > > Tom Lane <tgl@xxxxxxxxxxxxx> writes: > > >> Ugh. So apparently, we actually need to special-case Solaris to not > > >> believe that posix_fadvise works, or we'll waste cycles uselessly > > >> calling a do-nothing function. Thanks, Sun. > > > > > Do we? Or do we just document that setting effective_cache_size on Solaris > > > won't help? > > > > I assume you meant effective_io_concurrency. We'd still need a special > > case because the default is currently hard-wired at 1, not 0, if > > configure thinks the function exists. Also there's a posix_fadvise call > > in xlog.c that that parameter doesn't control anyhow. > > The attached patch prevents the posix_fadvise() probe in configure on > Solaris, and adds a comment why. I have already documented why Solaris > can't do effective_io_concurrency. Updated patch applied; open item removed as complete. -- Bruce Momjian <bruce@xxxxxxxxxx> http://momjian.us EnterpriseDB http://enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
Index: configure =================================================================== RCS file: /cvsroot/pgsql/configure,v retrieving revision 1.635 diff -c -c -r1.635 configure *** configure 4 Apr 2009 21:55:49 -0000 1.635 --- configure 7 Apr 2009 22:45:59 -0000 *************** *** 16324,16331 **** ! ! for ac_func in cbrt dlopen fcvt fdatasync getpeereid getpeerucred getrlimit memmove poll posix_fadvise pstat readlink setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 --- 16324,16330 ---- ! for ac_func in cbrt dlopen fcvt fdatasync getpeereid getpeerucred getrlimit memmove poll pstat readlink setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 *************** *** 16419,16427 **** done ! { echo "$as_me:$LINENO: checking whether fdatasync is declared" >&5 ! echo $ECHO_N "checking whether fdatasync is declared... $ECHO_C" >&6; } ! if test "${ac_cv_have_decl_fdatasync+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF --- 16418,16434 ---- done ! # posix_fadvise() is a no-op on Solaris, so don't incur function overhead ! # by calling it, 2009-04-02 ! # http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c ! if test "$PORTNAME" != "solaris"; then ! ! for ac_func in posix_fadvise ! do ! as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` ! { echo "$as_me:$LINENO: checking for $ac_func" >&5 ! echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } ! if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF *************** *** 16430,16442 **** cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ ! #include <unistd.h> int main () { ! #ifndef fdatasync ! (void) fdatasync; #endif ; --- 16437,16539 ---- cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ ! /* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. ! For example, HP-UX 11i <limits.h> declares gettimeofday. */ ! #define $ac_func innocuous_$ac_func ! ! /* System header to define __stub macros and hopefully few prototypes, ! which can conflict with char $ac_func (); below. ! Prefer <limits.h> to <assert.h> if __STDC__ is defined, since ! <limits.h> exists even on freestanding compilers. */ ! ! #ifdef __STDC__ ! # include <limits.h> ! #else ! # include <assert.h> ! #endif ! ! #undef $ac_func ! ! /* Override any GCC internal prototype to avoid an error. ! Use char because int might match the return type of a GCC ! builtin and then its argument prototype would still apply. */ ! #ifdef __cplusplus ! extern "C" ! #endif ! char $ac_func (); ! /* The GNU C library defines this for functions which it implements ! to always fail with ENOSYS. Some functions are actually named ! something starting with __ and the normal name is an alias. */ ! #if defined __stub_$ac_func || defined __stub___$ac_func ! choke me ! #endif int main () { ! return $ac_func (); ! ; ! return 0; ! } ! _ACEOF ! rm -f conftest.$ac_objext conftest$ac_exeext ! if { (ac_try="$ac_link" ! case "(($ac_try" in ! *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ! *) ac_try_echo=$ac_try;; ! esac ! eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ! (eval "$ac_link") 2>conftest.er1 ! ac_status=$? ! grep -v '^ *+' conftest.er1 >conftest.err ! rm -f conftest.er1 ! cat conftest.err >&5 ! echo "$as_me:$LINENO: \$? = $ac_status" >&5 ! (exit $ac_status); } && { ! test -z "$ac_c_werror_flag" || ! test ! -s conftest.err ! } && test -s conftest$ac_exeext && ! $as_test_x conftest$ac_exeext; then ! eval "$as_ac_var=yes" ! else ! echo "$as_me: failed program was:" >&5 ! sed 's/^/| /' conftest.$ac_ext >&5 ! ! eval "$as_ac_var=no" ! fi ! ! rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ ! conftest$ac_exeext conftest.$ac_ext ! fi ! ac_res=`eval echo '${'$as_ac_var'}'` ! { echo "$as_me:$LINENO: result: $ac_res" >&5 ! echo "${ECHO_T}$ac_res" >&6; } ! if test `eval echo '${'$as_ac_var'}'` = yes; then ! cat >>confdefs.h <<_ACEOF ! #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 ! _ACEOF ! ! fi ! done ! ! { echo "$as_me:$LINENO: checking whether posix_fadvise is declared" >&5 ! echo $ECHO_N "checking whether posix_fadvise is declared... $ECHO_C" >&6; } ! if test "${ac_cv_have_decl_posix_fadvise+set}" = set; then ! echo $ECHO_N "(cached) $ECHO_C" >&6 ! else ! cat >conftest.$ac_ext <<_ACEOF ! /* confdefs.h. */ ! _ACEOF ! cat confdefs.h >>conftest.$ac_ext ! cat >>conftest.$ac_ext <<_ACEOF ! /* end confdefs.h. */ ! #include <fcntl.h> ! ! int ! main () ! { ! #ifndef posix_fadvise ! (void) posix_fadvise; #endif ; *************** *** 16460,16496 **** test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ! ac_cv_have_decl_fdatasync=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ! ac_cv_have_decl_fdatasync=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ! { echo "$as_me:$LINENO: result: $ac_cv_have_decl_fdatasync" >&5 ! echo "${ECHO_T}$ac_cv_have_decl_fdatasync" >&6; } ! if test $ac_cv_have_decl_fdatasync = yes; then cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_FDATASYNC 1 _ACEOF else cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_FDATASYNC 0 _ACEOF fi ! { echo "$as_me:$LINENO: checking whether posix_fadvise is declared" >&5 ! echo $ECHO_N "checking whether posix_fadvise is declared... $ECHO_C" >&6; } ! if test "${ac_cv_have_decl_posix_fadvise+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF --- 16557,16595 ---- test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ! ac_cv_have_decl_posix_fadvise=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ! ac_cv_have_decl_posix_fadvise=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ! { echo "$as_me:$LINENO: result: $ac_cv_have_decl_posix_fadvise" >&5 ! echo "${ECHO_T}$ac_cv_have_decl_posix_fadvise" >&6; } ! if test $ac_cv_have_decl_posix_fadvise = yes; then cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_POSIX_FADVISE 1 _ACEOF else cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_POSIX_FADVISE 0 _ACEOF fi ! fi ! ! { echo "$as_me:$LINENO: checking whether fdatasync is declared" >&5 ! echo $ECHO_N "checking whether fdatasync is declared... $ECHO_C" >&6; } ! if test "${ac_cv_have_decl_fdatasync+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF *************** *** 16499,16511 **** cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ ! #include <fcntl.h> int main () { ! #ifndef posix_fadvise ! (void) posix_fadvise; #endif ; --- 16598,16610 ---- cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ ! #include <unistd.h> int main () { ! #ifndef fdatasync ! (void) fdatasync; #endif ; *************** *** 16529,16556 **** test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ! ac_cv_have_decl_posix_fadvise=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ! ac_cv_have_decl_posix_fadvise=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ! { echo "$as_me:$LINENO: result: $ac_cv_have_decl_posix_fadvise" >&5 ! echo "${ECHO_T}$ac_cv_have_decl_posix_fadvise" >&6; } ! if test $ac_cv_have_decl_posix_fadvise = yes; then cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_POSIX_FADVISE 1 _ACEOF else cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_POSIX_FADVISE 0 _ACEOF --- 16628,16655 ---- test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ! ac_cv_have_decl_fdatasync=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ! ac_cv_have_decl_fdatasync=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ! { echo "$as_me:$LINENO: result: $ac_cv_have_decl_fdatasync" >&5 ! echo "${ECHO_T}$ac_cv_have_decl_fdatasync" >&6; } ! if test $ac_cv_have_decl_fdatasync = yes; then cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_FDATASYNC 1 _ACEOF else cat >>confdefs.h <<_ACEOF ! #define HAVE_DECL_FDATASYNC 0 _ACEOF Index: configure.in =================================================================== RCS file: /cvsroot/pgsql/configure.in,v retrieving revision 1.593 diff -c -c -r1.593 configure.in *** configure.in 4 Apr 2009 21:55:50 -0000 1.593 --- configure.in 7 Apr 2009 22:45:59 -0000 *************** *** 1141,1150 **** AC_FUNC_ACCEPT_ARGTYPES PGAC_FUNC_GETTIMEOFDAY_1ARG ! AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getpeereid getpeerucred getrlimit memmove poll posix_fadvise pstat readlink setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs]) ! AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>]) AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>]) AC_CHECK_DECLS([strlcat, strlcpy]) # This is probably only present on Darwin, but may as well check always AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>]) --- 1141,1157 ---- AC_FUNC_ACCEPT_ARGTYPES PGAC_FUNC_GETTIMEOFDAY_1ARG ! AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getpeereid getpeerucred getrlimit memmove poll pstat readlink setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs]) ! # posix_fadvise() is a no-op on Solaris, so don't incur function overhead ! # by calling it, 2009-04-02 ! # http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c ! if test "$PORTNAME" != "solaris"; then ! AC_CHECK_FUNCS(posix_fadvise) AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>]) + fi + + AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>]) AC_CHECK_DECLS([strlcat, strlcpy]) # This is probably only present on Darwin, but may as well check always AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
-- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance