Unsupported effective_io_concurrency platforms

Started by Bruce Momjianalmost 17 years ago6 messages
#1Bruce Momjian
bruce@momjian.us

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. +

#2Joshua D. Drake
jd@commandprompt.com
In reply to: Bruce Momjian (#1)
Re: Unsupported effective_io_concurrency platforms

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

#3Peter Eisentraut
peter_e@gmx.net
In reply to: Joshua D. Drake (#2)
Re: Unsupported effective_io_concurrency platforms

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.

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#3)
Re: Unsupported effective_io_concurrency platforms

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

#5Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#4)
1 attachment(s)
Re: Unsupported effective_io_concurrency platforms

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. +

Attachments:

/pgpatches/guctext/plainDownload
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;
  					}
  				}
#6Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#5)
1 attachment(s)
Re: Unsupported effective_io_concurrency platforms

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. +

Attachments:

/rtmp/difftext/x-diffDownload
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.")
  		},