Re: 8.4 Performance improvements: was Re: Proposal of tunable fix for scalability of 8.4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux