Thread: Unsupported effective_io_concurrency platforms

Unsupported effective_io_concurrency platforms

From
Bruce Momjian
Date:
If a platform doesn't have posix_fadvise(), we don't allow
effective_io_concurrency to be set to anything but zero:
test=> set  effective_io_concurrency = 1;ERROR:  1 is outside the valid range for parameter "effective_io_concurrency"
(0.. 0)test=> set  effective_io_concurrency = 0;SET
 

Do we want to give a more informative error message, like "not supported
on this platform?"

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


Re: Unsupported effective_io_concurrency platforms

From
"Joshua D. Drake"
Date:
On Mon, 2009-03-23 at 16:21 -0400, Bruce Momjian wrote:
> If a platform doesn't have posix_fadvise(), we don't allow
> effective_io_concurrency to be set to anything but zero:
> 
>     test=> set  effective_io_concurrency = 1;
>     ERROR:  1 is outside the valid range for parameter "effective_io_concurrency" (0 .. 0)
>     test=> set  effective_io_concurrency = 0;
>     SET
> 
> Do we want to give a more informative error message, like "not supported
> on this platform?"

I would say so.

Joshua D. Drake


> 
> -- 
>   Bruce Momjian  <bruce@momjian.us>        http://momjian.us
>   EnterpriseDB                             http://enterprisedb.com
> 
>   + If your life is a hard drive, Christ can be your backup. +
> 
-- 
PostgreSQL - XMPP: jdrake@jabber.postgresql.org  Consulting, Development, Support, Training  503-667-4564 -
http://www.commandprompt.com/ The PostgreSQL Company, serving since 1997
 



Re: Unsupported effective_io_concurrency platforms

From
Peter Eisentraut
Date:
Joshua D. Drake wrote:
> On Mon, 2009-03-23 at 16:21 -0400, Bruce Momjian wrote:
>> If a platform doesn't have posix_fadvise(), we don't allow
>> effective_io_concurrency to be set to anything but zero:
>>
>>     test=> set  effective_io_concurrency = 1;
>>     ERROR:  1 is outside the valid range for parameter "effective_io_concurrency" (0 .. 0)
>>     test=> set  effective_io_concurrency = 0;
>>     SET
>>
>> Do we want to give a more informative error message, like "not supported
>> on this platform?"
> 
> I would say so.

The trick will be to fit this into the GUC framework.


Re: Unsupported effective_io_concurrency platforms

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Joshua D. Drake wrote:
> Do we want to give a more informative error message, like "not supported
> on this platform?"

> The trick will be to fit this into the GUC framework.

You could do it by enforcing the limit in an assign hook, but I'm
not convinced it's worth the trouble.
        regards, tom lane


Re: Unsupported effective_io_concurrency platforms

From
Bruce Momjian
Date:
Tom Lane wrote:
> Peter Eisentraut <peter_e@gmx.net> writes:
> > Joshua D. Drake wrote:
> > Do we want to give a more informative error message, like "not supported
> > on this platform?"
>
> > The trick will be to fit this into the GUC framework.
>
> You could do it by enforcing the limit in an assign hook, but I'm
> not convinced it's worth the trouble.

I have created a patch to at least display a more helpful message,
without being specific:

    test=> set effective_io_concurrency = 1;
    ERROR:  parameter "effective_io_concurrency" cannot be changed from 0

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.497
diff -c -c -r1.497 guc.c
*** src/backend/utils/misc/guc.c    9 Mar 2009 14:34:34 -0000    1.497
--- src/backend/utils/misc/guc.c    28 Mar 2009 23:40:52 -0000
***************
*** 4738,4747 ****
                      }
                      if (newval < conf->min || newval > conf->max)
                      {
!                         ereport(elevel,
!                                 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
!                                  errmsg("%d is outside the valid range for parameter \"%s\" (%d .. %d)",
!                                         newval, name, conf->min, conf->max)));
                          return false;
                      }
                  }
--- 4738,4753 ----
                      }
                      if (newval < conf->min || newval > conf->max)
                      {
!                         if (conf->min == conf->max)
!                             ereport(elevel,
!                                     (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
!                                      errmsg("parameter \"%s\" cannot be changed from %d",
!                                             name, conf->min)));
!                         else
!                             ereport(elevel,
!                                     (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
!                                      errmsg("%d is outside the valid range for parameter \"%s\" (%d .. %d)",
!                                             newval, name, conf->min, conf->max)));
                          return false;
                      }
                  }
***************
*** 4810,4819 ****
                      }
                      if (newval < conf->min || newval > conf->max)
                      {
!                         ereport(elevel,
!                                 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
!                                  errmsg("%g is outside the valid range for parameter \"%s\" (%g .. %g)",
!                                         newval, name, conf->min, conf->max)));
                          return false;
                      }
                  }
--- 4816,4831 ----
                      }
                      if (newval < conf->min || newval > conf->max)
                      {
!                         if (conf->min == conf->max)
!                             ereport(elevel,
!                                     (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
!                                      errmsg("parameter \"%s\" cannot be changed from %g",
!                                             name, conf->min)));
!                         else
!                             ereport(elevel,
!                                     (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
!                                      errmsg("%g is outside the valid range for parameter \"%s\" (%g .. %g)",
!                                             newval, name, conf->min, conf->max)));
                          return false;
                      }
                  }

Re: Unsupported effective_io_concurrency platforms

From
Bruce Momjian
Date:
Bruce Momjian wrote:
> Tom Lane wrote:
> > Peter Eisentraut <peter_e@gmx.net> writes:
> > > Joshua D. Drake wrote:
> > > Do we want to give a more informative error message, like "not supported
> > > on this platform?"
> >
> > > The trick will be to fit this into the GUC framework.
> >
> > You could do it by enforcing the limit in an assign hook, but I'm
> > not convinced it's worth the trouble.
>
> I have created a patch to at least display a more helpful message,
> without being specific:
>
>     test=> set effective_io_concurrency = 1;
>     ERROR:  parameter "effective_io_concurrency" cannot be changed from 0

I fixed this an easier way, by making the parameter PGC_INTERNAL on
systems that don't have posix_fadvise().

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.497
diff -c -c -r1.497 guc.c
*** src/backend/utils/misc/guc.c    9 Mar 2009 14:34:34 -0000    1.497
--- src/backend/utils/misc/guc.c    2 Apr 2009 19:52:49 -0000
***************
*** 1713,1719 ****
      },

      {
!         {"effective_io_concurrency", PGC_USERSET, RESOURCES,
              gettext_noop("Number of simultaneous requests that can be handled efficiently by the disk subsystem."),
              gettext_noop("For RAID arrays, this should be approximately the number of drive spindles in the array.")
          },
--- 1713,1725 ----
      },

      {
!         {"effective_io_concurrency",
! #ifdef USE_PREFETCH
!         PGC_USERSET,
! #else
!         PGC_INTERNAL,
! #endif
!         RESOURCES,
              gettext_noop("Number of simultaneous requests that can be handled efficiently by the disk subsystem."),
              gettext_noop("For RAID arrays, this should be approximately the number of drive spindles in the array.")
          },