mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			4501 lines
		
	
	
		
			191 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			4501 lines
		
	
	
		
			191 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
From mscott@sacadia.com Wed Nov 15 14:50:19 2000
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id OAA11583
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 15 Nov 2000 14:50:13 -0500 (EST)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id LAA09998;
 | 
						|
	Wed, 15 Nov 2000 11:35:33 -0800 (PST)
 | 
						|
Date: Wed, 15 Nov 2000 11:35:33 -0800 (PST)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: "Mikheev, Vadim" <vmikheev@SECTORBASE.COM>,
 | 
						|
        Bruce Momjian <pgman@candle.pha.pa.us>, Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
Subject: Please help with some advice
 | 
						|
Message-ID: <Pine.GSO.4.10.10011151053260.9940-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Status: ORr
 | 
						|
 | 
						|
Dear Sirs,
 | 
						|
 | 
						|
I have been lurking on the PostgreSQL hackers list for about 3 months now
 | 
						|
and your names comes up more than any with helpful info about the project
 | 
						|
so I was hoping you could help me.
 | 
						|
 | 
						|
Let me cut to the chase.  I have been experimenting with 7.0.2 source to
 | 
						|
see if I could create a mutlti-threaded version of the backend so
 | 
						|
I could link directly from java ( I have a fe<->be protocol that I use for
 | 
						|
my apps). Needless to say I got into much more than I bargained for.  I
 | 
						|
now have a version that works and it has some nice benefits that are very
 | 
						|
helpful to a project that I am working on.  What I gained was
 | 
						|
 | 
						|
prepared statements outside of spi
 | 
						|
batched commits (fsync)
 | 
						|
one connection per thread
 | 
						|
	multiple threads per process
 | 
						|
		multiple processes per installation
 | 
						|
 | 
						|
I never really intended for anyone else to see the work so I drifted
 | 
						|
pretty far from the original code.  I also ended up using Solaris threads
 | 
						|
rather than pthreads,  I did my own implementation of the bufmgr.c and
 | 
						|
gram.y, and used Solaris implementation of mutex in place of S_LOCK and
 | 
						|
TAS. I grabbed all global variables and put them in an environment
 | 
						|
variable that is thread local.  I also did some really stupid
 | 
						|
things like making TransactionId uint64 and making all my inserts use the
 | 
						|
same oid.
 | 
						|
 | 
						|
My question is this.  I would like to get some critical feedback and
 | 
						|
suggestions about the work from others.  What is the best way to go about
 | 
						|
this?  I thought about trying to create a project on greatbridge.org
 | 
						|
but I am rather new to open source and the code needs commented properly
 | 
						|
and cleaned up before too many try and look at it.
 | 
						|
 | 
						|
Any suggestions would be greatly appreciated.
 | 
						|
 | 
						|
 | 
						|
Thanks in advance,
 | 
						|
 | 
						|
Myron Scott
 | 
						|
 | 
						|
 | 
						|
 | 
						|
From mscott@sacadia.com Thu Nov 16 17:19:45 2000
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id RAA04315
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 16 Nov 2000 17:19:43 -0500 (EST)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id OAA11449;
 | 
						|
	Thu, 16 Nov 2000 14:05:15 -0800 (PST)
 | 
						|
Date: Thu, 16 Nov 2000 14:05:15 -0800 (PST)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: Bruce Momjian <pgman@candle.pha.pa.us>
 | 
						|
cc: "Mikheev, Vadim" <vmikheev@SECTORBASE.COM>, Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
Subject: Re: Please help with some advice
 | 
						|
In-Reply-To: <200011160533.AAA27886@candle.pha.pa.us>
 | 
						|
Message-ID: <Pine.GSO.4.10.10011161401570.11441-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Status: OR
 | 
						|
 | 
						|
Bruce Momjian wrote:
 | 
						|
 | 
						|
>I am curious how you isolated each thread.   It seems we pretty much
 | 
						|
>assume all our memory is controlled by a single query in the process.
 | 
						|
                                                                              
 | 
						|
 | 
						|
I moved all global variables to a thread global variable which is accessed
 | 
						|
by the method GetEnv().  Which looks like this
 | 
						|
 | 
						|
Env* GetEnv(void) {
 | 
						|
	Env* env;
 | 
						|
	thr_getspecific(*envkey,(void*)&env);
 | 
						|
	return env;
 | 
						|
}
 | 
						|
 | 
						|
The Env struct includes the CurrentMemoryContext, TopMemoryContext,
 | 
						|
PortalHeapMemory for each instance of a connection (one thread per
 | 
						|
connection). So, for example,
 | 
						|
EndPortalAllocMode uses GetEnv()->CurrentMemoryContext
 | 
						|
 | 
						|
void
 | 
						|
EndPortalAllocMode()
 | 
						|
{
 | 
						|
	PortalHeapMemory context;
 | 
						|
 | 
						|
	AssertState(PortalManagerEnabled);
 | 
						|
	AssertState(IsA(GetEnv()->CurrentMemoryContext,
 | 
						|
PortalHeapMemory));
 | 
						|
 | 
						|
	context = (PortalHeapMemory) GetEnv()->CurrentMemoryContext;
 | 
						|
	AssertState(PointerIsValid(context->block));		/* XXX
 | 
						|
Trap(...) */
 | 
						|
 | 
						|
	/* free current mode */
 | 
						|
	AllocSetReset(&HEAPMEMBLOCK(context)->setData);
 | 
						|
	MemoryContextFree((MemoryContext)
 | 
						|
PortalHeapMemoryGetVariableMemory(context),
 | 
						|
					  context->block);
 | 
						|
 | 
						|
	/* restore previous mode */
 | 
						|
	context->block = FixedStackPop(&context->stackData);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
From vmikheev@SECTORBASE.COM Thu Nov 16 17:23:22 2000
 | 
						|
Received: from sectorbase2.sectorbase.com ([208.48.122.131])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with SMTP id RAA04562
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 16 Nov 2000 17:23:21 -0500 (EST)
 | 
						|
Received: by sectorbase2.sectorbase.com with Internet Mail Service (5.5.2650.21)
 | 
						|
	id <V8XQB5RW>; Thu, 16 Nov 2000 14:05:24 -0800
 | 
						|
Message-ID: <8F4C99C66D04D4118F580090272A7A234D318D@sectorbase1.sectorbase.com>
 | 
						|
From: "Mikheev, Vadim" <vmikheev@SECTORBASE.COM>
 | 
						|
To: "'Myron Scott'" <mscott@sacadia.com>,
 | 
						|
        Bruce Momjian
 | 
						|
  <pgman@candle.pha.pa.us>
 | 
						|
Cc: Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
Subject: RE: Please help with some advice
 | 
						|
Date: Thu, 16 Nov 2000 14:09:30 -0800
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Internet Mail Service (5.5.2650.21)
 | 
						|
Content-Type: text/plain;
 | 
						|
	charset="iso-8859-1"
 | 
						|
Status: ORr
 | 
						|
 | 
						|
I think the question do we want to make backend multy-threaded
 | 
						|
should be discussed in hackers.
 | 
						|
 | 
						|
Vadim
 | 
						|
 | 
						|
> -----Original Message-----
 | 
						|
> From: Myron Scott [mailto:mscott@sacadia.com]
 | 
						|
> Sent: Thursday, November 16, 2000 2:05 PM
 | 
						|
> To: Bruce Momjian
 | 
						|
> Cc: Mikheev, Vadim; Tom Lane
 | 
						|
> Subject: Re: Please help with some advice
 | 
						|
> 
 | 
						|
> 
 | 
						|
> Bruce Momjian wrote:
 | 
						|
> 
 | 
						|
> >I am curious how you isolated each thread.   It seems we pretty much
 | 
						|
> >assume all our memory is controlled by a single query in the process.
 | 
						|
>                                                               
 | 
						|
>                 
 | 
						|
> 
 | 
						|
> I moved all global variables to a thread global variable 
 | 
						|
> which is accessed
 | 
						|
> by the method GetEnv().  Which looks like this
 | 
						|
> 
 | 
						|
> Env* GetEnv(void) {
 | 
						|
> 	Env* env;
 | 
						|
> 	thr_getspecific(*envkey,(void*)&env);
 | 
						|
> 	return env;
 | 
						|
> }
 | 
						|
> 
 | 
						|
> The Env struct includes the CurrentMemoryContext, TopMemoryContext,
 | 
						|
> PortalHeapMemory for each instance of a connection (one thread per
 | 
						|
> connection). So, for example,
 | 
						|
> EndPortalAllocMode uses GetEnv()->CurrentMemoryContext
 | 
						|
> 
 | 
						|
> void
 | 
						|
> EndPortalAllocMode()
 | 
						|
> {
 | 
						|
> 	PortalHeapMemory context;
 | 
						|
> 
 | 
						|
> 	AssertState(PortalManagerEnabled);
 | 
						|
> 	AssertState(IsA(GetEnv()->CurrentMemoryContext,
 | 
						|
> PortalHeapMemory));
 | 
						|
> 
 | 
						|
> 	context = (PortalHeapMemory) GetEnv()->CurrentMemoryContext;
 | 
						|
> 	AssertState(PointerIsValid(context->block));		/* XXX
 | 
						|
> Trap(...) */
 | 
						|
> 
 | 
						|
> 	/* free current mode */
 | 
						|
> 	AllocSetReset(&HEAPMEMBLOCK(context)->setData);
 | 
						|
> 	MemoryContextFree((MemoryContext)
 | 
						|
> PortalHeapMemoryGetVariableMemory(context),
 | 
						|
> 					  context->block);
 | 
						|
> 
 | 
						|
> 	/* restore previous mode */
 | 
						|
> 	context->block = FixedStackPop(&context->stackData);
 | 
						|
> }
 | 
						|
> 
 | 
						|
> 
 | 
						|
> 
 | 
						|
 | 
						|
From mscott@sacadia.com Thu Nov 16 22:16:38 2000
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id WAA14638
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 16 Nov 2000 22:16:36 -0500 (EST)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id TAA11874;
 | 
						|
	Thu, 16 Nov 2000 19:04:48 -0800 (PST)
 | 
						|
Date: Thu, 16 Nov 2000 19:04:48 -0800 (PST)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: Bruce Momjian <pgman@candle.pha.pa.us>
 | 
						|
cc: "Mikheev, Vadim" <vmikheev@SECTORBASE.COM>, Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
Subject: Re: Please help with some advice
 | 
						|
In-Reply-To: <200011170156.UAA11438@candle.pha.pa.us>
 | 
						|
Message-ID: <Pine.GSO.4.10.10011161904140.11870-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Status: ORr
 | 
						|
 | 
						|
Thanks very much, I will post to hackers.
 | 
						|
 | 
						|
Myron
 | 
						|
 | 
						|
 | 
						|
 | 
						|
From pgsql-hackers-owner+M2691@postgresql.org Tue Jan  2 00:30:20 2001
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id AAA08195
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 2 Jan 2001 00:30:19 -0500 (EST)
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with SMTP id f025UjL33335;
 | 
						|
	Tue, 2 Jan 2001 00:30:45 -0500 (EST)
 | 
						|
	(envelope-from pgsql-hackers-owner+M2691@postgresql.org)
 | 
						|
Received: from mailsys01.intnet.net (tmail.wwc.com [198.252.32.143] (may be forged))
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id f025UTL33232
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue, 2 Jan 2001 00:30:32 -0500 (EST)
 | 
						|
	(envelope-from mscott@sacadia.com)
 | 
						|
Received: from [206.112.108.0] (HELO sacadia.com)
 | 
						|
  by mailsys01.intnet.net (CommuniGate Pro SMTP 3.3.2)
 | 
						|
  with ESMTP id 2214231; Tue, 02 Jan 2001 00:29:47 -0500
 | 
						|
Message-ID: <3A5167DB.3050807@sacadia.com>
 | 
						|
Date: Mon, 01 Jan 2001 21:32:11 -0800
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
Reply-To: mscott@sacadia.com
 | 
						|
User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0
 | 
						|
X-Accept-Language: en
 | 
						|
MIME-Version: 1.0
 | 
						|
To: "Ross J. Reedstrom" <reedstrm@rice.edu>
 | 
						|
CC: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Using Threads?
 | 
						|
References: <004401c058fd$fd498d40$f2356880@tracy> <Pine.GSO.4.10.10012032351040.28161-100000@goldengate.kojoworldwide.com.> <20001204113307.B5871@rice.edu>
 | 
						|
Content-Type: text/plain; charset=us-ascii; format=flowed
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
For anyone interested,
 | 
						|
 | 
						|
I have posted my multi-threaded version of PostgreSQL here.
 | 
						|
 | 
						|
http://www.sacadia.com/mtpg.html
 | 
						|
 | 
						|
It is based on 7.0.2 and the TAO CORBA ORB which is here.
 | 
						|
 | 
						|
http://www.cs.wustl.edu/~schmidt/TAO.html
 | 
						|
 | 
						|
Myron Scott
 | 
						|
mkscott@sacadia.com
 | 
						|
 | 
						|
 | 
						|
 | 
						|
From bright@fw.wintelcom.net Tue Jan  2 03:02:28 2001
 | 
						|
Received: from fw.wintelcom.net (bright@ns1.wintelcom.net [209.1.153.20])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id DAA16169
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 2 Jan 2001 03:02:27 -0500 (EST)
 | 
						|
Received: (from bright@localhost)
 | 
						|
	by fw.wintelcom.net (8.10.0/8.10.0) id f0282Vm10623;
 | 
						|
	Tue, 2 Jan 2001 00:02:31 -0800 (PST)
 | 
						|
Date: Tue, 2 Jan 2001 00:02:31 -0800
 | 
						|
From: Alfred Perlstein <bright@wintelcom.net>
 | 
						|
To: Bruce Momjian <pgman@candle.pha.pa.us>
 | 
						|
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Assuming that TAS() will succeed the first time is verboten
 | 
						|
Message-ID: <20010102000230.C19572@fw.wintelcom.net>
 | 
						|
References: <9850.978067943@sss.pgh.pa.us> <200101020759.CAA15836@candle.pha.pa.us>
 | 
						|
Mime-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Content-Disposition: inline
 | 
						|
User-Agent: Mutt/1.2.5i
 | 
						|
In-Reply-To: <200101020759.CAA15836@candle.pha.pa.us>; from pgman@candle.pha.pa.us on Tue, Jan 02, 2001 at 02:59:20AM -0500
 | 
						|
Status: OR
 | 
						|
 | 
						|
* Bruce Momjian <pgman@candle.pha.pa.us> [010101 23:59] wrote:
 | 
						|
> > Alfred Perlstein <bright@wintelcom.net> writes:
 | 
						|
> > > One trick that may help is calling sched_yield(2) on a lock miss,
 | 
						|
> > > it's a POSIX call and quite new so you'd need a 'configure' test
 | 
						|
> > > for it.
 | 
						|
> > 
 | 
						|
> > The author of the current s_lock code seems to have thought that
 | 
						|
> > select() with a zero delay would do the equivalent of sched_yield().
 | 
						|
> > I'm not sure if that's true on very many kernels, if indeed any...
 | 
						|
> > 
 | 
						|
> > I doubt we could buy much by depending on sched_yield(); if you want
 | 
						|
> > to assume POSIX facilities, ISTM you might as well go for user-space
 | 
						|
> > semaphores and forget the whole TAS mechanism.
 | 
						|
> 
 | 
						|
> 
 | 
						|
> Another issue is that sched_yield brings in the pthreads library/hooks
 | 
						|
> on some OS's, which we certainly want to avoid.
 | 
						|
 | 
						|
I know it's a major undertaking, but since the work is sort of done,
 | 
						|
have you guys considered the port to solaris threads and seeing about
 | 
						|
making a pthreads port of that?
 | 
						|
 | 
						|
I know it would probably get you considerable gains under Windows
 | 
						|
at the expense of dropping some really really legacy system.
 | 
						|
 | 
						|
Or you could do what apache (is rumored) does and have it do either
 | 
						|
threads or processes or both...
 | 
						|
 | 
						|
-- 
 | 
						|
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
 | 
						|
"I have the heart of a child; I keep it in a jar on my desk."
 | 
						|
 | 
						|
From pgsql-hackers-owner+M4275@postgresql.org Mon Feb  5 21:45:00 2001
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id VAA09262
 | 
						|
	for <pgman@candle.pha.pa.us>; Mon, 5 Feb 2001 21:44:59 -0500 (EST)
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with SMTP id f162ixx00920;
 | 
						|
	Mon, 5 Feb 2001 21:44:59 -0500 (EST)
 | 
						|
	(envelope-from pgsql-hackers-owner+M4275@postgresql.org)
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id f162fSx00595
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon, 5 Feb 2001 21:41:29 -0500 (EST)
 | 
						|
	(envelope-from mscott@sacadia.com)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id SAA03298
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon, 5 Feb 2001 18:25:05 -0800 (PST)
 | 
						|
Date: Mon, 5 Feb 2001 18:25:05 -0800 (PST)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Using Threads?
 | 
						|
Message-ID: <Pine.GSO.4.10.10102051823210.3289-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
I have put a new version of my multi-threaded
 | 
						|
postgresql experiment at
 | 
						|
 | 
						|
http://www.sacadia.com/mtpg.html
 | 
						|
 | 
						|
This one actually works.  I have added a server
 | 
						|
based on omniORB, a CORBA 2.3 ORB from ATT.  It
 | 
						|
   is much smaller than TAO and uses the thread per
 | 
						|
connection model.  I haven't added the java side
 | 
						|
of the JNI interface yet but the C++ side is there.
 | 
						|
 | 
						|
It's still not stable but it is much better than
 | 
						|
the last.
 | 
						|
 | 
						|
Myron Scott
 | 
						|
mkscott@sacadia.com
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
From pgsql-hackers-owner+M4304@postgresql.org Tue Feb  6 10:24:21 2001
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id KAA22027
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 6 Feb 2001 10:24:20 -0500 (EST)
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with SMTP id f16FOBx97182;
 | 
						|
	Tue, 6 Feb 2001 10:24:11 -0500 (EST)
 | 
						|
	(envelope-from pgsql-hackers-owner+M4304@postgresql.org)
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id f16FLWx96814
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue, 6 Feb 2001 10:21:33 -0500 (EST)
 | 
						|
	(envelope-from mscott@sacadia.com)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id HAA04170;
 | 
						|
	Tue, 6 Feb 2001 07:05:04 -0800 (PST)
 | 
						|
Date: Tue, 6 Feb 2001 07:05:04 -0800 (PST)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: Karel Zak <zakkr@zf.jcu.cz>
 | 
						|
cc: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Using Threads
 | 
						|
In-Reply-To: <Pine.LNX.3.96.1010206101030.20355B-100000@ara.zf.jcu.cz>
 | 
						|
Message-ID: <Pine.GSO.4.10.10102060650250.4153-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
 | 
						|
> 
 | 
						|
>  Sorry I haven't time to see and test your experiment,
 | 
						|
> but I have a question. How you solve memory management?
 | 
						|
> The current mmgr is based on global variable 
 | 
						|
> CurrentMemoryContext that is very often changed and used.
 | 
						|
>  Use you for this locks? If yes it is probably problematic
 | 
						|
> point for perfomance.
 | 
						|
> 
 | 
						|
> 			Karel
 | 
						|
> 
 | 
						|
 | 
						|
There are many many globals I had to work around including all the memory
 | 
						|
management stuff.  I basically threw everything into and "environment"
 | 
						|
variable which I stored in a thread specific using thr_setspecific.
 | 
						|
 | 
						|
Performance is acually very good for what I am doing.  I was able to batch
 | 
						|
commit transactions which cuts down on fsync calls, use prepared
 | 
						|
statements from my client using CORBA, and the various locking calls for
 | 
						|
the threads (cond_wait,mutex_lock, and sema_wait) seem pretty fast.  I did
 | 
						|
some performance tests for inserts 
 | 
						|
 | 
						|
20 clients, 900 inserts per client, 1 insert per transaction, 4 different
 | 
						|
tables.
 | 
						|
 | 
						|
7.0.2    About    10:52 average completion
 | 
						|
multi-threaded    2:42 average completion
 | 
						|
7.1beta3          1:13 average completion
 | 
						|
 | 
						|
If I increased the number of inserts per transaction, multi-threaded got
 | 
						|
closer to 7.1 for inserts.  I haven't tested other other types of
 | 
						|
commands
 | 
						|
yet.
 | 
						|
 | 
						|
 | 
						|
Myron Scott
 | 
						|
mkscott@sacadia.com
 | 
						|
 | 
						|
 | 
						|
From pgsql-hackers-owner+M4313@postgresql.org Tue Feb  6 12:32:00 2001
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id MAA29163
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 6 Feb 2001 12:31:59 -0500 (EST)
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with SMTP id f16HVox17454;
 | 
						|
	Tue, 6 Feb 2001 12:31:51 -0500 (EST)
 | 
						|
	(envelope-from pgsql-hackers-owner+M4313@postgresql.org)
 | 
						|
Received: from ara.zf.jcu.cz (ara.zf.jcu.cz [160.217.161.4])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id f16HV6x17323
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue, 6 Feb 2001 12:31:06 -0500 (EST)
 | 
						|
	(envelope-from zakkr@zf.jcu.cz)
 | 
						|
Received: from localhost (zakkr@localhost)
 | 
						|
	by ara.zf.jcu.cz (8.9.3/8.9.3/Debian 8.9.3-21) with SMTP id SAA03980;
 | 
						|
	Tue, 6 Feb 2001 18:31:02 +0100
 | 
						|
Date: Tue, 6 Feb 2001 18:31:02 +0100 (CET)
 | 
						|
From: Karel Zak <zakkr@zf.jcu.cz>
 | 
						|
To: Myron Scott <mscott@sacadia.com>
 | 
						|
cc: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Using Threads
 | 
						|
In-Reply-To: <Pine.GSO.4.10.10102060650250.4153-100000@goldengate.kojoworldwide.com.>
 | 
						|
Message-ID: <Pine.LNX.3.96.1010206182112.3799B-100000@ara.zf.jcu.cz>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
 | 
						|
On Tue, 6 Feb 2001, Myron Scott wrote:
 | 
						|
 | 
						|
> There are many many globals I had to work around including all the memory
 | 
						|
> management stuff.  I basically threw everything into and "environment"
 | 
						|
> variable which I stored in a thread specific using thr_setspecific.
 | 
						|
 | 
						|
 Yes, it's good. I working on multi-thread application server
 | 
						|
(http://mape.jcu.cz) and I use for this project some things from PG (like
 | 
						|
mmgr), I planning use same solution.
 | 
						|
 | 
						|
> Performance is acually very good for what I am doing.  I was able to batch
 | 
						|
> commit transactions which cuts down on fsync calls, use prepared
 | 
						|
> statements from my client using CORBA, and the various locking calls for
 | 
						|
> the threads (cond_wait,mutex_lock, and sema_wait) seem pretty fast.  I did
 | 
						|
> some performance tests for inserts 
 | 
						|
> 
 | 
						|
> 20 clients, 900 inserts per client, 1 insert per transaction, 4 different
 | 
						|
> tables.
 | 
						|
> 
 | 
						|
> 7.0.2    About    10:52 average completion
 | 
						|
> multi-threaded    2:42 average completion
 | 
						|
> 7.1beta3          1:13 average completion
 | 
						|
 | 
						|
It is very very good for time for 7.1, already look forward to 7.2! :-)  
 | 
						|
 | 
						|
 BTW, I not sure if you anytime in future will see threads in 
 | 
						|
official PostgreSQL and if you spending time on relevant things (IMHO).
 | 
						|
 | 
						|
		Karel
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
From pgsql-hackers-owner+M4304@postgresql.org Tue Feb  6 10:24:21 2001
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id KAA22027
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 6 Feb 2001 10:24:20 -0500 (EST)
 | 
						|
Received: from mail.postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with SMTP id f16FOBx97182;
 | 
						|
	Tue, 6 Feb 2001 10:24:11 -0500 (EST)
 | 
						|
	(envelope-from pgsql-hackers-owner+M4304@postgresql.org)
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id f16FLWx96814
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue, 6 Feb 2001 10:21:33 -0500 (EST)
 | 
						|
	(envelope-from mscott@sacadia.com)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id HAA04170;
 | 
						|
	Tue, 6 Feb 2001 07:05:04 -0800 (PST)
 | 
						|
Date: Tue, 6 Feb 2001 07:05:04 -0800 (PST)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: Karel Zak <zakkr@zf.jcu.cz>
 | 
						|
cc: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Using Threads
 | 
						|
In-Reply-To: <Pine.LNX.3.96.1010206101030.20355B-100000@ara.zf.jcu.cz>
 | 
						|
Message-ID: <Pine.GSO.4.10.10102060650250.4153-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
 | 
						|
> 
 | 
						|
>  Sorry I haven't time to see and test your experiment,
 | 
						|
> but I have a question. How you solve memory management?
 | 
						|
> The current mmgr is based on global variable 
 | 
						|
> CurrentMemoryContext that is very often changed and used.
 | 
						|
>  Use you for this locks? If yes it is probably problematic
 | 
						|
> point for perfomance.
 | 
						|
> 
 | 
						|
> 			Karel
 | 
						|
> 
 | 
						|
 | 
						|
There are many many globals I had to work around including all the memory
 | 
						|
management stuff.  I basically threw everything into and "environment"
 | 
						|
variable which I stored in a thread specific using thr_setspecific.
 | 
						|
 | 
						|
Performance is acually very good for what I am doing.  I was able to batch
 | 
						|
commit transactions which cuts down on fsync calls, use prepared
 | 
						|
statements from my client using CORBA, and the various locking calls for
 | 
						|
the threads (cond_wait,mutex_lock, and sema_wait) seem pretty fast.  I did
 | 
						|
some performance tests for inserts 
 | 
						|
 | 
						|
20 clients, 900 inserts per client, 1 insert per transaction, 4 different
 | 
						|
tables.
 | 
						|
 | 
						|
7.0.2    About    10:52 average completion
 | 
						|
multi-threaded    2:42 average completion
 | 
						|
7.1beta3          1:13 average completion
 | 
						|
 | 
						|
If I increased the number of inserts per transaction, multi-threaded got
 | 
						|
closer to 7.1 for inserts.  I haven't tested other other types of
 | 
						|
commands
 | 
						|
yet.
 | 
						|
 | 
						|
 | 
						|
Myron Scott
 | 
						|
mkscott@sacadia.com
 | 
						|
 | 
						|
 | 
						|
From lamar.owen@wgcr.org Thu Jun 28 11:14:10 2001
 | 
						|
Return-path: <lamar.owen@wgcr.org>
 | 
						|
Received: from www.wgcr.org (IDENT:root@www.wgcr.org [206.74.232.194])
 | 
						|
	by candle.pha.pa.us (8.10.1/8.10.1) with ESMTP id f5SFE9U18758
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 28 Jun 2001 11:14:09 -0400 (EDT)
 | 
						|
Received: from lowen.wgcr.org (IDENT:lowen@[10.1.2.3])
 | 
						|
	by www.wgcr.org (8.9.3/8.9.3/WGCR) with SMTP id LAA11879;
 | 
						|
	Thu, 28 Jun 2001 11:14:14 -0400
 | 
						|
Content-Type: text/plain;
 | 
						|
  charset="iso-8859-1"
 | 
						|
From: Lamar Owen <lamar.owen@wgcr.org>
 | 
						|
To: Bruce Momjian <pgman@candle.pha.pa.us>
 | 
						|
Subject: Process weight (was:Re: [GENERAL] Re: Red Hat to support PostgreSQL)
 | 
						|
Date: Thu, 28 Jun 2001 11:14:09 -0400
 | 
						|
X-Mailer: KMail [version 1.2]
 | 
						|
References: <200106272258.f5RMwIb26959@candle.pha.pa.us>
 | 
						|
In-Reply-To: <200106272258.f5RMwIb26959@candle.pha.pa.us>
 | 
						|
MIME-Version: 1.0
 | 
						|
Message-ID: <01062811140902.01118@lowen.wgcr.org>
 | 
						|
Content-Transfer-Encoding: 8bit
 | 
						|
Status: ORr
 | 
						|
 | 
						|
On Wednesday 27 June 2001 18:58, Bruce Momjian wrote:
 | 
						|
> > I had almost given up on using Postgres for this system because under
 | 
						|
> > Solaris, it just couldn't cut it (MySQL could do the work with one CPU
 | 
						|
> > while Postgres took up even more CPU and required *both* CPUs to be
 | 
						|
> > enabled), but when we moved the system to a Linux box, things worked
 | 
						|
> > much better.
 | 
						|
 | 
						|
> Ah, back to a PostgreSQL topic.  :-)
 | 
						|
 | 
						|
> My guess on this one is that Solaris is slower for PostgreSQL because
 | 
						|
> process switching is _much_ heavier on Solaris than other OS's.  This is
 | 
						|
> because of the way they implemented processes in SVr4.  They got quite
 | 
						|
> heavy, almost requiring kernel threads so you weren't switching
 | 
						|
> processes all the time.
 | 
						|
 | 
						|
Now, the question of the week:
 | 
						|
Is supporting a thread model for an inefficient OS a desirable thing to do, 
 | 
						|
when more efficient OS kernels are available such as FreeBSD 4.x and Linux 
 | 
						|
2.4?  My opinion is that our existing model, when used with a 
 | 
						|
connection-pooling frontend, is rather efficient.  (Yes, I use a 
 | 
						|
connection-pooling frontend.  Performance is rather nice, and I don't have to 
 | 
						|
have a full backend spawned for every page hit.)
 | 
						|
 | 
						|
In fact, on a Linux box threads show as processes.  While I know that the 
 | 
						|
kernel actually supports themin a slightly different manner than processes, 
 | 
						|
they have more similarities than differences.
 | 
						|
 | 
						|
However, even on OS's where threads are supported, the mechanism to support 
 | 
						|
those threads must be an efficient one -- not all pthreads libraries are 
 | 
						|
created equal.  Many are frontends (expensive ones, at that) for plain old 
 | 
						|
processes.
 | 
						|
 | 
						|
Does anyone know of a resource that details the 'weight' of processes for our 
 | 
						|
supported platforms?  [reply off-list -- I'll be glad to summarize responses 
 | 
						|
to HACKERS, ADMIN, or PORTS, as appropriate, if desired.]
 | 
						|
--
 | 
						|
Lamar Owen
 | 
						|
WGCR Internet Radio
 | 
						|
1 Peter 4:11
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13599=candle.pha.pa.us=pgman@postgresql.org Wed Sep 26 17:25:32 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13599=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8QLPWo07589
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 17:25:32 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8QLPf405606
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 16:25:41 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13599=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from gromit.dotclick.com (ipn9-f8366.net-resource.net [216.204.83.66])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8QKj3h82020
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 16:45:03 -0400 (EDT)
 | 
						|
	(envelope-from markw@mohawksoft.com)
 | 
						|
Received: from mohawksoft.com (IDENT:markw@localhost.localdomain [127.0.0.1])
 | 
						|
	by gromit.dotclick.com (8.9.3/8.9.3) with ESMTP id QAA23693;
 | 
						|
	Wed, 26 Sep 2001 16:43:02 -0400
 | 
						|
Message-ID: <3BB23DD6.E86AF327@mohawksoft.com>
 | 
						|
Date: Wed, 26 Sep 2001 16:43:02 -0400
 | 
						|
From: mlw <markw@mohawksoft.com>
 | 
						|
X-Mailer: Mozilla 4.75 [en] (X11; U; Linux 2.4.2 i686)
 | 
						|
X-Accept-Language: en
 | 
						|
MIME-Version: 1.0
 | 
						|
To: "D. Hageman" <dhageman@dracken.com>,
 | 
						|
   "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal
 | 
						|
References: <Pine.LNX.4.33.0109261330030.1906-100000@typhon.dracken.com>
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
"D. Hageman" wrote:
 | 
						|
 | 
						|
> The plan for the new spinlocks does look like it has some potential.  My
 | 
						|
> only comment in regards to permformance when we start looking at SMP
 | 
						|
> machines is ... it is my belief that getting a true threaded backend may
 | 
						|
> be the only way to get the full potential out of SMP machines.  I see that
 | 
						|
> is one of the things to experiment with on the TODO list and I have seen
 | 
						|
> some people have messed around already with this using Solaris threads.
 | 
						|
> It should probably be attempted with pthreads if PostgreSQL is going to
 | 
						|
> keep some resemblance of cross-platform compatibility.  At that time, it
 | 
						|
> would probably be easier to go in and clean up some stuff for the
 | 
						|
> implementation of other TODO items (put in the base framework for more
 | 
						|
> complex future items) as threading the backend would take a little bit of
 | 
						|
> ideology shift.
 | 
						|
 | 
						|
I can only think of two objectives for threading. (1) running the various
 | 
						|
connections in their own thread instead of their own process. (2) running
 | 
						|
complex queries across multiple threads.
 | 
						|
 | 
						|
For  item (1) I see no value to this. It is a lot of work with no tangible
 | 
						|
benefit. If you have an old fashion pthreads implementation, it will hurt
 | 
						|
performance because are scheduled within the single process's time slice.. If
 | 
						|
you have a newer kernel scheduled implementation, then you will have the same
 | 
						|
scheduling as separate processes. The only thing you will need to do is
 | 
						|
switch your brain from figuring out how to share data, to trying to figure
 | 
						|
out how to isolate data. A multithreaded implementation lacks many of the
 | 
						|
benefits and robustness of a multiprocess implementation.
 | 
						|
 | 
						|
For item (2) I can see how that could speed up queries in a low utilization
 | 
						|
system, and that would be cool, but in a server that is under load, threading
 | 
						|
the queries probably be less efficient.
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13604=candle.pha.pa.us=pgman@postgresql.org Wed Sep 26 18:40:26 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13604=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8QMePo13437
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 18:40:25 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8QMeZ417944
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 17:40:35 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13604=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from foghorn.airs.com (foghorn.airs.com [63.201.54.26])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with SMTP id f8QM59h01247
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 18:05:09 -0400 (EDT)
 | 
						|
	(envelope-from ian@airs.com)
 | 
						|
Received: (qmail 10089 invoked by uid 10); 26 Sep 2001 22:04:49 -0000
 | 
						|
Received: (qmail 6837 invoked by uid 269); 26 Sep 2001 22:04:41 -0000
 | 
						|
Mail-Followup-To: markw@mohawksoft.com,
 | 
						|
  pgsql-hackers@postgresql.org,
 | 
						|
  dhageman@dracken.com
 | 
						|
To: "D. Hageman" <dhageman@dracken.com>
 | 
						|
cc: mlw <markw@mohawksoft.com>,
 | 
						|
   "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal
 | 
						|
References: <Pine.LNX.4.33.0109261600100.1784-100000@typhon.dracken.com>
 | 
						|
From: Ian Lance Taylor <ian@airs.com>
 | 
						|
Date: 26 Sep 2001 15:04:41 -0700
 | 
						|
In-Reply-To: <Pine.LNX.4.33.0109261600100.1784-100000@typhon.dracken.com>
 | 
						|
Message-ID: <si8zf1vcau.fsf@daffy.airs.com>
 | 
						|
Lines: 45
 | 
						|
User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
"D. Hageman" <dhageman@dracken.com> writes:
 | 
						|
 | 
						|
> > you have a newer kernel scheduled implementation, then you will have the same
 | 
						|
> > scheduling as separate processes. The only thing you will need to do is
 | 
						|
> > switch your brain from figuring out how to share data, to trying to figure
 | 
						|
> > out how to isolate data. A multithreaded implementation lacks many of the
 | 
						|
> > benefits and robustness of a multiprocess implementation.
 | 
						|
> 
 | 
						|
> Save for the fact that the kernel can switch between threads faster then 
 | 
						|
> it can switch processes considering threads share the same address space, 
 | 
						|
> stack, code, etc.  If need be sharing the data between threads is much 
 | 
						|
> easier then sharing between processes. 
 | 
						|
 | 
						|
When using a kernel threading model, it's not obvious to me that the
 | 
						|
kernel will switch between threads much faster than it will switch
 | 
						|
between processes.  As far as I can see, the only potential savings is
 | 
						|
not reloading the pointers to the page tables.  That is not nothing,
 | 
						|
but it is also not a lot.
 | 
						|
 | 
						|
> I can't comment on the "isolate data" line.  I am still trying to figure 
 | 
						|
> that one out.
 | 
						|
 | 
						|
Sometimes you need data which is specific to a particular thread.
 | 
						|
Basically, you have to look at every global variable in the Postgres
 | 
						|
backend, and determine whether to share it among all threads or to
 | 
						|
make it thread-specific.  In other words, you have to take extra steps
 | 
						|
to isolate the data within the thread.  This is the reverse of the
 | 
						|
current situation, in which you have to take extra steps to share data
 | 
						|
among all backend processes.
 | 
						|
 | 
						|
> That last line is a troll if I every saw it ;-)  I will agree that threads 
 | 
						|
> isn't for everything and that it has costs just like everything else.  Let 
 | 
						|
> me stress that last part - like everything else.  Certain costs exist in 
 | 
						|
> the present model, nothing is - how should we say ... perfect.
 | 
						|
 | 
						|
When writing in C, threading inevitably loses robustness.  Erratic
 | 
						|
behaviour by one thread, perhaps in a user defined function, can
 | 
						|
subtly corrupt the entire system, rather than just that thread.  Part
 | 
						|
of defensive programming is building barriers between different parts
 | 
						|
of a system.  Process boundaries are a powerful barrier.
 | 
						|
 | 
						|
(Actually, though, Postgres is already vulnerable to erratic behaviour
 | 
						|
because any backend process can corrupt the shared buffer pool.)
 | 
						|
 | 
						|
Ian
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13605=candle.pha.pa.us=pgman@postgresql.org Wed Sep 26 18:54:58 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13605=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8QMsvo14061
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 18:54:57 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8QMt7420740
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 17:55:07 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13605=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8QMOPh04333
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 18:24:26 -0400 (EDT)
 | 
						|
	(envelope-from mscott@sacadia.com)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id PAA00633
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 15:03:00 -0700 (PDT)
 | 
						|
Date: Wed, 26 Sep 2001 15:03:00 -0700 (PDT)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal
 | 
						|
In-Reply-To: <3BB23DD6.E86AF327@mohawksoft.com>
 | 
						|
Message-ID: <Pine.GSO.4.10.10109261428340.563-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
 | 
						|
 | 
						|
On Wed, 26 Sep 2001, mlw wrote:
 | 
						|
 | 
						|
> I can only think of two objectives for threading. (1) running the various
 | 
						|
> connections in their own thread instead of their own process. (2) running
 | 
						|
> complex queries across multiple threads.
 | 
						|
> 
 | 
						|
 | 
						|
I did a multi-threaded version of 7.0.2 using Solaris threads about a year
 | 
						|
ago in order to try
 | 
						|
and get multiple backend connections working under one java process using
 | 
						|
jni.  I used the thread per connection model.
 | 
						|
 | 
						|
I eventually got it working, but it was/is very messy ( there were global
 | 
						|
variables everywhere! ).  Anyway, I was able to get a pretty good speed up
 | 
						|
on inserts by scheduling buffer writes from multiple connections on one
 | 
						|
common writing thread.  
 | 
						|
 | 
						|
I also got some other features that were important to me at the time.
 | 
						|
 | 
						|
1.  True prepared statements under java with bound input and output
 | 
						|
variables
 | 
						|
2.  Better system utilization 
 | 
						|
	a.  fewer Solaris lightweight processes mapped to threads.
 | 
						|
	b.  Fewer open files per postgres installation 
 | 
						|
3.  Automatic vacuums when system activity is low by a daemon thread.
 | 
						|
 | 
						|
but there were some drawbacks...  One rogue thread or bad user 
 | 
						|
function could take down all connections for that process.  This
 | 
						|
was and seems to still be the major drawback to using threads.
 | 
						|
 | 
						|
 | 
						|
Myron Scott
 | 
						|
mscott@sacadia.com
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 5: Have you checked our extensive FAQ?
 | 
						|
 | 
						|
http://www.postgresql.org/users-lounge/docs/faq.html
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13602=candle.pha.pa.us=pgman@postgresql.org Wed Sep 26 17:45:26 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13602=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8QLjQo08483
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 17:45:26 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8QLjY409914
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 16:45:35 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13602=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from typhon.dracken.com (dv07m61.lawrence.ks.us [24.124.61.35])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8QLGDh91021
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 17:16:13 -0400 (EDT)
 | 
						|
	(envelope-from dhageman@dracken.com)
 | 
						|
Received: from localhost (dhageman@localhost)
 | 
						|
	by typhon.dracken.com (8.11.4/8.11.4) with ESMTP id f8QLEMY01973;
 | 
						|
	Wed, 26 Sep 2001 16:14:22 -0500
 | 
						|
X-Authentication-Warning: typhon.dracken.com: dhageman owned process doing -bs
 | 
						|
Date: Wed, 26 Sep 2001 16:14:22 -0500 (CDT)
 | 
						|
From: "D. Hageman" <dhageman@dracken.com>
 | 
						|
To: mlw <markw@mohawksoft.com>
 | 
						|
cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal
 | 
						|
In-Reply-To: <3BB23DD6.E86AF327@mohawksoft.com>
 | 
						|
Message-ID: <Pine.LNX.4.33.0109261600100.1784-100000@typhon.dracken.com>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: ORr
 | 
						|
 | 
						|
On Wed, 26 Sep 2001, mlw wrote:
 | 
						|
> 
 | 
						|
> I can only think of two objectives for threading. (1) running the various
 | 
						|
> connections in their own thread instead of their own process. (2) running
 | 
						|
> complex queries across multiple threads.
 | 
						|
> 
 | 
						|
> For  item (1) I see no value to this. It is a lot of work with no tangible
 | 
						|
> benefit. If you have an old fashion pthreads implementation, it will hurt
 | 
						|
> performance because are scheduled within the single process's time slice..
 | 
						|
 | 
						|
Old fashion ... as in a userland library that implements POSIX threads?  
 | 
						|
Well, I would agree.  However, most *modern* implementations are done in 
 | 
						|
the kernel or kernel and userland coop model and don't have this 
 | 
						|
limitation (as you mention later in your e-mail).  You have kinda hit on 
 | 
						|
one of my gripes about computers in general.  At what point in time does 
 | 
						|
one say something is obsolete or too old to support anymore - that it 
 | 
						|
hinders progress instead of adding a "feature"?
 | 
						|
 | 
						|
> you have a newer kernel scheduled implementation, then you will have the same
 | 
						|
> scheduling as separate processes. The only thing you will need to do is
 | 
						|
> switch your brain from figuring out how to share data, to trying to figure
 | 
						|
> out how to isolate data. A multithreaded implementation lacks many of the
 | 
						|
> benefits and robustness of a multiprocess implementation.
 | 
						|
 | 
						|
Save for the fact that the kernel can switch between threads faster then 
 | 
						|
it can switch processes considering threads share the same address space, 
 | 
						|
stack, code, etc.  If need be sharing the data between threads is much 
 | 
						|
easier then sharing between processes. 
 | 
						|
 | 
						|
I can't comment on the "isolate data" line.  I am still trying to figure 
 | 
						|
that one out.
 | 
						|
 | 
						|
That last line is a troll if I every saw it ;-)  I will agree that threads 
 | 
						|
isn't for everything and that it has costs just like everything else.  Let 
 | 
						|
me stress that last part - like everything else.  Certain costs exist in 
 | 
						|
the present model, nothing is - how should we say ... perfect.
 | 
						|
 | 
						|
> For item (2) I can see how that could speed up queries in a low utilization
 | 
						|
> system, and that would be cool, but in a server that is under load, threading
 | 
						|
> the queries probably be less efficient.
 | 
						|
 | 
						|
Well, I don't follow your logic and you didn't give any substance to back 
 | 
						|
up your claim.  I am willing to listen.
 | 
						|
 | 
						|
Another thought ... Oracle uses threads doesn't it or at least it has a 
 | 
						|
single processor and multi-processor version last time I knew ... which do 
 | 
						|
they claim is better?  (Not saying that Oracle's proclimation of what is 
 | 
						|
good and what is not matters, but it is good for another view point).
 | 
						|
 | 
						|
-- 
 | 
						|
//========================================================\\
 | 
						|
||  D. Hageman                    <dhageman@dracken.com>  ||
 | 
						|
\\========================================================//
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13607=candle.pha.pa.us=pgman@postgresql.org Wed Sep 26 19:14:59 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13607=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8QNExo15536
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 19:14:59 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8QNF8423944
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 18:15:09 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13607=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from belphigor.mcnaught.org ([216.151.155.121])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8QMe3h07256
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 18:40:04 -0400 (EDT)
 | 
						|
	(envelope-from doug@wireboard.com)
 | 
						|
Received: (from doug@localhost)
 | 
						|
	by belphigor.mcnaught.org (8.11.6/8.9.3) id f8QMdkB05502;
 | 
						|
	Wed, 26 Sep 2001 18:39:46 -0400
 | 
						|
X-Authentication-Warning: belphigor.mcnaught.org: doug set sender to doug@wireboard.com using -f
 | 
						|
To: "D. Hageman" <dhageman@dracken.com>
 | 
						|
cc: mlw <markw@mohawksoft.com>,
 | 
						|
   "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal
 | 
						|
References: <Pine.LNX.4.33.0109261600100.1784-100000@typhon.dracken.com>
 | 
						|
From: Doug McNaught <doug@wireboard.com>
 | 
						|
Date: 26 Sep 2001 18:39:44 -0400
 | 
						|
In-Reply-To: "D. Hageman"'s message of "Wed, 26 Sep 2001 16:14:22 -0500 (CDT)"
 | 
						|
Message-ID: <m3y9n11sr3.fsf@belphigor.mcnaught.org>
 | 
						|
Lines: 26
 | 
						|
User-Agent: Gnus/5.0806 (Gnus v5.8.6) XEmacs/21.1 (20 Minutes to Nikko)
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
"D. Hageman" <dhageman@dracken.com> writes:
 | 
						|
 | 
						|
> Save for the fact that the kernel can switch between threads faster then 
 | 
						|
> it can switch processes considering threads share the same address space, 
 | 
						|
> stack, code, etc.  If need be sharing the data between threads is much 
 | 
						|
> easier then sharing between processes. 
 | 
						|
 | 
						|
This depends on your system.  Solaris has a huge difference between
 | 
						|
thread and process context switch times, whereas Linux has very little 
 | 
						|
difference (and in fact a Linux process context switch is about as
 | 
						|
fast as a Solaris thread switch on the same hardware--Solaris is just
 | 
						|
a pig when it comes to process context switching). 
 | 
						|
 | 
						|
> I can't comment on the "isolate data" line.  I am still trying to figure 
 | 
						|
> that one out.
 | 
						|
 | 
						|
I think his point is one of clarity and maintainability.  When a
 | 
						|
task's data is explicitly shared (via shared memory of some sort) it's
 | 
						|
fairly clear when you're accessing shared data and need to worry about
 | 
						|
locking.  Whereas when all data is shared by default (as with threads)
 | 
						|
it's very easy to miss places where threads can step on each other.
 | 
						|
 | 
						|
-Doug
 | 
						|
-- 
 | 
						|
In a world of steel-eyed death, and men who are fighting to be warm,
 | 
						|
Come in, she said, I'll give you shelter from the storm.    -Dylan
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 2: you can get off all lists at once with the unregister command
 | 
						|
    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13611=candle.pha.pa.us=pgman@postgresql.org Wed Sep 26 21:05:02 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13611=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8R152o22010
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 21:05:02 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8R158430261
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 20:05:08 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13611=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from sss.pgh.pa.us ([192.204.191.242])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8R0lgh29430
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 20:47:42 -0400 (EDT)
 | 
						|
	(envelope-from tgl@sss.pgh.pa.us)
 | 
						|
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
 | 
						|
	by sss.pgh.pa.us (8.11.4/8.11.4) with ESMTP id f8R0kpK14707;
 | 
						|
	Wed, 26 Sep 2001 20:46:51 -0400 (EDT)
 | 
						|
To: Ian Lance Taylor <ian@airs.com>
 | 
						|
cc: "D. Hageman" <dhageman@dracken.com>, mlw <markw@mohawksoft.com>,
 | 
						|
   "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal 
 | 
						|
In-Reply-To: <si8zf1vcau.fsf@daffy.airs.com> 
 | 
						|
References: <Pine.LNX.4.33.0109261600100.1784-100000@typhon.dracken.com> <si8zf1vcau.fsf@daffy.airs.com>
 | 
						|
Comments: In-reply-to Ian Lance Taylor <ian@airs.com>
 | 
						|
	message dated "26 Sep 2001 15:04:41 -0700"
 | 
						|
Date: Wed, 26 Sep 2001 20:46:51 -0400
 | 
						|
Message-ID: <14704.1001551611@sss.pgh.pa.us>
 | 
						|
From: Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
Ian Lance Taylor <ian@airs.com> writes:
 | 
						|
> (Actually, though, Postgres is already vulnerable to erratic behaviour
 | 
						|
> because any backend process can corrupt the shared buffer pool.)
 | 
						|
 | 
						|
Not to mention the other parts of shared memory.
 | 
						|
 | 
						|
Nonetheless, our experience has been that cross-backend failures due to
 | 
						|
memory clobbers in shared memory are very infrequent --- certainly far
 | 
						|
less often than we see localized-to-a-backend crashes.  Probably this is
 | 
						|
because the shared memory is (a) small compared to the rest of the
 | 
						|
address space and (b) only accessed by certain specific modules within
 | 
						|
Postgres.
 | 
						|
 | 
						|
I'm convinced that switching to a thread model would result in a
 | 
						|
significant degradation in our ability to recover from coredump-type
 | 
						|
failures, even given the (implausible) assumption that we introduce no
 | 
						|
new bugs during the conversion.  I'm also *un*convinced that such a
 | 
						|
conversion will yield significant performance benefits, unless we
 | 
						|
introduce additional cross-thread dependencies (and more fragility
 | 
						|
and lock contention) by tactics such as sharing catalog caches across
 | 
						|
threads.
 | 
						|
 | 
						|
			regards, tom lane
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 3: if posting/reading through Usenet, please send an appropriate
 | 
						|
subscribe-nomail command to majordomo@postgresql.org so that your
 | 
						|
message can get through to the mailing list cleanly
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13616=candle.pha.pa.us=pgman@postgresql.org Wed Sep 26 23:10:52 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13616=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8R3Aqo03180
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 23:10:52 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8R3B3438816
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 22:11:03 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13616=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from spider.pilosoft.com (p55-222.acedsl.com [160.79.55.222])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8R2vCh48923
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 22:57:12 -0400 (EDT)
 | 
						|
	(envelope-from alex@pilosoft.com)
 | 
						|
Received: from localhost (alexmail@localhost)
 | 
						|
	by spider.pilosoft.com (8.9.3/8.9.3) with ESMTP id WAA27630;
 | 
						|
	Wed, 26 Sep 2001 22:58:41 -0400 (EDT)
 | 
						|
Date: Wed, 26 Sep 2001 22:58:41 -0400 (EDT)
 | 
						|
From: Alex Pilosov <alex@pilosoft.com>
 | 
						|
To: "D. Hageman" <dhageman@dracken.com>
 | 
						|
cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal
 | 
						|
In-Reply-To: <Pine.LNX.4.33.0109261733050.2225-100000@typhon.dracken.com>
 | 
						|
Message-ID: <Pine.BSO.4.10.10109262249480.14740-100000@spider.pilosoft.com>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Wed, 26 Sep 2001, D. Hageman wrote:
 | 
						|
 | 
						|
> > > Save for the fact that the kernel can switch between threads faster then 
 | 
						|
> > > it can switch processes considering threads share the same address space, 
 | 
						|
> > > stack, code, etc.  If need be sharing the data between threads is much 
 | 
						|
> > > easier then sharing between processes. 
 | 
						|
> > 
 | 
						|
> > When using a kernel threading model, it's not obvious to me that the
 | 
						|
> > kernel will switch between threads much faster than it will switch
 | 
						|
> > between processes.  As far as I can see, the only potential savings is
 | 
						|
> > not reloading the pointers to the page tables.  That is not nothing,
 | 
						|
> > but it is also
 | 
						|
<major snippage>
 | 
						|
> > > I can't comment on the "isolate data" line.  I am still trying to figure 
 | 
						|
> > > that one out.
 | 
						|
> > 
 | 
						|
> > Sometimes you need data which is specific to a particular thread.
 | 
						|
> 
 | 
						|
> When you need data that is specific to a thread you use a TSD (Thread 
 | 
						|
> Specific Data).  
 | 
						|
Which Linux does not support with a vengeance, to my knowledge.
 | 
						|
 | 
						|
As a matter of fact, quote from Linus on the matter was something like
 | 
						|
"Solution to slow process switching is fast process switching, not another
 | 
						|
kernel abstraction [referring to threads and TSD]". TSDs make
 | 
						|
implementation of thread switching complex, and fork() complex.
 | 
						|
 | 
						|
The question about threads boils down to: Is there far more data that is
 | 
						|
shared than unshared? If yes, threads are better, if not, you'll be
 | 
						|
abusing TSD and slowing things down. 
 | 
						|
 | 
						|
I believe right now, postgresql' model of sharing only things that need to
 | 
						|
be shared is pretty damn good. The only slight problem is overhead of
 | 
						|
forking another backend, but its still _fast_.
 | 
						|
 | 
						|
IMHO, threads would not bring large improvement to postgresql.
 | 
						|
 | 
						|
 Actually, if I remember, there was someone who ported postgresql (I think
 | 
						|
it was 6.5) to be multithreaded with major pain, because the requirement
 | 
						|
was to integrate with CORBA. I believe that person posted some benchmarks
 | 
						|
which were essentially identical to non-threaded postgres...
 | 
						|
 | 
						|
-alex
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 6: Have you searched our list archives?
 | 
						|
 | 
						|
http://archives.postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13619=candle.pha.pa.us=pgman@postgresql.org Thu Sep 27 00:32:55 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13619=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8R4Wto07075
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 27 Sep 2001 00:32:55 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8R4X7444942
 | 
						|
	for <pgman@candle.pha.pa.us>; Wed, 26 Sep 2001 23:33:07 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13619=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from sss.pgh.pa.us ([192.204.191.242])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8R4Jsh61257
 | 
						|
	for <pgsql-hackers@postgresql.org>; Thu, 27 Sep 2001 00:19:54 -0400 (EDT)
 | 
						|
	(envelope-from tgl@sss.pgh.pa.us)
 | 
						|
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
 | 
						|
	by sss.pgh.pa.us (8.11.4/8.11.4) with ESMTP id f8R4JLK15406;
 | 
						|
	Thu, 27 Sep 2001 00:19:21 -0400 (EDT)
 | 
						|
To: "D. Hageman" <dhageman@dracken.com>
 | 
						|
cc: Alex Pilosov <alex@pilosoft.com>,
 | 
						|
   "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal 
 | 
						|
In-Reply-To: <Pine.LNX.4.33.0109262224040.1173-100000@typhon.dracken.com> 
 | 
						|
References: <Pine.LNX.4.33.0109262224040.1173-100000@typhon.dracken.com>
 | 
						|
Comments: In-reply-to "D. Hageman" <dhageman@dracken.com>
 | 
						|
	message dated "Wed, 26 Sep 2001 22:41:39 -0500"
 | 
						|
Date: Thu, 27 Sep 2001 00:19:20 -0400
 | 
						|
Message-ID: <15403.1001564360@sss.pgh.pa.us>
 | 
						|
From: Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
"D. Hageman" <dhageman@dracken.com> writes:
 | 
						|
> If you look at Myron Scott's post today you will see that it had other 
 | 
						|
> advantages going for it (like auto-vacuum!) and disadvantages ... rogue 
 | 
						|
> thread corruption (already debated today).
 | 
						|
 | 
						|
But note that Myron did a number of things that are (IMHO) orthogonal
 | 
						|
to process-to-thread conversion, such as adding prepared statements,
 | 
						|
a separate thread/process/whateveryoucallit for buffer writing, ditto
 | 
						|
for vacuuming, etc.  I think his results cannot be taken as indicative
 | 
						|
of the benefits of threads per se --- these other things could be
 | 
						|
implemented in a pure process model too, and we have no data with which
 | 
						|
to estimate which change bought how much.
 | 
						|
 | 
						|
Threading certainly should reduce the context switch time, but this
 | 
						|
comes at the price of increased overhead within each context (since
 | 
						|
access to thread-local variables is not free).  It's by no means
 | 
						|
obvious that there's a net win there.
 | 
						|
 | 
						|
			regards, tom lane
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 6: Have you searched our list archives?
 | 
						|
 | 
						|
http://archives.postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13621=candle.pha.pa.us=pgman@postgresql.org Thu Sep 27 01:59:44 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13621=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8R5xio11898
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 27 Sep 2001 01:59:44 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8R5xi449748
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 27 Sep 2001 00:59:45 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13621=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from goldengate.kojoworldwide.com. ([216.133.4.130])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8R5joh75612
 | 
						|
	for <pgsql-hackers@postgresql.org>; Thu, 27 Sep 2001 01:45:50 -0400 (EDT)
 | 
						|
	(envelope-from mscott@sacadia.com)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
	by goldengate.kojoworldwide.com. (8.9.1b+Sun/8.9.2) with ESMTP id WAA01144
 | 
						|
	for <pgsql-hackers@postgresql.org>; Wed, 26 Sep 2001 22:24:29 -0700 (PDT)
 | 
						|
Date: Wed, 26 Sep 2001 22:24:29 -0700 (PDT)
 | 
						|
From: Myron Scott <mscott@sacadia.com>
 | 
						|
X-Sender: mscott@goldengate.kojoworldwide.com.
 | 
						|
To: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal 
 | 
						|
In-Reply-To: <15403.1001564360@sss.pgh.pa.us>
 | 
						|
Message-ID: <Pine.GSO.4.10.10109262146500.1111-100000@goldengate.kojoworldwide.com.>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
 | 
						|
 
 | 
						|
> But note that Myron did a number of things that are (IMHO) orthogonal
 | 
						|
 | 
						|
yes, I did :)
 | 
						|
 | 
						|
> to process-to-thread conversion, such as adding prepared statements,
 | 
						|
> a separate thread/process/whateveryoucallit for buffer writing, ditto
 | 
						|
> for vacuuming, etc.  I think his results cannot be taken as indicative
 | 
						|
> of the benefits of threads per se --- these other things could be
 | 
						|
> implemented in a pure process model too, and we have no data with which
 | 
						|
> to estimate which change bought how much.
 | 
						|
> 
 | 
						|
 | 
						|
If you are comparing just process vs. thread, I really don't think I
 | 
						|
gained much for performance and ended up with some pretty unmanageable
 | 
						|
code.
 | 
						|
 | 
						|
The one thing that led to most of the gains was scheduling all the writes
 | 
						|
to one thread which, as noted by Tom,  you could do on the process model.
 | 
						|
Besides, Most of the advantage in doing this was taken away with the
 | 
						|
addition of WAL in 7.1.
 | 
						|
 | 
						|
The other real gain that I saw with threading was limiting the number of
 | 
						|
open files but
 | 
						|
that led me to alter much of the file manager in order to synchronize
 | 
						|
access to the files which probably slowed things a bit.
 | 
						|
 | 
						|
To be honest, I don't think I, personally,
 | 
						|
would try this again. I went pretty far off
 | 
						|
the beaten path with this thing.  It works well for what I am doing 
 | 
						|
( a limited number of SQL statements run many times over ) but there
 | 
						|
probably was a better way.  I'm thinking now that I should have tried to 
 | 
						|
add a CORBA interface for connections. I would have been able to 
 | 
						|
accomplish my original goals without creating a deadend for myself.
 | 
						|
 | 
						|
 | 
						|
Thanks all for a great project,
 | 
						|
 | 
						|
Myron
 | 
						|
mscott@sacadia.com
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 2: you can get off all lists at once with the unregister command
 | 
						|
    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
 | 
						|
 | 
						|
From pgsql-hackers-owner+M13632=candle.pha.pa.us=pgman@postgresql.org Thu Sep 27 10:21:22 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M13632=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from server1.pgsql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id f8RELLo08607
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 27 Sep 2001 10:21:21 -0400 (EDT)
 | 
						|
Received: from postgresql.org (webmail.postgresql.org [216.126.85.28])
 | 
						|
	by server1.pgsql.org (8.11.6/8.11.6) with ESMTP id f8RELP487000
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 27 Sep 2001 09:21:26 -0500 (CDT)
 | 
						|
	(envelope-from pgsql-hackers-owner+M13632=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from gromit.dotclick.com (ipn9-f8366.net-resource.net [216.204.83.66])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id f8RE49h21870
 | 
						|
	for <pgsql-hackers@postgresql.org>; Thu, 27 Sep 2001 10:04:09 -0400 (EDT)
 | 
						|
	(envelope-from markw@mohawksoft.com)
 | 
						|
Received: from mohawksoft.com (IDENT:markw@localhost.localdomain [127.0.0.1])
 | 
						|
	by gromit.dotclick.com (8.9.3/8.9.3) with ESMTP id KAA24417;
 | 
						|
	Thu, 27 Sep 2001 10:02:06 -0400
 | 
						|
Message-ID: <3BB3315D.EC99FF65@mohawksoft.com>
 | 
						|
Date: Thu, 27 Sep 2001 10:02:05 -0400
 | 
						|
From: mlw <markw@mohawksoft.com>
 | 
						|
X-Mailer: Mozilla 4.75 [en] (X11; U; Linux 2.4.2 i686)
 | 
						|
X-Accept-Language: en
 | 
						|
MIME-Version: 1.0
 | 
						|
To: "D. Hageman" <dhageman@dracken.com>
 | 
						|
cc: Ian Lance Taylor <ian@airs.com>,
 | 
						|
   "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Spinlock performance improvement proposal
 | 
						|
References: <Pine.LNX.4.33.0109261733050.2225-100000@typhon.dracken.com>
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
"D. Hageman" wrote:
 | 
						|
 | 
						|
> On 26 Sep 2001, Ian Lance Taylor wrote:
 | 
						|
> >
 | 
						|
> > > Save for the fact that the kernel can switch between threads faster then
 | 
						|
> > > it can switch processes considering threads share the same address space,
 | 
						|
> > > stack, code, etc.  If need be sharing the data between threads is much
 | 
						|
> > > easier then sharing between processes.
 | 
						|
> >
 | 
						|
> > When using a kernel threading model, it's not obvious to me that the
 | 
						|
> > kernel will switch between threads much faster than it will switch
 | 
						|
> > between processes.  As far as I can see, the only potential savings is
 | 
						|
> > not reloading the pointers to the page tables.  That is not nothing,
 | 
						|
> > but it is also not a lot.
 | 
						|
>
 | 
						|
> It is my understanding that avoiding a full context switch of the
 | 
						|
> processor can be of a significant advantage.  This is especially important
 | 
						|
> on processor architectures that can be kinda slow at doing it (x86). I
 | 
						|
> will admit that most modern kernels have features that assist software
 | 
						|
> packages utilizing the forking model (copy on write for instance).  It is
 | 
						|
> also my impression that these do a good job.  I am the kind of guy that
 | 
						|
> looks towards the future (as in a year, year and half or so) and say that
 | 
						|
> processors will hopefully get faster at context switching and more and
 | 
						|
> more kernels will implement these algorithms to speed up the forking
 | 
						|
> model.  At the same time, I see more and more processors being shoved into
 | 
						|
> a single box and it appears that the threads model works better on these
 | 
						|
> type of systems.
 | 
						|
 | 
						|
"context" switching happens all the time on a multitasking system. On the x86
 | 
						|
processor, a context switch happens when you call into the kernel. You have to go
 | 
						|
through a call-gate to get to a lower privilege ring. "context" switching is very
 | 
						|
fast. The operating system dictates how heavy or light a process switch is. Under
 | 
						|
Linux (and I believe FreeBSD with Linux threads, or version 4.x ) threads and
 | 
						|
processes are virtually identical. The only difference is that the virtual memory
 | 
						|
pages are not "copy on write." Process vs thread scheduling is also virtually
 | 
						|
identical.
 | 
						|
 | 
						|
If you look to the future, then you should accept that process switching should
 | 
						|
become more efficient as the operating systems improve.
 | 
						|
 | 
						|
>
 | 
						|
> > > I can't comment on the "isolate data" line.  I am still trying to figure
 | 
						|
> > > that one out.
 | 
						|
> >
 | 
						|
> > Sometimes you need data which is specific to a particular thread.
 | 
						|
>
 | 
						|
> When you need data that is specific to a thread you use a TSD (Thread
 | 
						|
> Specific Data).
 | 
						|
 | 
						|
Yes, but Postgres has many global variables. The assumption has always been that
 | 
						|
it is a stand-alone process with an explicitly shared paradigm, not implicitly.
 | 
						|
 | 
						|
>
 | 
						|
> > Basically, you have to look at every global variable in the Postgres
 | 
						|
> > backend, and determine whether to share it among all threads or to
 | 
						|
> > make it thread-specific.
 | 
						|
>
 | 
						|
> Yes, if one was to implement threads into PostgreSQL I would think that
 | 
						|
> some re-writing would be in order of several areas.  Like I said before,
 | 
						|
> give a person a chance to restructure things so future TODO items wouldn't
 | 
						|
> be so hard to implement.  Personally, I like to stay away from global
 | 
						|
> variables as much as possible.  They just get you into trouble.
 | 
						|
 | 
						|
In real live software, software which lives from year to year with active
 | 
						|
development, things do get messy. There are always global variables involved in a
 | 
						|
program. Efforts, of course, should be made to keep them to a minimum, but the
 | 
						|
reality is that they always happen.
 | 
						|
 | 
						|
Also, the very structure of function calls may need to change when going from a
 | 
						|
process model to a threaded model. Functions never before reentrant are now be
 | 
						|
reentrant, think about that. That is a huge undertaking. Every single function
 | 
						|
may need to be examined for thread safety, with little benefit.
 | 
						|
 | 
						|
>
 | 
						|
> > > That last line is a troll if I every saw it ;-)  I will agree that threads
 | 
						|
> > > isn't for everything and that it has costs just like everything else.  Let
 | 
						|
> > > me stress that last part - like everything else.  Certain costs exist in
 | 
						|
> > > the present model, nothing is - how should we say ... perfect.
 | 
						|
> >
 | 
						|
> > When writing in C, threading inevitably loses robustness.  Erratic
 | 
						|
> > behaviour by one thread, perhaps in a user defined function, can
 | 
						|
> > subtly corrupt the entire system, rather than just that thread.  Part
 | 
						|
> > of defensive programming is building barriers between different parts
 | 
						|
> > of a system.  Process boundaries are a powerful barrier.
 | 
						|
>
 | 
						|
> I agree with everything you wrote above except for the first line.  My
 | 
						|
> only comment is that process boundaries are only *truely* a powerful
 | 
						|
> barrier if the processes are different pieces of code and are not
 | 
						|
> dependent on each other in crippling ways.  Forking the same code with the
 | 
						|
> bug in it - and only 1 in 5 die - is still 4 copies of buggy code running
 | 
						|
> on your system ;-)
 | 
						|
 | 
						|
This is simply not true. All software has bugs, it is an undeniable fact. Some
 | 
						|
bugs are more likely to be hit than others. 5 processes , when one process hits a
 | 
						|
bug, that does not mean the other 4 will hit the same bug. Obscure bugs kill
 | 
						|
software all the time, the trick is to minimize the impact. Software is not
 | 
						|
perfect, assuming it can be is a mistake.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 5: Have you checked our extensive FAQ?
 | 
						|
 | 
						|
http://www.postgresql.org/users-lounge/docs/faq.html
 | 
						|
 | 
						|
From pgsql-hackers-owner+M16320=candle.pha.pa.us=pgman@postgresql.org Thu Dec  6 10:16:20 2001
 | 
						|
Return-path: <pgsql-hackers-owner+M16320=candle.pha.pa.us=pgman@postgresql.org>
 | 
						|
Received: from west.navpoint.com (west.navpoint.com [207.106.42.13])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id fB6FGJZ29347
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 6 Dec 2001 10:16:19 -0500 (EST)
 | 
						|
Received: from rs.postgresql.org (server1.pgsql.org [64.39.15.238] (may be forged))
 | 
						|
	by west.navpoint.com (8.11.6/8.10.1) with ESMTP id fB6FGIE25797
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 6 Dec 2001 10:16:18 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by rs.postgresql.org (8.11.6/8.11.6) with ESMTP id fB6F8MR55154
 | 
						|
	for <pgman@candle.pha.pa.us>; Thu, 6 Dec 2001 09:12:12 -0600 (CST)
 | 
						|
	(envelope-from pgsql-hackers-owner+M16320=candle.pha.pa.us=pgman@postgresql.org)
 | 
						|
Received: from dendrite.sacadia.com (adsl-64-168-22-137.dsl.snfc21.pacbell.net [64.168.22.137])
 | 
						|
	by postgresql.org (8.11.3/8.11.4) with ESMTP id fB3NNfm32380
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon, 3 Dec 2001 18:23:42 -0500 (EST)
 | 
						|
	(envelope-from mkscott@sacadia.com)
 | 
						|
Received: from sacadia.com (localhost [127.0.0.1])
 | 
						|
	by dendrite.sacadia.com (8.10.2+Sun/8.10.2) with ESMTP id fB3NKiK16816
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon, 3 Dec 2001 15:20:44 -0800 (PST)
 | 
						|
Message-ID: <3C0C08CC.917CC04B@sacadia.com>
 | 
						|
Date: Mon, 03 Dec 2001 15:20:44 -0800
 | 
						|
From: mkscott@sacadia.com
 | 
						|
X-Mailer: Mozilla 4.78 [en] (X11; U; SunOS 5.8 sun4u)
 | 
						|
X-Accept-Language: en
 | 
						|
MIME-Version: 1.0
 | 
						|
To: PostgreSQL Hackers Mailing List <pgsql-hackers@postgresql.org>
 | 
						|
Subject: [HACKERS] Using Threads (again)
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
 | 
						|
Hi All,
 | 
						|
 | 
						|
 | 
						|
Since I last posted to this list I have done some work
 | 
						|
on a multi-threaded port of Postgres 7.0.2 that I have been kicking
 | 
						|
around for a while.  There has been some mild interest
 | 
						|
in this in the past so I thought I might try and start a sourceforge
 | 
						|
project with what I have so far.
 | 
						|
 | 
						|
>From past discussions, it is clear to me that a direct port
 | 
						|
of postgres which uses threads instead of processes is not a
 | 
						|
good idea, how about an embedded version that uses threads.
 | 
						|
A multi-threaded postgres might be good for that.
 | 
						|
The version I am working on is slower in terms of transaction
 | 
						|
throughput than the current postgres but it uses less system
 | 
						|
resources and does not require shared memory.
 | 
						|
 | 
						|
I know it is possible to embed the current postgres but I
 | 
						|
believe that is a single user system.
 | 
						|
 | 
						|
Comments?
 | 
						|
 | 
						|
 | 
						|
Myron Scott
 | 
						|
mkscott@sacadia.com
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 3: if posting/reading through Usenet, please send an appropriate
 | 
						|
subscribe-nomail command to majordomo@postgresql.org so that your
 | 
						|
message can get through to the mailing list cleanly
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33671@postgresql.org Fri Jan  3 10:27:00 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33671@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03FQwl07124
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 10:26:58 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id EDEBC4764DE; Fri,  3 Jan 2003 10:26:53 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 31554476422; Fri,  3 Jan 2003 10:25:46 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 69252476286
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 10:25:29 -0500 (EST)
 | 
						|
Received: from www.pspl.co.in (www.pspl.co.in [202.54.11.65])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 98F754764C3
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 10:23:52 -0500 (EST)
 | 
						|
Received: (from root@localhost)
 | 
						|
	by www.pspl.co.in (8.11.6/8.11.6) id h03FNtK17518
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri, 3 Jan 2003 20:53:55 +0530
 | 
						|
Received: from daithan.itnranet.pspl.co.in (daithan.intranet.pspl.co.in [192.168.7.161])
 | 
						|
	by www.pspl.co.in (8.11.6/8.11.0) with ESMTP id h03FNsf17512
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri, 3 Jan 2003 20:53:54 +0530
 | 
						|
From: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
 | 
						|
To: PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
Subject: [HACKERS] Threads
 | 
						|
Date: Fri, 3 Jan 2003 20:54:11 +0530
 | 
						|
User-Agent: KMail/1.4.3
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: Multipart/Mixed;
 | 
						|
  boundary="------------Boundary-00=_BG9530ZI94UNRKSGBVL5"
 | 
						|
Message-ID: <200301032054.11125.shridhar_daithankar@persistent.co.in>
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
 | 
						|
Content-Type: text/plain;
 | 
						|
  charset="us-ascii"
 | 
						|
Content-Transfer-Encoding: quoted-printable
 | 
						|
 | 
						|
Hi all,
 | 
						|
 | 
						|
I am sure, many of you would like to delete this message before reading, ho=
 | 
						|
ld=20
 | 
						|
on. :-)
 | 
						|
 | 
						|
There is much talk about threading on this list and the idea is always=20
 | 
						|
deferred for want of robust thread models across all supported platforms an=
 | 
						|
d=20
 | 
						|
feasibility of gains v/s efforts required.
 | 
						|
 | 
						|
I think threads are useful in difference situations namely parallelising=20
 | 
						|
blocking conditions and using multiple CPUs.
 | 
						|
 | 
						|
Attached is a framework that I ported to C from a C++ server I have written=
 | 
						|
.=20
 | 
						|
It has threadpool and threads implementation based on pthreads.
 | 
						|
 | 
						|
This code expects minimum pthreads implementation and does not assume anyth=
 | 
						|
ing=20
 | 
						|
on threads part (e.g kernel threads or not etc.)
 | 
						|
 | 
						|
I request hackers on this list to take a look at it. It should be easily=20
 | 
						|
pluggable in any source code and is released without any strings for any us=
 | 
						|
e.
 | 
						|
 | 
						|
This framework allows to plug-in the worker function and argument on the fl=
 | 
						|
y.=20
 | 
						|
The threads created are sleeping by default and can be woken up s and when=
 | 
						|
=20
 | 
						|
required.
 | 
						|
 | 
						|
I propose to use it incrementally in postgresql. Let's start with I/O. When=
 | 
						|
 a=20
 | 
						|
block of data is being read, rather than blocking for read, we can set up=
 | 
						|
=20
 | 
						|
creator-consumer link between two threads That we way can utilize that I/O=
 | 
						|
=20
 | 
						|
time in a overlapped fashion.
 | 
						|
 | 
						|
Further threads can be useful when the server has more CPUs. It can spread =
 | 
						|
CPU=20
 | 
						|
intensive work to different threads such as index creation or sorting. This=
 | 
						|
=20
 | 
						|
way we can utilise idle CPU which we can not as of now.
 | 
						|
 | 
						|
There are many advantages that I can see.
 | 
						|
 | 
						|
1)Threads can be optionally turned on/off depending upon the configuration.=
 | 
						|
 So=20
 | 
						|
we can entirely keep existing functionality and convert them one-by-one to=
 | 
						|
=20
 | 
						|
threaded application.
 | 
						|
 | 
						|
2)For each functionality we can have two code branches, one that do not use=
 | 
						|
=20
 | 
						|
threads i.e. current code base and one that can use threads. Agreed the=20
 | 
						|
binary will be bit bloated but that would give enormous flexibility. If we=
 | 
						|
=20
 | 
						|
find a thread implementation buggy, we simply switch it off either in=20
 | 
						|
compilation or inconfiguration.
 | 
						|
 | 
						|
3) Not much efforts should be required to plug code into this model. The id=
 | 
						|
ea=20
 | 
						|
of using threads is to assign exclusive work to each thread. So that should=
 | 
						|
=20
 | 
						|
not require much of a locking.
 | 
						|
 | 
						|
In case of using multiple CPUs, separate functions need be written that can=
 | 
						|
=20
 | 
						|
handle the things in a thread-safe fashion. Also a merger function would be=
 | 
						|
=20
 | 
						|
required which would merge results of worker threads. That would be totally=
 | 
						|
=20
 | 
						|
additional.
 | 
						|
 | 
						|
I would say two threads per CPU per back-end should be a reasonable default=
 | 
						|
 as=20
 | 
						|
that would cover I/O blocking well. Of course unless threading is turned of=
 | 
						|
f=20
 | 
						|
in build or in configuration.
 | 
						|
 | 
						|
Please note that I have tested the code in C++ and my C is rusty. Quite lik=
 | 
						|
ely=20
 | 
						|
there are bugs in the code. I will stress test the code on monday but I wou=
 | 
						|
ld=20
 | 
						|
like to seek an opinion on this as soon as possible. ( Hey but it compiles=
 | 
						|
=20
 | 
						|
clean..)
 | 
						|
 | 
						|
If required I can post example usage of this code, but I don't think that=
 | 
						|
=20
 | 
						|
should be necessary.:-)
 | 
						|
 | 
						|
Bye
 | 
						|
 Shridhar
 | 
						|
 | 
						|
--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
 | 
						|
Content-Type: text/x-chdr;
 | 
						|
  charset="us-ascii";
 | 
						|
  name="thread.h"
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Content-Disposition: attachment; filename="thread.h"
 | 
						|
 | 
						|
#define _REENTRANT
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <pthread.h>
 | 
						|
#include <unistd.h>
 | 
						|
 | 
						|
 | 
						|
//typedefs
 | 
						|
typedef void* (*function)(void *);
 | 
						|
typedef void* argtype;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
 pthread_mutex_t lock;
 | 
						|
 pthread_cond_t cond;
 | 
						|
 | 
						|
 unsigned short freeCount,n,count;
 | 
						|
 void *pool;
 | 
						|
 | 
						|
} threadPool;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
 pthread_t t;
 | 
						|
 pthread_attr_t tattr;
 | 
						|
 pthread_mutex_t lock;
 | 
						|
 pthread_cond_t cond;
 | 
						|
 | 
						|
 argtype arg;
 | 
						|
 function f;
 | 
						|
 | 
						|
 unsigned short quit;
 | 
						|
 threadPool *p;
 | 
						|
 | 
						|
} thread;
 | 
						|
 | 
						|
/*Thread functions*/
 | 
						|
void initThread(thread **t,threadPool *pool);
 | 
						|
void deleteThread(thread **t);
 | 
						|
void stop(thread *thr);
 | 
						|
 | 
						|
void wakeForWork(thread *thr,function func,argtype a);
 | 
						|
 | 
						|
argtype runner(void *ptr);
 | 
						|
 | 
						|
/*thread pool functions*/
 | 
						|
void initPool(threadPool **pool,unsigned short numthreads);
 | 
						|
void deletePool(threadPool **p);
 | 
						|
 | 
						|
void putThread(threadPool *p,thread *t);
 | 
						|
thread	*getThread(threadPool *p);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
 | 
						|
Content-Type: text/x-csrc;
 | 
						|
  charset="us-ascii";
 | 
						|
  name="thread.c"
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Content-Disposition: attachment; filename="thread.c"
 | 
						|
 | 
						|
#include "thread.h"
 | 
						|
 | 
						|
void initThread(thread **t,threadPool *pool)
 | 
						|
{
 | 
						|
 thread *thr=(thread *)malloc(sizeof(thread));
 | 
						|
 | 
						|
 if(!thr)
 | 
						|
 {
 | 
						|
  fprintf(stderr,"\nCan not allocate memory for thread. Quitting...\n");
 | 
						|
  exit(1);
 | 
						|
 }
 | 
						|
 | 
						|
 *t=thr;
 | 
						|
 | 
						|
 pthread_attr_init(&(thr->tattr));
 | 
						|
 pthread_mutex_init(&(thr->lock), NULL);
 | 
						|
 pthread_cond_init(&(thr->cond), NULL);
 | 
						|
 | 
						|
 pthread_attr_setdetachstate(&(thr->tattr),PTHREAD_CREATE_DETACHED);
 | 
						|
 | 
						|
 thr->quit=0;
 | 
						|
 thr->p=pool;
 | 
						|
 | 
						|
 //Create the thread
 | 
						|
 int ret=pthread_create(&(thr->t),&(thr->tattr),runner,(void *)thr);
 | 
						|
 | 
						|
 if(ret!=0)
 | 
						|
 {
 | 
						|
  fprintf(stderr,"\nCan not create thread. Quitting...\n");
 | 
						|
  exit(1);
 | 
						|
 }
 | 
						|
}
 | 
						|
 | 
						|
void deleteThread(thread **t)
 | 
						|
{
 | 
						|
 thread *thr=*t;
 | 
						|
 | 
						|
 if(!t) return;
 | 
						|
 | 
						|
 stop(thr);
 | 
						|
 | 
						|
 pthread_attr_destroy(&(thr->tattr));
 | 
						|
 pthread_cond_destroy(&(thr->cond));
 | 
						|
 pthread_mutex_destroy(&(thr->lock));
 | 
						|
 | 
						|
 free(thr);
 | 
						|
}
 | 
						|
 | 
						|
void stop(thread *thr)
 | 
						|
{
 | 
						|
 unsigned short i;
 | 
						|
 thr->quit=1;
 | 
						|
 | 
						|
 pthread_cond_signal(&(thr->cond));
 | 
						|
 | 
						|
 for(i=0;thr->quit && i<10;i++)
 | 
						|
 {
 | 
						|
   if(i>=10)
 | 
						|
   {
 | 
						|
	pthread_kill(thr->t,9);
 | 
						|
	break;
 | 
						|
   }
 | 
						|
   usleep(400);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void wakeForWork(thread *thr,function func,argtype a)
 | 
						|
{
 | 
						|
 thr->f=func;
 | 
						|
 thr->arg=a;
 | 
						|
 | 
						|
 pthread_cond_signal(&(thr->cond));
 | 
						|
}
 | 
						|
 | 
						|
argtype runner(void* arg)
 | 
						|
{
 | 
						|
 thread *ptr=(thread *)arg;
 | 
						|
 | 
						|
 while(1)
 | 
						|
 {
 | 
						|
  pthread_mutex_lock(&(ptr->lock));
 | 
						|
 | 
						|
  if(ptr->p)
 | 
						|
   putThread(ptr->p,ptr);
 | 
						|
 | 
						|
  pthread_cond_wait(&(ptr->cond),&(ptr->lock));
 | 
						|
 | 
						|
  if(ptr->quit) break;
 | 
						|
 | 
						|
  ptr->f((void *)ptr->arg);
 | 
						|
 | 
						|
  pthread_mutex_unlock(&(ptr->lock));
 | 
						|
 }
 | 
						|
 | 
						|
 ptr->quit=0;
 | 
						|
 | 
						|
 return NULL;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void initPool(threadPool **pool,unsigned short numthreads)
 | 
						|
{
 | 
						|
 thread **thr;
 | 
						|
 threadPool *p=(threadPool *)malloc(sizeof(threadPool));
 | 
						|
 | 
						|
 if(!p)
 | 
						|
 {
 | 
						|
  fprintf(stderr,"Can not get memory to create threadpool. Quitting\n");
 | 
						|
  exit(1);
 | 
						|
 }
 | 
						|
 
 | 
						|
 if(!pool)
 | 
						|
 {
 | 
						|
  free(p);
 | 
						|
  return;
 | 
						|
 }
 | 
						|
 | 
						|
 *pool=p;
 | 
						|
 | 
						|
 pthread_mutex_init(&(p->lock), NULL);
 | 
						|
 pthread_cond_init(&(p->cond), NULL);
 | 
						|
 | 
						|
 p->n=numthreads;
 | 
						|
 p->freeCount=0;
 | 
						|
 p->n=numthreads;
 | 
						|
 | 
						|
 thr=(thread **)malloc(numthreads*sizeof(thread *));
 | 
						|
 | 
						|
 if(!thr)
 | 
						|
 {
 | 
						|
  fprintf(stderr,"Can not get memory to create pool of threads. Quitting\n");
 | 
						|
  exit(1);
 | 
						|
 }
 | 
						|
 | 
						|
 p->pool=(void *)thr;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void deletePool(threadPool **pool)
 | 
						|
{
 | 
						|
 threadPool *p=(threadPool *)pool;
 | 
						|
 | 
						|
 if(!pool) return;
 | 
						|
 | 
						|
 thread **thr=(thread **)p->pool;
 | 
						|
 unsigned short i;
 | 
						|
 | 
						|
 for(i=0;i<p->n;i++) stop(thr[i]);
 | 
						|
 | 
						|
 free(p->pool);
 | 
						|
 | 
						|
 pthread_cond_destroy(&(p->cond));
 | 
						|
 pthread_mutex_destroy(&(p->lock));
 | 
						|
 | 
						|
 free(p);
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void putThread(threadPool *p,thread *t)
 | 
						|
{
 | 
						|
 unsigned short i;
 | 
						|
 thread **pool;
 | 
						|
 | 
						|
 if(!p || !t) return;
 | 
						|
 | 
						|
 pool=(thread **)p->pool;
 | 
						|
 | 
						|
 pthread_mutex_lock(&(p->lock));
 | 
						|
 | 
						|
 i=p->freeCount;
 | 
						|
 pool[(p->freeCount)++]=t;
 | 
						|
 | 
						|
 if(i<=0)pthread_cond_signal(&(p->cond));
 | 
						|
 | 
						|
 pthread_mutex_unlock(&(p->lock));
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
thread *getThread(threadPool *p)
 | 
						|
{
 | 
						|
 thread *t,**t1;
 | 
						|
 | 
						|
 if(!p) return NULL;
 | 
						|
 | 
						|
 t1=(thread **)p->pool;
 | 
						|
 | 
						|
 pthread_mutex_lock(&(p->lock));
 | 
						|
 | 
						|
 if((p->freeCount)<=0)pthread_cond_wait(&(p->cond),&(p->lock));
 | 
						|
 | 
						|
 t=t1[--(p->freeCount)];
 | 
						|
 | 
						|
 pthread_mutex_unlock(&(p->lock));
 | 
						|
 | 
						|
 return t;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
--------------Boundary-00=_BG9530ZI94UNRKSGBVL5
 | 
						|
Content-Type: text/plain
 | 
						|
Content-Disposition: inline
 | 
						|
Content-Transfer-Encoding: 8bit
 | 
						|
MIME-Version: 1.0
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 6: Have you searched our list archives?
 | 
						|
 | 
						|
http://archives.postgresql.org
 | 
						|
 | 
						|
--------------Boundary-00=_BG9530ZI94UNRKSGBVL5--
 | 
						|
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33682@postgresql.org Fri Jan  3 15:43:54 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33682@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03Khhl06938
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 15:43:45 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id DF70F476EA6; Fri,  3 Jan 2003 15:43:34 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 95BA8476514; Fri,  3 Jan 2003 15:43:26 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 71F4E475DBC
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:43:14 -0500 (EST)
 | 
						|
Received: from snoopy.mohawksoft.com (h0030f1382639.ne.client2.attbi.com [24.60.194.163])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id ACE5B475DAD
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:43:13 -0500 (EST)
 | 
						|
Received: from mohawksoft.com (snoopy.mohawksoft.com [127.0.0.1])
 | 
						|
	by snoopy.mohawksoft.com (8.11.6/8.11.6) with ESMTP id h03KlMs24421;
 | 
						|
	Fri, 3 Jan 2003 15:47:27 -0500
 | 
						|
Message-ID: <3E15F6DA.8000209@mohawksoft.com>
 | 
						|
Date: Fri, 03 Jan 2003 15:47:22 -0500
 | 
						|
From: mlw <pgsql@mohawksoft.com>
 | 
						|
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0
 | 
						|
X-Accept-Language: en-us, en
 | 
						|
MIME-Version: 1.0
 | 
						|
To: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
 | 
						|
cc: PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
References: <200301032054.11125.shridhar_daithankar@persistent.co.in>
 | 
						|
Content-Type: text/plain; charset=us-ascii; format=flowed
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
Please no threading threads!!!
 | 
						|
 | 
						|
Has anyone calculated the interval and period of "PostgreSQL needs 
 | 
						|
threads" posts?
 | 
						|
 | 
						|
The *ONLY* advantage threading has over multiple processes is the time 
 | 
						|
and resources used in creating new processes.
 | 
						|
 | 
						|
That being said, I admit that creating a threaded program is easier than 
 | 
						|
one with multiple processes, but PostgreSQL is already there and working.
 | 
						|
 | 
						|
Drawbacks to a threaded model:
 | 
						|
 | 
						|
(1) One thread screws up, the whole process dies. In a multiple process 
 | 
						|
application this is not too much of an issue.
 | 
						|
 | 
						|
(2) Heap fragmentation. In a long uptime application, such as a 
 | 
						|
database, heap fragmentation is an important consideration. With 
 | 
						|
multiple processes, each process manages its own heap and what ever 
 | 
						|
fragmentation that exists goes away when the connection is closed.  A 
 | 
						|
threaded server is far more vulnerable because the heap has to manage 
 | 
						|
many threads and the heap has to stay active and unfragmented in 
 | 
						|
perpetuity. This is why Windows applications usually end up using 2G of 
 | 
						|
memory after 3 months of use. (Well, this AND memory leaks)
 | 
						|
 | 
						|
(3) Stack space. In a threaded application they are more limits to stack 
 | 
						|
usage. I'm not sure, but I bet PostgreSQL would have a problem with a 
 | 
						|
fixed size stack, I know the old ODBC driver did.
 | 
						|
 | 
						|
(4) Lock Contention. The various single points of access in a process 
 | 
						|
have to be serialized for multiple threads. heap allocation, 
 | 
						|
deallocation, etc all have to be managed. In a multple process model, 
 | 
						|
these resources would be separated by process contexts.
 | 
						|
 | 
						|
(5) Lastly, why bother? Seriously? Process creation time is an issue 
 | 
						|
true, but its an issue with threads as well, just not as bad. Anyone who 
 | 
						|
is looking for performance should be using a connection pooling 
 | 
						|
mechanism as is done in things like PHP.
 | 
						|
 | 
						|
I have done both threaded and process servers. The threaded servers are 
 | 
						|
easier to write. The process based severs are more robust. From an 
 | 
						|
operational point of view, a "select foo from bar where x > y" will take 
 | 
						|
he same amount of time.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 6: Have you searched our list archives?
 | 
						|
 | 
						|
http://archives.postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33684@postgresql.org Fri Jan  3 15:56:48 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33684@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03Kufl08003
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 15:56:43 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id D0392477118; Fri,  3 Jan 2003 15:56:31 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 31FDC475461; Fri,  3 Jan 2003 15:55:26 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id BD892477147
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:55:09 -0500 (EST)
 | 
						|
Received: from voyager.corporate.connx.com (unknown [209.20.248.131])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 7EE644771A0
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 15:52:47 -0500 (EST)
 | 
						|
content-class: urn:content-classes:message
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain;
 | 
						|
	charset="us-ascii"
 | 
						|
Date: Fri, 3 Jan 2003 12:52:48 -0800
 | 
						|
X-MimeOLE: Produced By Microsoft Exchange V6.0.6249.0
 | 
						|
Message-ID: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
Thread-Topic: [HACKERS] Threads
 | 
						|
Thread-Index: AcKzaMsucwBFaOikSjKML8BqvR/gCAAACDPA
 | 
						|
From: "Dann Corbit" <DCorbit@connx.com>
 | 
						|
To: "PGHackers" <pgsql-hackers@postgresql.org>
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Content-Transfer-Encoding: 8bit
 | 
						|
X-MIME-Autoconverted: from quoted-printable to 8bit by candle.pha.pa.us id h03Kufl08003
 | 
						|
Status: OR
 | 
						|
 | 
						|
> -----Original Message-----
 | 
						|
> From: mlw [mailto:pgsql@mohawksoft.com] 
 | 
						|
> Sent: Friday, January 03, 2003 12:47 PM
 | 
						|
> To: Shridhar Daithankar
 | 
						|
> Cc: PGHackers
 | 
						|
> Subject: Re: [HACKERS] Threads
 | 
						|
> 
 | 
						|
> 
 | 
						|
> Please no threading threads!!!
 | 
						|
> 
 | 
						|
> Has anyone calculated the interval and period of "PostgreSQL needs 
 | 
						|
> threads" posts?
 | 
						|
> 
 | 
						|
> The *ONLY* advantage threading has over multiple processes is 
 | 
						|
> the time 
 | 
						|
> and resources used in creating new processes.
 | 
						|
 | 
						|
Threading is absurdly easier to do portably than fork().
 | 
						|
 | 
						|
Will you fork() successfully on MVS, VMS, OS/2, Win32?
 | 
						|
 | 
						|
On some operating systems, thread creation is absurdly faster than
 | 
						|
process creation (many orders of magnitude).
 | 
						|
 
 | 
						|
> That being said, I admit that creating a threaded program is 
 | 
						|
> easier than 
 | 
						|
> one with multiple processes, but PostgreSQL is already there 
 | 
						|
> and working.
 | 
						|
> 
 | 
						|
> Drawbacks to a threaded model:
 | 
						|
> 
 | 
						|
> (1) One thread screws up, the whole process dies. In a 
 | 
						|
> multiple process 
 | 
						|
> application this is not too much of an issue.
 | 
						|
 | 
						|
If you use C++ you can try/catch and nothing bad happens to anything but
 | 
						|
the naughty thread.
 | 
						|
 
 | 
						|
> (2) Heap fragmentation. In a long uptime application, such as a 
 | 
						|
> database, heap fragmentation is an important consideration. With 
 | 
						|
> multiple processes, each process manages its own heap and what ever 
 | 
						|
> fragmentation that exists goes away when the connection is closed.  A 
 | 
						|
> threaded server is far more vulnerable because the heap has to manage 
 | 
						|
> many threads and the heap has to stay active and unfragmented in 
 | 
						|
> perpetuity. This is why Windows applications usually end up 
 | 
						|
> using 2G of 
 | 
						|
> memory after 3 months of use. (Well, this AND memory leaks)
 | 
						|
 | 
						|
Poorly written applications leak memory.  Fragmentation is a legitimate
 | 
						|
concern.
 | 
						|
 
 | 
						|
> (3) Stack space. In a threaded application they are more 
 | 
						|
> limits to stack 
 | 
						|
> usage. I'm not sure, but I bet PostgreSQL would have a problem with a 
 | 
						|
> fixed size stack, I know the old ODBC driver did.
 | 
						|
 | 
						|
A single server with 20 threads will consume less total free store
 | 
						|
memory and automatic memory than 20 servers.  You have to decide how
 | 
						|
much stack to give a thread, that's true.
 | 
						|
 
 | 
						|
> (4) Lock Contention. The various single points of access in a process 
 | 
						|
> have to be serialized for multiple threads. heap allocation, 
 | 
						|
> deallocation, etc all have to be managed. In a multple process model, 
 | 
						|
> these resources would be separated by process contexts.
 | 
						|
 | 
						|
Semaphores are more complicated than critical sections.  If anything, a
 | 
						|
shared memory approach is more problematic and fragile, especially when
 | 
						|
porting to multiple operating systems.
 | 
						|
 
 | 
						|
> (5) Lastly, why bother? Seriously? Process creation time is an issue 
 | 
						|
> true, but its an issue with threads as well, just not as bad. 
 | 
						|
> Anyone who 
 | 
						|
> is looking for performance should be using a connection pooling 
 | 
						|
> mechanism as is done in things like PHP.
 | 
						|
> 
 | 
						|
> I have done both threaded and process servers. The threaded 
 | 
						|
> servers are 
 | 
						|
> easier to write. The process based severs are more robust. From an 
 | 
						|
> operational point of view, a "select foo from bar where x > 
 | 
						|
> y" will take 
 | 
						|
> he same amount of time.
 | 
						|
 | 
						|
Probably true.  I think a better solution is a server that can start
 | 
						|
threads or processes or both.  But that's neither here nor there and I'm
 | 
						|
certainly not volunteering to write it.
 | 
						|
 | 
						|
Here is a solution to the dilemma.  Make the one who suggests the
 | 
						|
feature be the first volunteer on the team that writes it.
 | 
						|
 | 
						|
Is it a FAQ?  If not, it ought to be.
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 3: if posting/reading through Usenet, please send an appropriate
 | 
						|
subscribe-nomail command to majordomo@postgresql.org so that your
 | 
						|
message can get through to the mailing list cleanly
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33685@postgresql.org Fri Jan  3 16:35:02 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33685@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03LYsl11402
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 16:34:56 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 0F09B477168; Fri,  3 Jan 2003 16:34:48 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id C1A9C477132; Fri,  3 Jan 2003 16:34:39 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id D830847630B
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:34:25 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 025DD476417
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:34:24 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h03LY2700731;
 | 
						|
	Fri, 3 Jan 2003 15:34:03 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Fri, 3 Jan 2003 15:34:03 -0600 (CST).Fri, 3 Jan 2003 15:34:03 -0600 (CST).200301032134.h03LY2700731.h03LY2700731@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: mlw <pgsql@mohawksoft.com>
 | 
						|
cc: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>,
 | 
						|
   PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <3E15F6DA.8000209@mohawksoft.com>
 | 
						|
References: <200301032054.11125.shridhar_daithankar@persistent.co.in>
 | 
						|
  <3E15F6DA.8000209@mohawksoft.com>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041629649.15933.135.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 03 Jan 2003 15:34:10 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Fri, 2003-01-03 at 14:47, mlw wrote:
 | 
						|
> Please no threading threads!!!
 | 
						|
> 
 | 
						|
 | 
						|
Ya, I'm very pro threads but I've long since been sold on no threads for
 | 
						|
PostgreSQL.  AIO on the other hand... ;)
 | 
						|
 | 
						|
Your summary so accurately addresses the issue it should be a whole FAQ
 | 
						|
entry on threads and PostgreSQL.  :)
 | 
						|
 | 
						|
 | 
						|
> Drawbacks to a threaded model:
 | 
						|
> 
 | 
						|
> (1) One thread screws up, the whole process dies. In a multiple process 
 | 
						|
> application this is not too much of an issue.
 | 
						|
> 
 | 
						|
> (2) Heap fragmentation. In a long uptime application, such as a 
 | 
						|
> database, heap fragmentation is an important consideration. With 
 | 
						|
> multiple processes, each process manages its own heap and what ever 
 | 
						|
> fragmentation that exists goes away when the connection is closed.  A 
 | 
						|
> threaded server is far more vulnerable because the heap has to manage 
 | 
						|
> many threads and the heap has to stay active and unfragmented in 
 | 
						|
> perpetuity. This is why Windows applications usually end up using 2G of 
 | 
						|
> memory after 3 months of use. (Well, this AND memory leaks)
 | 
						|
 | 
						|
 | 
						|
These are things that can't be stressed enough.  IMO, these are some of
 | 
						|
the many reasons why applications running on MS platforms tend to have
 | 
						|
much lower application and system up times (that and resources leaks
 | 
						|
which are inherent to the platform).
 | 
						|
 | 
						|
BTW, if you do much in the way of threaded coding, there is libHorde
 | 
						|
which is a heap library for heavily threaded, memory hungry
 | 
						|
applications.  It excels in performance, reduces heap lock contention
 | 
						|
(maintains multiple heaps in a very thread smart manner), and goes a
 | 
						|
long way toward reducing heap fragmentation which is common for heavily
 | 
						|
memory based, threaded applications.
 | 
						|
 | 
						|
 | 
						|
> (3) Stack space. In a threaded application they are more limits to stack 
 | 
						|
> usage. I'm not sure, but I bet PostgreSQL would have a problem with a 
 | 
						|
> fixed size stack, I know the old ODBC driver did.
 | 
						|
> 
 | 
						|
 | 
						|
Most modern thread implementations use a page guard on the stack to
 | 
						|
determine if it needs to grow or not.  Generally speaking, for most
 | 
						|
modern platforms which support threading, stack considerations rarely
 | 
						|
become an issue.
 | 
						|
 | 
						|
 | 
						|
> (5) Lastly, why bother? Seriously? Process creation time is an issue 
 | 
						|
> true, but its an issue with threads as well, just not as bad. Anyone who 
 | 
						|
> is looking for performance should be using a connection pooling 
 | 
						|
> mechanism as is done in things like PHP.
 | 
						|
> 
 | 
						|
> I have done both threaded and process servers. The threaded servers are 
 | 
						|
> easier to write. The process based severs are more robust. From an 
 | 
						|
> operational point of view, a "select foo from bar where x > y" will take 
 | 
						|
> he same amount of time.
 | 
						|
> 
 | 
						|
 | 
						|
I agree with this, however, using threads does open the door for things
 | 
						|
like splitting queries and sorts across multiple CPUs.  Something the
 | 
						|
current process model, which was previously agreed on, would not be able
 | 
						|
to address because of cost.
 | 
						|
 | 
						|
Example: "select foo from bar where x > y order by foo ;", could be run
 | 
						|
on multiple CPUs if the sort were large enough to justify.
 | 
						|
 | 
						|
After it's all said and done, I do agree that threading just doesn't
 | 
						|
seem like a good fit for PostgreSQL.
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 4: Don't 'kill -9' the postmaster
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33686@postgresql.org Fri Jan  3 16:47:20 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33686@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h03LlBl12502
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 16:47:12 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 6873147621D; Fri,  3 Jan 2003 16:47:06 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 97466477133; Fri,  3 Jan 2003 16:46:41 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id E25BB477152
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:46:24 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 84A87477157
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 16:45:21 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h03LjC712426;
 | 
						|
	Fri, 3 Jan 2003 15:45:13 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Fri, 3 Jan 2003 15:45:13 -0600 (CST).Fri, 3 Jan 2003 15:45:13 -0600 (CST).200301032145.h03LjC712426.h03LjC712426@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: Dann Corbit <DCorbit@connx.com>
 | 
						|
cc: PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041630319.15927.146.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 03 Jan 2003 15:45:20 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Fri, 2003-01-03 at 14:52, Dann Corbit wrote:
 | 
						|
> > -----Original Message-----
 | 
						|
> > (1) One thread screws up, the whole process dies. In a 
 | 
						|
> > multiple process 
 | 
						|
> > application this is not too much of an issue.
 | 
						|
> 
 | 
						|
> If you use C++ you can try/catch and nothing bad happens to anything but
 | 
						|
> the naughty thread.
 | 
						|
 | 
						|
That doesn't protect against the type of issues he's talking about. 
 | 
						|
Invalid pointer reference is a very common snafu which really hoses
 | 
						|
threaded applications.  Not to mention resource leaks AND LOCKED
 | 
						|
resources which are inherently an issue on Win32.
 | 
						|
 | 
						|
Besides, it's doubtful that PostgreSQL is going to be rewritten in C++
 | 
						|
so bringing up try/catch is pretty much an invalid argument.
 | 
						|
 | 
						|
>  
 | 
						|
> > (2) Heap fragmentation. In a long uptime application, such as a 
 | 
						|
> > database, heap fragmentation is an important consideration. With 
 | 
						|
> > multiple processes, each process manages its own heap and what ever 
 | 
						|
> > fragmentation that exists goes away when the connection is closed.  A 
 | 
						|
> > threaded server is far more vulnerable because the heap has to manage 
 | 
						|
> > many threads and the heap has to stay active and unfragmented in 
 | 
						|
> > perpetuity. This is why Windows applications usually end up 
 | 
						|
> > using 2G of 
 | 
						|
> > memory after 3 months of use. (Well, this AND memory leaks)
 | 
						|
> 
 | 
						|
> Poorly written applications leak memory.  Fragmentation is a legitimate
 | 
						|
> concern.
 | 
						|
 | 
						|
And well written applications which attempt to safely handle segfaults,
 | 
						|
etc., often leak memory and lock resources like crazy.  On Win32,
 | 
						|
depending on the nature of the resources, once this happens, even
 | 
						|
process termination will not free/unlock the resources.
 | 
						|
 | 
						|
> > (4) Lock Contention. The various single points of access in a process 
 | 
						|
> > have to be serialized for multiple threads. heap allocation, 
 | 
						|
> > deallocation, etc all have to be managed. In a multple process model, 
 | 
						|
> > these resources would be separated by process contexts.
 | 
						|
> 
 | 
						|
> Semaphores are more complicated than critical sections.  If anything, a
 | 
						|
> shared memory approach is more problematic and fragile, especially when
 | 
						|
> porting to multiple operating systems.
 | 
						|
 | 
						|
And critical sections lead to low performance on SMP systems for Win32
 | 
						|
platforms.  No task can switch on ANY CPU for the duration of the
 | 
						|
critical section.  It's highly recommend by MS as the majority of Win32
 | 
						|
applications expect uniprocessor systems and they are VERY fast.  As
 | 
						|
soon as multiple processors come into the mix, critical sections become
 | 
						|
a HORRIBLE idea if any soft of scalability is desired.
 | 
						|
 | 
						|
 | 
						|
> Is it a FAQ?  If not, it ought to be.
 | 
						|
 | 
						|
I agree.  I think mlw's list of reasons should be added to a faq.  It
 | 
						|
terse yet says it all!
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 2: you can get off all lists at once with the unregister command
 | 
						|
    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33703@postgresql.org Fri Jan  3 20:41:10 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33703@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h041f9l05824
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 20:41:09 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 7F5764764C8; Fri,  3 Jan 2003 20:41:04 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id BE24547606D; Fri,  3 Jan 2003 20:38:53 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 4D50D476165
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 20:38:39 -0500 (EST)
 | 
						|
Received: from sss.pgh.pa.us (unknown [192.204.191.242])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 20C8547659F
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 20:34:10 -0500 (EST)
 | 
						|
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
 | 
						|
	by sss.pgh.pa.us (8.12.6/8.12.6) with ESMTP id h041Y20U023764;
 | 
						|
	Fri, 3 Jan 2003 20:34:03 -0500 (EST)
 | 
						|
To: "Serguei Mokhov" <mokhov@cs.concordia.ca>
 | 
						|
cc: "Greg Copeland" <greg@CopelandConsulting.Net>,
 | 
						|
   "Dann Corbit" <DCorbit@connx.com>,
 | 
						|
   "PGHackers" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads 
 | 
						|
In-Reply-To: <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan> 
 | 
						|
References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com> <1041630319.15927.146.camel@mouse.copelandconsulting.net> <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>
 | 
						|
Comments: In-reply-to "Serguei Mokhov" <mokhov@cs.concordia.ca>
 | 
						|
	message dated "Fri, 03 Jan 2003 17:54:20 -0500"
 | 
						|
Date: Fri, 03 Jan 2003 20:34:02 -0500
 | 
						|
Message-ID: <23763.1041644042@sss.pgh.pa.us>
 | 
						|
From: Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
"Serguei Mokhov" <mokhov@cs.concordia.ca> writes:
 | 
						|
>>> (1) One thread screws up, the whole process dies. In a 
 | 
						|
>>> multiple process application this is not too much of an issue.
 | 
						|
 | 
						|
> (1) is an issue only for user-level threads.
 | 
						|
 | 
						|
Uh, what other kind of thread have you got in mind here?
 | 
						|
 | 
						|
I suppose the lack-of-cross-thread-protection issue would go away if
 | 
						|
our objective was only to use threads for internal parallelism in each
 | 
						|
backend instance (ie, you still have one process per connection, but
 | 
						|
internally it would use multiple threads to process subqueries in
 | 
						|
parallel).
 | 
						|
 | 
						|
Of course that gives up the hope of faster connection startup that has
 | 
						|
always been touted as a major reason to want Postgres to be threaded...
 | 
						|
 | 
						|
			regards, tom lane
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 5: Have you checked our extensive FAQ?
 | 
						|
 | 
						|
http://www.postgresql.org/users-lounge/docs/faq.html
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33706@postgresql.org Fri Jan  3 21:16:55 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33706@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h042Gsl08584
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 21:16:54 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 8F2EB475E22; Fri,  3 Jan 2003 21:16:49 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 72017475FDA; Fri,  3 Jan 2003 21:15:21 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id EA790476242
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 21:15:00 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id BB7A0475D0D
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 21:11:20 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h042B8729407;
 | 
						|
	Fri, 3 Jan 2003 20:11:08 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Fri, 3 Jan 2003 20:11:08 -0600 (CST).Fri, 3 Jan 2003 20:11:08 -0600 (CST).200301040211.h042B8729407.h042B8729407@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
cc: Serguei Mokhov <mokhov@cs.concordia.ca>, Dann Corbit <DCorbit@connx.com>,
 | 
						|
   PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <23763.1041644042@sss.pgh.pa.us>
 | 
						|
References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
  <1041630319.15927.146.camel@mouse.copelandconsulting.net>
 | 
						|
  <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>
 | 
						|
  <23763.1041644042@sss.pgh.pa.us>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041646276.15927.202.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 03 Jan 2003 20:11:17 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Fri, 2003-01-03 at 19:34, Tom Lane wrote:
 | 
						|
> "Serguei Mokhov" <mokhov@cs.concordia.ca> writes:
 | 
						|
> >>> (1) One thread screws up, the whole process dies. In a 
 | 
						|
> >>> multiple process application this is not too much of an issue.
 | 
						|
> 
 | 
						|
> > (1) is an issue only for user-level threads.
 | 
						|
> 
 | 
						|
 | 
						|
 | 
						|
Umm.  No.  User or system level threads, the statement is true.  If a
 | 
						|
thread kills over, the process goes with it.  Furthermore, on Win32
 | 
						|
platforms, it opens a whole can of worms no matter how you care to
 | 
						|
address it.
 | 
						|
 | 
						|
> Uh, what other kind of thread have you got in mind here?
 | 
						|
> 
 | 
						|
> I suppose the lack-of-cross-thread-protection issue would go away if
 | 
						|
> our objective was only to use threads for internal parallelism in each
 | 
						|
> backend instance (ie, you still have one process per connection, but
 | 
						|
> internally it would use multiple threads to process subqueries in
 | 
						|
> parallel).
 | 
						|
> 
 | 
						|
 | 
						|
Several have previously spoken about a hybrid approach (ala Apache). 
 | 
						|
IIRC, it was never ruled out but it was simply stated that no one had
 | 
						|
the energy to put into such a concept.
 | 
						|
 | 
						|
> Of course that gives up the hope of faster connection startup that has
 | 
						|
> always been touted as a major reason to want Postgres to be threaded...
 | 
						|
> 
 | 
						|
> 			regards, tom lane
 | 
						|
 | 
						|
Faster startup, should never be the primary reason as there are many
 | 
						|
ways to address that issue already.  Connection pooling and caching are
 | 
						|
by far, the most common way to address this issue.  Not only that, but
 | 
						|
by definition, it's almost an oxymoron.  If you really need high
 | 
						|
performance, you shouldn't be using transient connections, no matter how
 | 
						|
fast they are.  This, in turn, brings you back to persistent connections
 | 
						|
or connection pools/caches.
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 4: Don't 'kill -9' the postmaster
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33709@postgresql.org Fri Jan  3 22:39:26 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33709@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h043dOl13614
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 22:39:25 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id CA13B47621C; Fri,  3 Jan 2003 22:39:20 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 8DE1D475DFF; Fri,  3 Jan 2003 22:39:04 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 15AA1475AFF
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:39:00 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 19D8F475ADD
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:38:59 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h043ca714568;
 | 
						|
	Fri, 3 Jan 2003 21:38:36 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Fri, 3 Jan 2003 21:38:36 -0600 (CST).Fri, 3 Jan 2003 21:38:36 -0600 (CST).200301040338.h043ca714568.h043ca714568@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: mlw <pgsql@mohawksoft.com>
 | 
						|
cc: Tom Lane <tgl@sss.pgh.pa.us>, Serguei Mokhov <mokhov@cs.concordia.ca>,
 | 
						|
   Dann Corbit <DCorbit@connx.com>, PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <3E16575C.1030805@mohawksoft.com>
 | 
						|
References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
  <1041630319.15927.146.camel@mouse.copelandconsulting.net>
 | 
						|
  <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>
 | 
						|
  <23763.1041644042@sss.pgh.pa.us>
 | 
						|
  <1041646276.15927.202.camel@mouse.copelandconsulting.net>
 | 
						|
  <3E16575C.1030805@mohawksoft.com>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041651525.15927.207.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 03 Jan 2003 21:38:46 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Fri, 2003-01-03 at 21:39, mlw wrote:
 | 
						|
> Connection time should *never* be in the critical path. There, I've
 | 
						|
> said it!! People who complain about connection time are barking up the
 | 
						|
> wrong tree. Regardless of the methodology, EVERY OS has issues with
 | 
						|
> thread creation, process creation, the memory allocation, and system
 | 
						|
> manipulation  required to manage it. Under load this is ALWAYS slower.
 | 
						|
> 
 | 
						|
> I think that if there is ever a choice, "do I make startup time
 | 
						|
> faster?" or "Do I make PostgreSQL not need a dump/restore for upgrade"
 | 
						|
> the upgrade problem has a much higher impact to real PostgreSQL sites.
 | 
						|
 | 
						|
 | 
						|
Exactly.  Trying to speed up something that shouldn't be in the critical
 | 
						|
path is exactly what I'm talking about.
 | 
						|
 | 
						|
I completely agree with you!
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 4: Don't 'kill -9' the postmaster
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33708@postgresql.org Fri Jan  3 22:35:26 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33708@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h043ZOl13418
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 3 Jan 2003 22:35:25 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 2277B475FDA; Fri,  3 Jan 2003 22:35:21 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id DA681475E18; Fri,  3 Jan 2003 22:35:12 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 8254047595A
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:34:58 -0500 (EST)
 | 
						|
Received: from snoopy.mohawksoft.com (h0030f1382639.ne.client2.attbi.com [24.60.194.163])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id A4D60475921
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri,  3 Jan 2003 22:34:57 -0500 (EST)
 | 
						|
Received: from mohawksoft.com (snoopy.mohawksoft.com [127.0.0.1])
 | 
						|
	by snoopy.mohawksoft.com (8.11.6/8.11.6) with ESMTP id h043d8s26180;
 | 
						|
	Fri, 3 Jan 2003 22:39:09 -0500
 | 
						|
Message-ID: <3E16575C.1030805@mohawksoft.com>
 | 
						|
Date: Fri, 03 Jan 2003 22:39:08 -0500
 | 
						|
From: mlw <pgsql@mohawksoft.com>
 | 
						|
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0
 | 
						|
X-Accept-Language: en-us, en
 | 
						|
MIME-Version: 1.0
 | 
						|
To: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
cc: Tom Lane <tgl@sss.pgh.pa.us>, Serguei Mokhov <mokhov@cs.concordia.ca>,
 | 
						|
   Dann Corbit <DCorbit@connx.com>, PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>	 <1041630319.15927.146.camel@mouse.copelandconsulting.net>	 <004101c2b37b$0f261ae0$0301a8c0@gunnymede.lan>	 <23763.1041644042@sss.pgh.pa.us> <1041646276.15927.202.camel@mouse.copelandconsulting.net>
 | 
						|
Content-Type: multipart/alternative;
 | 
						|
	boundary="------------030005060103020905060907"
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
--------------030005060103020905060907
 | 
						|
Content-Type: text/plain; charset=us-ascii; format=flowed
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Greg Copeland wrote:
 | 
						|
 | 
						|
>  
 | 
						|
>
 | 
						|
>>Of course that gives up the hope of faster connection startup that has
 | 
						|
>>always been touted as a major reason to want Postgres to be threaded...
 | 
						|
>>
 | 
						|
>>			regards, tom lane
 | 
						|
>>    
 | 
						|
>>
 | 
						|
>
 | 
						|
>Faster startup, should never be the primary reason as there are many
 | 
						|
>ways to address that issue already.  Connection pooling and caching are
 | 
						|
>by far, the most common way to address this issue.  Not only that, but
 | 
						|
>by definition, it's almost an oxymoron.  If you really need high
 | 
						|
>performance, you shouldn't be using transient connections, no matter how
 | 
						|
>fast they are.  This, in turn, brings you back to persistent connections
 | 
						|
>or connection pools/caches.
 | 
						|
>
 | 
						|
Connection time should *never* be in the critical path. There, I've said 
 | 
						|
it!! People who complain about connection time are barking up the wrong 
 | 
						|
tree. Regardless of the methodology, EVERY OS has issues with thread 
 | 
						|
creation, process creation, the memory allocation, and system 
 | 
						|
manipulation  required to manage it. Under load this is ALWAYS slower.
 | 
						|
 | 
						|
I think that if there is ever a choice, "do I make startup time faster?" 
 | 
						|
or "Do I make PostgreSQL not need a dump/restore for upgrade" the 
 | 
						|
upgrade problem has a much higher impact to real PostgreSQL sites.
 | 
						|
 | 
						|
--------------030005060103020905060907
 | 
						|
Content-Type: text/html; charset=us-ascii
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
 | 
						|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | 
						|
<html>
 | 
						|
<head>
 | 
						|
  <title></title>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
<br>
 | 
						|
<br>
 | 
						|
Greg Copeland wrote:<br>
 | 
						|
<blockquote type="cite"
 | 
						|
 cite="mid1041646276.15927.202.camel@mouse.copelandconsulting.net">
 | 
						|
  <pre wrap="">
 | 
						|
  </pre>
 | 
						|
  <blockquote type="cite">
 | 
						|
    <pre wrap="">Of course that gives up the hope of faster connection startup that has
 | 
						|
always been touted as a major reason to want Postgres to be threaded...
 | 
						|
 | 
						|
			regards, tom lane
 | 
						|
    </pre>
 | 
						|
  </blockquote>
 | 
						|
  <pre wrap=""><!---->
 | 
						|
Faster startup, should never be the primary reason as there are many
 | 
						|
ways to address that issue already.  Connection pooling and caching are
 | 
						|
by far, the most common way to address this issue.  Not only that, but
 | 
						|
by definition, it's almost an oxymoron.  If you really need high
 | 
						|
performance, you shouldn't be using transient connections, no matter how
 | 
						|
fast they are.  This, in turn, brings you back to persistent connections
 | 
						|
or connection pools/caches.</pre>
 | 
						|
</blockquote>
 | 
						|
Connection time should *never* be in the critical path. There, I've said
 | 
						|
it!! People who complain about connection time are barking up the wrong tree.
 | 
						|
Regardless of the methodology, EVERY OS has issues with thread creation,
 | 
						|
process creation, the memory allocation, and system manipulation  required
 | 
						|
to manage it. Under load this is ALWAYS slower. <br>
 | 
						|
<br>
 | 
						|
I think that if there is ever a choice, "do I make startup time faster?"
 | 
						|
or "Do I make PostgreSQL not need a dump/restore for upgrade" the upgrade
 | 
						|
problem has a much higher impact to real PostgreSQL sites.<br>
 | 
						|
</body>
 | 
						|
</html>
 | 
						|
 | 
						|
--------------030005060103020905060907--
 | 
						|
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33713@postgresql.org Sat Jan  4 00:34:04 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33713@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h045Y2l23520
 | 
						|
	for <pgman@candle.pha.pa.us>; Sat, 4 Jan 2003 00:34:02 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id BCA39476226; Sat,  4 Jan 2003 00:33:56 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 1B030475F09; Sat,  4 Jan 2003 00:33:47 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id A42D847595A
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 00:33:37 -0500 (EST)
 | 
						|
Received: from houston.familyhealth.com.au (unknown [203.59.48.253])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id C14B4475921
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 00:33:35 -0500 (EST)
 | 
						|
Received: from localhost (chriskl@localhost)
 | 
						|
	by houston.familyhealth.com.au (8.11.6/8.11.6) with ESMTP id h045XKt36362;
 | 
						|
	Sat, 4 Jan 2003 13:33:23 +0800 (WST)
 | 
						|
	(envelope-from chriskl@familyhealth.com.au)
 | 
						|
Date: Sat, 4 Jan 2003 13:33:20 +0800 (WST)
 | 
						|
From: Christopher Kings-Lynne <chriskl@familyhealth.com.au>
 | 
						|
To: mlw <pgsql@mohawksoft.com>
 | 
						|
cc: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>,
 | 
						|
   PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
In-Reply-To: <3E15F6DA.8000209@mohawksoft.com>
 | 
						|
Message-ID: <20030104133226.N36192-100000@houston.familyhealth.com.au>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
Also remember that in even well developed OS's like FreeBSD, all a
 | 
						|
process's threads will execute only on one CPU.  This might change in
 | 
						|
FreeBSD 5.0, but still a threaded app (such as MySQL) cannot use mutliple
 | 
						|
CPUs on a FreeBSD system.
 | 
						|
 | 
						|
Chris
 | 
						|
 | 
						|
On Fri, 3 Jan 2003, mlw wrote:
 | 
						|
 | 
						|
> Please no threading threads!!!
 | 
						|
>
 | 
						|
> Has anyone calculated the interval and period of "PostgreSQL needs
 | 
						|
> threads" posts?
 | 
						|
>
 | 
						|
> The *ONLY* advantage threading has over multiple processes is the time
 | 
						|
> and resources used in creating new processes.
 | 
						|
>
 | 
						|
> That being said, I admit that creating a threaded program is easier than
 | 
						|
> one with multiple processes, but PostgreSQL is already there and working.
 | 
						|
>
 | 
						|
> Drawbacks to a threaded model:
 | 
						|
>
 | 
						|
> (1) One thread screws up, the whole process dies. In a multiple process
 | 
						|
> application this is not too much of an issue.
 | 
						|
>
 | 
						|
> (2) Heap fragmentation. In a long uptime application, such as a
 | 
						|
> database, heap fragmentation is an important consideration. With
 | 
						|
> multiple processes, each process manages its own heap and what ever
 | 
						|
> fragmentation that exists goes away when the connection is closed.  A
 | 
						|
> threaded server is far more vulnerable because the heap has to manage
 | 
						|
> many threads and the heap has to stay active and unfragmented in
 | 
						|
> perpetuity. This is why Windows applications usually end up using 2G of
 | 
						|
> memory after 3 months of use. (Well, this AND memory leaks)
 | 
						|
>
 | 
						|
> (3) Stack space. In a threaded application they are more limits to stack
 | 
						|
> usage. I'm not sure, but I bet PostgreSQL would have a problem with a
 | 
						|
> fixed size stack, I know the old ODBC driver did.
 | 
						|
>
 | 
						|
> (4) Lock Contention. The various single points of access in a process
 | 
						|
> have to be serialized for multiple threads. heap allocation,
 | 
						|
> deallocation, etc all have to be managed. In a multple process model,
 | 
						|
> these resources would be separated by process contexts.
 | 
						|
>
 | 
						|
> (5) Lastly, why bother? Seriously? Process creation time is an issue
 | 
						|
> true, but its an issue with threads as well, just not as bad. Anyone who
 | 
						|
> is looking for performance should be using a connection pooling
 | 
						|
> mechanism as is done in things like PHP.
 | 
						|
>
 | 
						|
> I have done both threaded and process servers. The threaded servers are
 | 
						|
> easier to write. The process based severs are more robust. From an
 | 
						|
> operational point of view, a "select foo from bar where x > y" will take
 | 
						|
> he same amount of time.
 | 
						|
>
 | 
						|
>
 | 
						|
>
 | 
						|
>
 | 
						|
> ---------------------------(end of broadcast)---------------------------
 | 
						|
> TIP 6: Have you searched our list archives?
 | 
						|
>
 | 
						|
> http://archives.postgresql.org
 | 
						|
>
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 3: if posting/reading through Usenet, please send an appropriate
 | 
						|
subscribe-nomail command to majordomo@postgresql.org so that your
 | 
						|
message can get through to the mailing list cleanly
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33723@postgresql.org Sat Jan  4 13:21:52 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33723@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h04ILpl25640
 | 
						|
	for <pgman@candle.pha.pa.us>; Sat, 4 Jan 2003 13:21:51 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id A5E5D4764F0; Sat,  4 Jan 2003 13:21:50 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id B8D94476021; Sat,  4 Jan 2003 13:21:37 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 7FDFE475CE7
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 13:21:28 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 71C47474E42
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat,  4 Jan 2003 13:21:27 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h04ILF721061;
 | 
						|
	Sat, 4 Jan 2003 12:21:15 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Sat, 4 Jan 2003 12:21:15 -0600 (CST).Sat, 4 Jan 2003 12:21:15 -0600 (CST).200301041821.h04ILF721061.h04ILF721061@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: kar@kakidata.dk
 | 
						|
cc: PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <200301041359.35715.kar@kakidata.dk>
 | 
						|
References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
  <23763.1041644042@sss.pgh.pa.us>
 | 
						|
  <1041646276.15927.202.camel@mouse.copelandconsulting.net>
 | 
						|
  <200301041359.35715.kar@kakidata.dk>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041704480.15927.224.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 04 Jan 2003 12:21:20 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Sat, 2003-01-04 at 06:59, Kaare Rasmussen wrote:
 | 
						|
> > Umm.  No.  User or system level threads, the statement is true.  If a
 | 
						|
> > thread kills over, the process goes with it.  Furthermore, on Win32
 | 
						|
> 
 | 
						|
> Hm. This is a database system. If one of the backend processes dies 
 | 
						|
> unexpectedly, I'm not sure I would trust the consistency and state of the 
 | 
						|
> others.
 | 
						|
> 
 | 
						|
> Or maybe I'm just being chicken.
 | 
						|
 | 
						|
I'd call that being wise.  That's the problem with using threads. 
 | 
						|
Should a thread do something naughty, the state of the entire process is
 | 
						|
in question.  This is true regardless if it is a user mode, kernel mode,
 | 
						|
or hybrid thread implementation.  That's the power of using the process
 | 
						|
model that is currently in use.  Should it do something naughty, we
 | 
						|
bitch and complain politely, throw our hands in the air and exit.  We no
 | 
						|
longer have to worry about the state and validity of that backend.  This
 | 
						|
creates a huge systemic reliability surplus.
 | 
						|
 | 
						|
This is also why the concept of a hybrid thread/process implementation
 | 
						|
keeps coming to the surface on the list.  If you maintain the process
 | 
						|
model and only use threads for things that ONLY relate to the single
 | 
						|
process (single session/connection), should a thread cause a problem,
 | 
						|
you can still throw you hands in the air and exit just as is done now
 | 
						|
without causing problems for, or questioning the validity of, other
 | 
						|
backends.
 | 
						|
 | 
						|
The cool thing about such a concept is that it still opens the door for
 | 
						|
things like parallel sorts and queries as it relates to a single
 | 
						|
backend.
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33819@postgresql.org Mon Jan  6 02:41:01 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33819@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h067exi23864
 | 
						|
	for <pgman@candle.pha.pa.us>; Mon, 6 Jan 2003 02:40:59 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id CCD564763B7; Mon,  6 Jan 2003 02:40:56 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 4A6574762E0; Mon,  6 Jan 2003 02:40:54 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 2C31947606A
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 02:40:50 -0500 (EST)
 | 
						|
Received: from datafix.CS.Berkeley.EDU (datafix.CS.Berkeley.EDU [128.32.37.185])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 8D7AF47603D
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 02:40:49 -0500 (EST)
 | 
						|
Received: (from sailesh@localhost)
 | 
						|
	by datafix.CS.Berkeley.EDU (8.11.6/8.11.6) id h067ac532006;
 | 
						|
	Sun, 5 Jan 2003 23:36:38 -0800
 | 
						|
X-Authentication-Warning: datafix.CS.Berkeley.EDU: sailesh set sender to sailesh@cs.berkeley.edu using -f
 | 
						|
Reply-To: sailesh@cs.berkeley.edu
 | 
						|
X-URL: http://www.cs.berkeley.edu/~sailesh
 | 
						|
X-Attribution: Sailesh
 | 
						|
To: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
 | 
						|
cc: PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
References: <200301032054.11125.shridhar_daithankar@persistent.co.in>
 | 
						|
	<3E1605B8.5060403@priefert.com>
 | 
						|
	<200301061202.43247.shridhar_daithankar@persistent.co.in>
 | 
						|
From: Sailesh Krishnamurthy <sailesh@cs.berkeley.edu>
 | 
						|
Date: 05 Jan 2003 23:36:38 -0800
 | 
						|
In-Reply-To: <200301061202.43247.shridhar_daithankar@persistent.co.in>
 | 
						|
Message-ID: <m3znqeivax.fsf@datafix.CS.Berkeley.EDU>
 | 
						|
Lines: 50
 | 
						|
User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Cuyahoga Valley)
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
>>>>> "Shridhar" == Shridhar Daithankar <shridhar_daithankar@persistent.co.in> writes:
 | 
						|
 | 
						|
    Shridhar> On Saturday 04 January 2003 03:20 am, you wrote:
 | 
						|
    >> >I am sure, many of you would like to delete this message
 | 
						|
    >> before reading, > hold on. :-)
 | 
						|
    >> 
 | 
						|
    >> I'm afraid most posters did not read the message.  Those who
 | 
						|
    >> replied
 | 
						|
    >> 
 | 
						|
    >> "Why bother?" did not address your challenge:
 | 
						|
 | 
						|
    Shridhar> Our challenges may be..;-)
 | 
						|
 | 
						|
Not having threading does reduce some of the freedom we've been having
 | 
						|
in our work. But then we have ripped the process model a fair bit and
 | 
						|
we have the freedom of an entirely new process to deal with data
 | 
						|
streams entering the system and we're experimenting with threading for
 | 
						|
asynchronous I/O there.
 | 
						|
 | 
						|
However, in general I agree with the spirit of the previous messages
 | 
						|
in this thread that threading isn't the main issue for PG.
 | 
						|
 | 
						|
One thing that I missed so far in the threading thread. Context
 | 
						|
switches are (IMHO) far cheaper between threads, because you save TLB
 | 
						|
flushes. Whether this makes a real difference in a data intensive
 | 
						|
application, I don't know. I wonder how easy it is to measure the x86
 | 
						|
counters to see TLB flushes/misses.
 | 
						|
 | 
						|
In a database system, even if one process dies, I'd be very chary of
 | 
						|
trusting it. So I am not too swayed by the fact that a
 | 
						|
process-per-connection gets you better isolation. 
 | 
						|
 | 
						|
BTW, many commercial database systems also use per-process models on
 | 
						|
Unix. However they are very aggressive with connection sharing and
 | 
						|
reuse - even to the point of reusing the same process for multiple
 | 
						|
active connections .. maybe at transaction boundaries. Good when a
 | 
						|
connection is maintained for a long duaration with short-lived
 | 
						|
transactions separated by fair amouns of time. 
 | 
						|
 | 
						|
Moreover, in db2 for instance, the same code base is used for both
 | 
						|
per-thread and per-process models - in other words, the entire code is
 | 
						|
MT-safe, and the scheduling mechanism is treated as a policy (Win32 is
 | 
						|
MT, and some Unices MP). AFAICT though, postgres code, such as perhaps
 | 
						|
the memory contexts is not MT-safe (of course the bufferpool/shmem
 | 
						|
accesses are safe). 
 | 
						|
 | 
						|
-- 
 | 
						|
Pip-pip
 | 
						|
Sailesh
 | 
						|
http://www.cs.berkeley.edu/~sailesh
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 6: Have you searched our list archives?
 | 
						|
 | 
						|
http://archives.postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33822@postgresql.org Mon Jan  6 06:23:29 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33822@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h06BNSi17987
 | 
						|
	for <pgman@candle.pha.pa.us>; Mon, 6 Jan 2003 06:23:28 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id A1204476260; Mon,  6 Jan 2003 06:23:21 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 0B78D476060; Mon,  6 Jan 2003 06:23:19 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 50277475BA0
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 06:23:14 -0500 (EST)
 | 
						|
Received: from mail.gne.de (mail.gne.de [213.83.0.2])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 27B244758E6
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 06:23:13 -0500 (EST)
 | 
						|
Received: from DO5GNE-MTA by mail.gne.de
 | 
						|
	with Novell_GroupWise; Mon, 06 Jan 2003 12:23:02 +0100
 | 
						|
Message-ID: <se197526.086@mail.gne.de>
 | 
						|
X-Mailer: Novell GroupWise Internet Agent 6.0.2
 | 
						|
Date: Mon, 06 Jan 2003 12:22:57 +0100
 | 
						|
From: "Ulrich Neumann" <U_Neumann@gne.de>
 | 
						|
To: "<PGHackers" <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=US-ASCII
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Content-Disposition: inline
 | 
						|
X-Guinevere: 1.1.14 ; GNE Grebe Neumann Gl
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
Hello all,
 | 
						|
 | 
						|
it's very interesting to see the discussion of "threads" again.
 | 
						|
 | 
						|
I've portet PostgreSQL to a "thread-per-connection" model based on
 | 
						|
pthreads
 | 
						|
and it is functional. Most of the work was finding all the static
 | 
						|
globals in the sourcefiles
 | 
						|
and swapping them between threads and freeing memory if a thread
 | 
						|
terminates.
 | 
						|
(PostgreSQL isn't written very clean in the aspects of memory
 | 
						|
handling).
 | 
						|
 | 
						|
My version of the thread-based PostgreSQL is not very efficient at the
 | 
						|
moment because
 | 
						|
I haven't done any optimisation of the code to better support threads
 | 
						|
and I'm using just a
 | 
						|
simple semaphore to control switching of data but this could be a
 | 
						|
starting point for
 | 
						|
others who want to see this code. If this direction will be taken
 | 
						|
seriously I'm very willing
 | 
						|
to help.
 | 
						|
 | 
						|
If someone is interested in the code I can send a zip file to everyone
 | 
						|
who wants.
 | 
						|
 | 
						|
Ulrich
 | 
						|
----------------------------------
 | 
						|
  This e-mail is virus scanned
 | 
						|
  Diese e-mail ist virusgeprueft
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 5: Have you checked our extensive FAQ?
 | 
						|
 | 
						|
http://www.postgresql.org/users-lounge/docs/faq.html
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33824@postgresql.org Mon Jan  6 07:49:46 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33824@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h06Cnii03541
 | 
						|
	for <pgman@candle.pha.pa.us>; Mon, 6 Jan 2003 07:49:44 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id C409E476778; Mon,  6 Jan 2003 07:49:36 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 617C04768C8; Mon,  6 Jan 2003 07:49:01 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id EA9284768AA
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 07:48:56 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 2DB74476191
 | 
						|
	for <pgsql-hackers@postgresql.org>; Mon,  6 Jan 2003 07:48:41 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h06CmL702059;
 | 
						|
	Mon, 6 Jan 2003 06:48:21 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Mon, 6 Jan 2003 06:48:21 -0600 (CST).Mon, 6 Jan 2003 06:48:21 -0600 (CST).200301061248.h06CmL702059.h06CmL702059@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: shridhar_daithankar@persistent.co.in
 | 
						|
cc: "<PGHackers" <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <3E19B78B.25689.15BFFE@localhost>
 | 
						|
References: <3E19B78B.25689.15BFFE@localhost>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041857302.17321.49.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 06 Jan 2003 06:48:23 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Mon, 2003-01-06 at 05:36, Shridhar Daithankar wrote:
 | 
						|
> On 6 Jan 2003 at 12:22, Ulrich Neumann wrote:
 | 
						|
> 
 | 
						|
> > Hello all,
 | 
						|
> > If someone is interested in the code I can send a zip file to everyone
 | 
						|
> > who wants.
 | 
						|
> 
 | 
						|
> I suggest you preserver your work. The reason I suggested thread are mainly two 
 | 
						|
> folds.
 | 
						|
> 
 | 
						|
> 1) Get I/O time used fuitfully
 | 
						|
 | 
						|
 | 
						|
AIO may address this without the need for integrated threading. 
 | 
						|
Arguably, from the long thread that last appeared on the topic of AIO,
 | 
						|
some hold that AIO doesn't even offer anything beyond the current
 | 
						|
implementation.  As such, it's highly doubtful that integrated threading
 | 
						|
is going to offer anything beyond what a sound AIO implementation can
 | 
						|
achieve.
 | 
						|
 | 
						|
 | 
						|
> 2) Use multiple CPU better.
 | 
						|
> 
 | 
						|
 | 
						|
 | 
						|
Multiple processes tend to universally support multiple CPUs better than
 | 
						|
does threading.  On some platforms, the level of threading support is
 | 
						|
currently only user mode implementations which means no additional CPU
 | 
						|
use.  Furthermore, some platforms where user-mode threads are defacto,
 | 
						|
they don't even allow for scheduling bias resulting is less work being
 | 
						|
accomplished within the same time interval (work slice must be divided
 | 
						|
between n-threads within the process, all of which run on a single CPU).
 | 
						|
 | 
						|
 | 
						|
> It will not require as much code cleaning as your efforts might had. However 
 | 
						|
> your work will be very useful if somebody decides to use thread in any fashion 
 | 
						|
> in core postgresql.
 | 
						|
> 
 | 
						|
> I was hoping for bit more optimistic response given that what I suggested was 
 | 
						|
> totally optional at any point of time but very important from performance 
 | 
						|
> point. Besides the change would have been gradual as required..
 | 
						|
> 
 | 
						|
 | 
						|
 | 
						|
Speaking for my self, I probably would of been more excited if the
 | 
						|
offered framework had addressed several issues.  The short list is:
 | 
						|
 | 
						|
o Code needs to be more robust.  It shouldn't be calling exit directly
 | 
						|
as, I believe, it should be allowing for PostgreSQL to clean up some. 
 | 
						|
Correct me as needed.  I would of also expected the code of adopted
 | 
						|
PostgreSQL's semantics and mechanisms as needed (error reporting, etc). 
 | 
						|
I do understand it was an initial attempt to simply get something in
 | 
						|
front of some eyes and have something to talk about.  Just the same, I
 | 
						|
was expecting something that we could actually pull the trigger with.
 | 
						|
 | 
						|
o Code isn't very portable.  Looked fairly okay for pthread platforms,
 | 
						|
however, there is new emphasis on the Win32 platform.  I think it would
 | 
						|
be a mistake to introduce something as significant as threading without
 | 
						|
addressing Win32 from the get-go.
 | 
						|
 | 
						|
o I would desire a more highly abstracted/portable interface which
 | 
						|
allows for different threading and synchronization primitives to be
 | 
						|
used.  Current implementation is tightly coupled to pthreads. 
 | 
						|
Furthermore, on platforms such as Solaris, I would hope it would easily
 | 
						|
allow for plugging in its native threading primitives which are touted
 | 
						|
to be much more efficient than pthreads on said platform.
 | 
						|
 | 
						|
o Code is not commented.  I would hope that adding new code for
 | 
						|
something as important as threading would be commented.
 | 
						|
 | 
						|
o Code is fairly trivial and does not address other primitives
 | 
						|
(semaphores, mutexs, conditions, TSS, etc) portably which would be
 | 
						|
required for anything but the most trivial of threaded work.  This is
 | 
						|
especially true in such an application where data IS the application. 
 | 
						|
As such, you must reasonably assume that threads need some form of
 | 
						|
portable serialization primitives, not to mention mechanisms for
 | 
						|
non-trivial communication.
 | 
						|
 | 
						|
o Does not address issues such as thread signaling or status reporting.
 | 
						|
 | 
						|
o Pool interface is rather simplistic.  Does not currently support
 | 
						|
concepts such as wake pool, stop pool, pool status, assigning a pool to
 | 
						|
work, etc.  In fact, it's not altogether obvious what the capabilities
 | 
						|
intent is of the current pool implementation.
 | 
						|
 | 
						|
o Doesn't seem to address any form of thread communication facilities
 | 
						|
(mailboxes, queues, etc).
 | 
						|
 | 
						|
 | 
						|
There are probably other things that I can find if I spend more than
 | 
						|
just a couple of minutes looking at the code.  Honestly, I love threads
 | 
						|
but I can see that the current code offering is not much more than a
 | 
						|
token in its current form.  No offense meant.
 | 
						|
 | 
						|
After it's all said and done, I'd have to see a lot more meat before I'd
 | 
						|
be convinced that threading is ready for PostgreSQL; from both a social
 | 
						|
and technological perspective.
 | 
						|
 | 
						|
 | 
						|
Regards,
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 2: you can get off all lists at once with the unregister command
 | 
						|
    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33899@postgresql.org Tue Jan  7 03:00:25 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33899@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h0780Mi00624
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 03:00:23 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 46FA747687C; Tue,  7 Jan 2003 03:00:21 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 69717475F25; Tue,  7 Jan 2003 03:00:13 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 5323E475F39
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 03:00:01 -0500 (EST)
 | 
						|
Received: from www.pspl.co.in (www.pspl.co.in [202.54.11.65])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 351DD475EE1
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 02:59:58 -0500 (EST)
 | 
						|
Received: (from root@localhost)
 | 
						|
	by www.pspl.co.in (8.11.6/8.11.6) id h077xvs03265
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue, 7 Jan 2003 13:29:57 +0530
 | 
						|
Received: from daithan (daithan.intranet.pspl.co.in [192.168.7.161])
 | 
						|
	by www.pspl.co.in (8.11.6/8.11.0) with ESMTP id h077xvr03260
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue, 7 Jan 2003 13:29:57 +0530
 | 
						|
From: "Shridhar Daithankar" <shridhar_daithankar@persistent.co.in>
 | 
						|
To: "<PGHackers" <pgsql-hackers@postgresql.org>
 | 
						|
Date: Tue, 07 Jan 2003 13:30:05 +0530
 | 
						|
MIME-Version: 1.0
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
Reply-To: shridhar_daithankar@persistent.co.in
 | 
						|
Message-ID: <3E1AD65D.10112.192793@localhost>
 | 
						|
References: <3E19B78B.25689.15BFFE@localhost>
 | 
						|
In-Reply-To: <1041857302.17321.49.camel@mouse.copelandconsulting.net>
 | 
						|
X-Mailer: Pegasus Mail for Windows (v4.02)
 | 
						|
Content-Type: text/plain; charset=US-ASCII
 | 
						|
Content-Transfer-Encoding: 7BIT
 | 
						|
Content-Description: Mail message body
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On 6 Jan 2003 at 6:48, Greg Copeland wrote:
 | 
						|
> > 1) Get I/O time used fuitfully
 | 
						|
> AIO may address this without the need for integrated threading. 
 | 
						|
> Arguably, from the long thread that last appeared on the topic of AIO,
 | 
						|
> some hold that AIO doesn't even offer anything beyond the current
 | 
						|
> implementation.  As such, it's highly doubtful that integrated threading
 | 
						|
> is going to offer anything beyond what a sound AIO implementation can
 | 
						|
> achieve.
 | 
						|
 | 
						|
Either way, a complete aio or threading implementation is not available on 
 | 
						|
major platforms that postgresql runs. Linux definitely does not have one, last 
 | 
						|
I checked.
 | 
						|
 | 
						|
If postgresql is not using aio or threading, we should start using one of them, 
 | 
						|
is what I feel. What do you say?
 | 
						|
 | 
						|
> > 2) Use multiple CPU better.
 | 
						|
> Multiple processes tend to universally support multiple CPUs better than
 | 
						|
> does threading.  On some platforms, the level of threading support is
 | 
						|
> currently only user mode implementations which means no additional CPU
 | 
						|
> use.  Furthermore, some platforms where user-mode threads are defacto,
 | 
						|
> they don't even allow for scheduling bias resulting is less work being
 | 
						|
> accomplished within the same time interval (work slice must be divided
 | 
						|
> between n-threads within the process, all of which run on a single CPU).
 | 
						|
 | 
						|
The frame-work I have posted, threading is optional at build and should be a 
 | 
						|
configuration option if it gets integrated. So for the platforms that can not 
 | 
						|
spread threads across multiple CPUs, it can simply be turned off..
 | 
						|
 | 
						|
> Speaking for my self, I probably would of been more excited if the
 | 
						|
> offered framework had addressed several issues.  The short list is:
 | 
						|
> 
 | 
						|
> o Code needs to be more robust.  It shouldn't be calling exit directly
 | 
						|
> as, I believe, it should be allowing for PostgreSQL to clean up some. 
 | 
						|
> Correct me as needed.  I would of also expected the code of adopted
 | 
						|
> PostgreSQL's semantics and mechanisms as needed (error reporting, etc). 
 | 
						|
> I do understand it was an initial attempt to simply get something in
 | 
						|
> front of some eyes and have something to talk about.  Just the same, I
 | 
						|
> was expecting something that we could actually pull the trigger with.
 | 
						|
 | 
						|
That could be done.
 | 
						|
 | 
						|
> 
 | 
						|
> o Code isn't very portable.  Looked fairly okay for pthread platforms,
 | 
						|
> however, there is new emphasis on the Win32 platform.  I think it would
 | 
						|
> be a mistake to introduce something as significant as threading without
 | 
						|
> addressing Win32 from the get-go.
 | 
						|
 | 
						|
If you search for "pthread" in thread.c, there are not many instances. Same 
 | 
						|
goes for thread.h. From what I understand windows threading, it would be less 
 | 
						|
than 10 minutes job to #ifdef the pthread related part on either file.
 | 
						|
 | 
						|
It is just that I have not played with windows threading and nor I am inclined 
 | 
						|
to...;-)
 | 
						|
 | 
						|
> 
 | 
						|
> o I would desire a more highly abstracted/portable interface which
 | 
						|
> allows for different threading and synchronization primitives to be
 | 
						|
> used.  Current implementation is tightly coupled to pthreads. 
 | 
						|
> Furthermore, on platforms such as Solaris, I would hope it would easily
 | 
						|
> allow for plugging in its native threading primitives which are touted
 | 
						|
> to be much more efficient than pthreads on said platform.
 | 
						|
 | 
						|
Same as above. If there can be two cases separated with #ifdef, there can be 
 | 
						|
more.. But what is important is to have a thread that can be woken up as and 
 | 
						|
when required with any function desired. That is the basic idea.
 | 
						|
 | 
						|
> o Code is not commented.  I would hope that adding new code for
 | 
						|
> something as important as threading would be commented.
 | 
						|
 | 
						|
Agreed. 
 | 
						|
 
 | 
						|
> o Code is fairly trivial and does not address other primitives
 | 
						|
> (semaphores, mutexs, conditions, TSS, etc) portably which would be
 | 
						|
> required for anything but the most trivial of threaded work.  This is
 | 
						|
> especially true in such an application where data IS the application. 
 | 
						|
> As such, you must reasonably assume that threads need some form of
 | 
						|
> portable serialization primitives, not to mention mechanisms for
 | 
						|
> non-trivial communication.
 | 
						|
 | 
						|
I don't get this. Probably I should post a working example. It is not threads 
 | 
						|
responsibility to make a function thread safe which is changed on the fly. The 
 | 
						|
function has to make sure that it is thread safe. That is altogether different 
 | 
						|
effort..
 | 
						|
 
 | 
						|
> o Does not address issues such as thread signaling or status reporting.
 | 
						|
 | 
						|
>From what I learnt from pthreads on linux, I would not mix threads and signals. 
 | 
						|
One can easily add code in runner function that disables any signals for thread 
 | 
						|
while the thread starts running. This would leave original signal handling 
 | 
						|
mechanism in place.
 | 
						|
 | 
						|
As far as status reporting is concerned, the thread sould be initiated while 
 | 
						|
back-end starts and terminated with backend termination. What is about status 
 | 
						|
reporting?
 | 
						|
 
 | 
						|
> o Pool interface is rather simplistic.  Does not currently support
 | 
						|
> concepts such as wake pool, stop pool, pool status, assigning a pool to
 | 
						|
> work, etc.  In fact, it's not altogether obvious what the capabilities
 | 
						|
> intent is of the current pool implementation.
 | 
						|
 | 
						|
Could you please elaborate? I am using same interface in c++ for a server 
 | 
						|
application and never faced a problem like that..;-)
 | 
						|
 | 
						|
 
 | 
						|
> o Doesn't seem to address any form of thread communication facilities
 | 
						|
> (mailboxes, queues, etc).
 | 
						|
 | 
						|
Not part of this abstraction of threading mechanism. Intentionally left out to 
 | 
						|
keep things clean.
 | 
						|
 | 
						|
> There are probably other things that I can find if I spend more than
 | 
						|
> just a couple of minutes looking at the code.  Honestly, I love threads
 | 
						|
> but I can see that the current code offering is not much more than a
 | 
						|
> token in its current form.  No offense meant.
 | 
						|
 | 
						|
None taken. Point is it is useful and that is enough for me. If you could 
 | 
						|
elaborate examples for any problems you see, I can probably modify it. (Code 
 | 
						|
documentation is what I will do now)
 | 
						|
 | 
						|
> After it's all said and done, I'd have to see a lot more meat before I'd
 | 
						|
> be convinced that threading is ready for PostgreSQL; from both a social
 | 
						|
> and technological perspective.
 | 
						|
 | 
						|
Tell me about it..
 | 
						|
 | 
						|
 
 | 
						|
Bye
 | 
						|
 Shridhar
 | 
						|
 | 
						|
--
 | 
						|
What's this script do?    unzip ; touch ; finger ; mount ; gasp ; yes ; umount 
 | 
						|
; sleepHint for the answer: not everything is computer-oriented. Sometimes 
 | 
						|
you'rein a sleeping bag, camping out.(Contributed by Frans van der Zande.)
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 4: Don't 'kill -9' the postmaster
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33921@postgresql.org Tue Jan  7 11:10:53 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33921@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07GApX13277
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 11:10:51 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 5BDC0477200; Tue,  7 Jan 2003 11:06:58 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 9EE41477268; Tue,  7 Jan 2003 11:06:40 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id ACEA5477260
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 11:06:35 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 78B51477165
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 11:06:28 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h07G68711510;
 | 
						|
	Tue, 7 Jan 2003 10:06:09 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Tue, 7 Jan 2003 10:06:09 -0600 (CST).Tue, 7 Jan 2003 10:06:09 -0600 (CST).200301071606.h07G68711510.h07G68711510@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: shridhar_daithankar@persistent.co.in
 | 
						|
cc: "<PGHackers" <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <3E1AD65D.10112.192793@localhost>
 | 
						|
References: <3E19B78B.25689.15BFFE@localhost>
 | 
						|
  <3E1AD65D.10112.192793@localhost>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041955572.17639.148.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 07 Jan 2003 10:06:12 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Tue, 2003-01-07 at 02:00, Shridhar Daithankar wrote:
 | 
						|
> On 6 Jan 2003 at 6:48, Greg Copeland wrote:
 | 
						|
> > > 1) Get I/O time used fuitfully
 | 
						|
> > AIO may address this without the need for integrated threading. 
 | 
						|
> > Arguably, from the long thread that last appeared on the topic of AIO,
 | 
						|
> > some hold that AIO doesn't even offer anything beyond the current
 | 
						|
> > implementation.  As such, it's highly doubtful that integrated threading
 | 
						|
> > is going to offer anything beyond what a sound AIO implementation can
 | 
						|
> > achieve.
 | 
						|
> 
 | 
						|
> Either way, a complete aio or threading implementation is not available on 
 | 
						|
> major platforms that postgresql runs. Linux definitely does not have one, last 
 | 
						|
> I checked.
 | 
						|
> 
 | 
						|
 | 
						|
There are two or three significant AIO implementation efforts currently
 | 
						|
underway for Linux.  One such implementation is available from the Red
 | 
						|
Hat Server Edition (IIRC) and has been available for some time now.  I
 | 
						|
believe Oracle is using it.  SGI also has an effort and I forget where
 | 
						|
the other one comes from.  Nonetheless, I believe it's going to be a
 | 
						|
hard fought battle to get AIO implemented simply because I don't think
 | 
						|
anyone, yet, can truly argue a case on the gain vs effort.
 | 
						|
 | 
						|
> If postgresql is not using aio or threading, we should start using one of them, 
 | 
						|
> is what I feel. What do you say?
 | 
						|
> 
 | 
						|
 | 
						|
I did originally say that I'd like to see an AIO implementation.  Then
 | 
						|
again, I don't current have a position to stand other than simply saying
 | 
						|
it *might* perform better.  ;)  Not exactly a position that's going to
 | 
						|
win the masses over.  
 | 
						|
 | 
						|
> > was expecting something that we could actually pull the trigger with.
 | 
						|
> 
 | 
						|
> That could be done.
 | 
						|
> 
 | 
						|
 | 
						|
I'm sure it can, but that's probably the easiest item to address.
 | 
						|
 | 
						|
> > 
 | 
						|
> > o Code isn't very portable.  Looked fairly okay for pthread platforms,
 | 
						|
> > however, there is new emphasis on the Win32 platform.  I think it would
 | 
						|
> > be a mistake to introduce something as significant as threading without
 | 
						|
> > addressing Win32 from the get-go.
 | 
						|
> 
 | 
						|
> If you search for "pthread" in thread.c, there are not many instances. Same 
 | 
						|
> goes for thread.h. From what I understand windows threading, it would be less 
 | 
						|
> than 10 minutes job to #ifdef the pthread related part on either file.
 | 
						|
> 
 | 
						|
> It is just that I have not played with windows threading and nor I am inclined 
 | 
						|
> to...;-)
 | 
						|
> 
 | 
						|
 | 
						|
Well, the method above is going to create a semi-ugly mess.  I've
 | 
						|
written thread abstraction layers which cover OS/2, NT, and pthreads. 
 | 
						|
Each have subtle distinction.  What really needs to be done is the
 | 
						|
creation of another abstraction layer which your current code would sit
 | 
						|
on top of.  That way, everything contained within is clear and easy to
 | 
						|
read.  The big bonus is that as additional threading implementations
 | 
						|
need to be added, only the "low-level" abstraction stuff needs to
 | 
						|
modified.  Done properly, each thread implementation would be it's own
 | 
						|
module requiring little #if clutter.
 | 
						|
 | 
						|
As you can see, that's a fair amount of work and far from where the code
 | 
						|
currently is.
 | 
						|
 | 
						|
> > 
 | 
						|
> > o I would desire a more highly abstracted/portable interface which
 | 
						|
> > allows for different threading and synchronization primitives to be
 | 
						|
> > used.  Current implementation is tightly coupled to pthreads. 
 | 
						|
> > Furthermore, on platforms such as Solaris, I would hope it would easily
 | 
						|
> > allow for plugging in its native threading primitives which are touted
 | 
						|
> > to be much more efficient than pthreads on said platform.
 | 
						|
> 
 | 
						|
> Same as above. If there can be two cases separated with #ifdef, there can be 
 | 
						|
> more.. But what is important is to have a thread that can be woken up as and 
 | 
						|
> when required with any function desired. That is the basic idea.
 | 
						|
> 
 | 
						|
 | 
						|
Again, there's a lot of work in creating a well formed abstraction layer
 | 
						|
for all of the mechanics that are required.  Furthermore, different
 | 
						|
thread implementations have slightly different semantics which further
 | 
						|
complicates things.  Worse, some types of primitives are simply not
 | 
						|
available with some thread implementations.  That means those platforms
 | 
						|
require it to be written from the primitives that are available on the
 | 
						|
platform.  Yet more work.
 | 
						|
 | 
						|
 | 
						|
> > o Code is fairly trivial and does not address other primitives
 | 
						|
> > (semaphores, mutexs, conditions, TSS, etc) portably which would be
 | 
						|
> > required for anything but the most trivial of threaded work.  This is
 | 
						|
> > especially true in such an application where data IS the application. 
 | 
						|
> > As such, you must reasonably assume that threads need some form of
 | 
						|
> > portable serialization primitives, not to mention mechanisms for
 | 
						|
> > non-trivial communication.
 | 
						|
> 
 | 
						|
> I don't get this. Probably I should post a working example. It is not threads 
 | 
						|
> responsibility to make a function thread safe which is changed on the fly. The 
 | 
						|
> function has to make sure that it is thread safe. That is altogether different 
 | 
						|
> effort..
 | 
						|
 | 
						|
 | 
						|
You're right, it's not the thread's responsibility, however, it is the
 | 
						|
threading toolkit's.  In this case, you're offering to be the toolkit
 | 
						|
which functions across two platforms, just for starters.  Reasonably,
 | 
						|
you should expect a third to quickly follow.
 | 
						|
 | 
						|
>  
 | 
						|
> > o Does not address issues such as thread signaling or status reporting.
 | 
						|
> 
 | 
						|
> >From what I learnt from pthreads on linux, I would not mix threads and signals. 
 | 
						|
> One can easily add code in runner function that disables any signals for thread 
 | 
						|
> while the thread starts running. This would leave original signal handling 
 | 
						|
> mechanism in place.
 | 
						|
> 
 | 
						|
> As far as status reporting is concerned, the thread sould be initiated while 
 | 
						|
> back-end starts and terminated with backend termination. What is about status 
 | 
						|
> reporting?
 | 
						|
>  
 | 
						|
> > o Pool interface is rather simplistic.  Does not currently support
 | 
						|
> > concepts such as wake pool, stop pool, pool status, assigning a pool to
 | 
						|
> > work, etc.  In fact, it's not altogether obvious what the capabilities
 | 
						|
> > intent is of the current pool implementation.
 | 
						|
> 
 | 
						|
> Could you please elaborate? I am using same interface in c++ for a server 
 | 
						|
> application and never faced a problem like that..;-)
 | 
						|
> 
 | 
						|
>  
 | 
						|
> > o Doesn't seem to address any form of thread communication facilities
 | 
						|
> > (mailboxes, queues, etc).
 | 
						|
> 
 | 
						|
> Not part of this abstraction of threading mechanism. Intentionally left out to 
 | 
						|
> keep things clean.
 | 
						|
> 
 | 
						|
> > There are probably other things that I can find if I spend more than
 | 
						|
> > just a couple of minutes looking at the code.  Honestly, I love threads
 | 
						|
> > but I can see that the current code offering is not much more than a
 | 
						|
> > token in its current form.  No offense meant.
 | 
						|
> 
 | 
						|
> None taken. Point is it is useful and that is enough for me. If you could 
 | 
						|
> elaborate examples for any problems you see, I can probably modify it. (Code 
 | 
						|
> documentation is what I will do now)
 | 
						|
> 
 | 
						|
> > After it's all said and done, I'd have to see a lot more meat before I'd
 | 
						|
> > be convinced that threading is ready for PostgreSQL; from both a social
 | 
						|
> > and technological perspective.
 | 
						|
> 
 | 
						|
> Tell me about it..
 | 
						|
> 
 | 
						|
 | 
						|
Long story short, if PostgreSQL is to use threads, it shouldn't be
 | 
						|
handicapped by having a very limited subset of functionality.  With the
 | 
						|
code that has been currently submitted, I don't believe you could even 
 | 
						|
effectively implement a parallel sort.
 | 
						|
 | 
						|
To get an idea of the types of things that would be needed, check out
 | 
						|
the ACE Toolkit.  There are a couple of other fairly popular toolkits as
 | 
						|
well.  Nonetheless, it's a significant effort and the current code is a
 | 
						|
long ways off from being usable.
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 5: Have you checked our extensive FAQ?
 | 
						|
 | 
						|
http://www.postgresql.org/users-lounge/docs/faq.html
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33944@postgresql.org Tue Jan  7 13:22:04 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33944@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07IM2X05350
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 13:22:02 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 544EF476AC1; Tue,  7 Jan 2003 13:22:05 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 341134761E8; Tue,  7 Jan 2003 13:21:55 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 48974475ADE
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:21:50 -0500 (EST)
 | 
						|
Received: from sabre.velocet.net (sabre.velocet.net [216.138.209.205])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id B8D40475AD7
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:21:49 -0500 (EST)
 | 
						|
Received: from stark.dyndns.tv (H162.C233.tor.velocet.net [216.138.233.162])
 | 
						|
	by sabre.velocet.net (Postfix) with ESMTP
 | 
						|
	id 887681382B9; Tue,  7 Jan 2003 13:21:48 -0500 (EST)
 | 
						|
Received: from localhost
 | 
						|
	([127.0.0.1] helo=stark.dyndns.tv ident=foobar)
 | 
						|
	by stark.dyndns.tv with smtp (Exim 3.36 #1 (Debian))
 | 
						|
	id 18VyMF-0002zN-00; Tue, 07 Jan 2003 13:21:47 -0500
 | 
						|
To: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
cc: kar@kakidata.dk, PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
	<23763.1041644042@sss.pgh.pa.us>
 | 
						|
	<1041646276.15927.202.camel@mouse.copelandconsulting.net>
 | 
						|
	<200301041359.35715.kar@kakidata.dk>
 | 
						|
	<1041704480.15927.224.camel@mouse.copelandconsulting.net>
 | 
						|
In-Reply-To: <1041704480.15927.224.camel@mouse.copelandconsulting.net>
 | 
						|
From: Greg Stark <gsstark@mit.edu>
 | 
						|
Organization: The Emacs Conspiracy; member since 1992
 | 
						|
Date: 07 Jan 2003 13:21:47 -0500
 | 
						|
Message-ID: <87isx0izwk.fsf@stark.dyndns.tv>
 | 
						|
Lines: 43
 | 
						|
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
 | 
						|
Greg Copeland <greg@CopelandConsulting.Net> writes:
 | 
						|
 | 
						|
> That's the power of using the process model that is currently in use. Should
 | 
						|
> it do something naughty, we bitch and complain politely, throw our hands in
 | 
						|
> the air and exit. We no longer have to worry about the state and validity of
 | 
						|
> that backend.
 | 
						|
 | 
						|
You missed the point of his post. If one process in your database does
 | 
						|
something nasty you damn well should worry about the state of and validity of
 | 
						|
the entire database, not just that one backend.
 | 
						|
 | 
						|
Are you really sure you caught the problem before it screwed up the data in
 | 
						|
shared memory? On disk?
 | 
						|
 | 
						|
 | 
						|
This whole topic is in need of some serious FUD-dispelling and careful
 | 
						|
analysis. Here's a more calm explanation of the situation on this particular
 | 
						|
point. Perhaps I'll follow up with something on IO concurrency later.
 | 
						|
 | 
						|
The point in consideration here is really memory isolation. Threads by default
 | 
						|
have zero isolation between threads. They can all access each other's memory
 | 
						|
even including their stack. Most of that memory is in fact only needed by a
 | 
						|
single thread. 
 | 
						|
 | 
						|
Processes by default have complete memory isolation. However postgres actually
 | 
						|
weakens that by doing a lot of work in a shared memory pool. That memory gets
 | 
						|
exactly the same protection as it would get in a threaded model, which is to
 | 
						|
say none.
 | 
						|
 | 
						|
So the reality is that if you have a bug most likely you've only corrupted the
 | 
						|
local data which can be easily cleaned up either way. In the thread model
 | 
						|
there's also the unlikely but scary risk that you've damaged other threads'
 | 
						|
memory. And in either case there's the possibility that you've damaged the
 | 
						|
shared pool which is unrecoverable.
 | 
						|
 | 
						|
In theory minimising the one case of corrupting other threads' local data
 | 
						|
shouldn't make a big difference to the risk in the case of an assertion
 | 
						|
failure. I'm not sure in practice if that's true though. Processes probably
 | 
						|
reduce the temptation to do work in the shared area too.
 | 
						|
 | 
						|
--
 | 
						|
greg
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 2: you can get off all lists at once with the unregister command
 | 
						|
    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33945@postgresql.org Tue Jan  7 13:48:12 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33945@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07Im8X15155
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 13:48:08 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id BF0454773D3; Tue,  7 Jan 2003 13:43:10 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 781634773A6; Tue,  7 Jan 2003 13:43:03 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 28074477390
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:42:59 -0500 (EST)
 | 
						|
Received: from CopelandConsulting.Net (dsl-24293-ld.customer.centurytel.net [209.142.135.135])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 1392B476682
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 13:42:42 -0500 (EST)
 | 
						|
Received: from [192.168.1.2] (mouse.copelandconsulting.net [192.168.1.2])
 | 
						|
	by CopelandConsulting.Net (8.10.1/8.10.1) with ESMTP id h07IgS715128;
 | 
						|
	Tue, 7 Jan 2003 12:42:28 -0600 (CST)
 | 
						|
X-Trade-Id: <CCC.Tue, 7 Jan 2003 12:42:28 -0600 (CST).Tue, 7 Jan 2003 12:42:28 -0600 (CST).200301071842.h07IgS715128.h07IgS715128@CopelandConsulting.Net.
 | 
						|
Subject: Re: [HACKERS] Threads
 | 
						|
From: Greg Copeland <greg@CopelandConsulting.Net>
 | 
						|
To: Greg Stark <gsstark@mit.edu>
 | 
						|
cc: kar@kakidata.dk, PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
In-Reply-To: <87isx0izwk.fsf@stark.dyndns.tv>
 | 
						|
References:  <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com>
 | 
						|
  <23763.1041644042@sss.pgh.pa.us>
 | 
						|
  <1041646276.15927.202.camel@mouse.copelandconsulting.net>
 | 
						|
  <200301041359.35715.kar@kakidata.dk>
 | 
						|
  <1041704480.15927.224.camel@mouse.copelandconsulting.net>
 | 
						|
  <87isx0izwk.fsf@stark.dyndns.tv>
 | 
						|
Content-Type: text/plain
 | 
						|
Organization: Copeland Computer Consulting
 | 
						|
Message-ID: <1041964952.29180.10.camel@mouse.copelandconsulting.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
X-Mailer: Ximian Evolution 1.2.0 
 | 
						|
Date: 07 Jan 2003 12:42:33 -0600
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Tue, 2003-01-07 at 12:21, Greg Stark wrote:
 | 
						|
> Greg Copeland <greg@CopelandConsulting.Net> writes:
 | 
						|
> 
 | 
						|
> > That's the power of using the process model that is currently in use. Should
 | 
						|
> > it do something naughty, we bitch and complain politely, throw our hands in
 | 
						|
> > the air and exit. We no longer have to worry about the state and validity of
 | 
						|
> > that backend.
 | 
						|
> 
 | 
						|
> You missed the point of his post. If one process in your database does
 | 
						|
> something nasty you damn well should worry about the state of and validity of
 | 
						|
> the entire database, not just that one backend.
 | 
						|
> 
 | 
						|
 | 
						|
I can assure you I did not miss the point.  No idea why you're
 | 
						|
continuing to spell it out.  In this case, it appears the quotation is
 | 
						|
being taken out of context or it was originally stated in an improper
 | 
						|
context.
 | 
						|
 | 
						|
> Are you really sure you caught the problem before it screwed up the data in
 | 
						|
> shared memory? On disk?
 | 
						|
> 
 | 
						|
> 
 | 
						|
> This whole topic is in need of some serious FUD-dispelling and careful
 | 
						|
> analysis. Here's a more calm explanation of the situation on this particular
 | 
						|
> point. Perhaps I'll follow up with something on IO concurrency later.
 | 
						|
> 
 | 
						|
 | 
						|
 | 
						|
Hmmm.  Not sure what needs to be dispelled since I've not seen any FUD.
 | 
						|
 | 
						|
 | 
						|
> The point in consideration here is really memory isolation. Threads by default
 | 
						|
> have zero isolation between threads. They can all access each other's memory
 | 
						|
> even including their stack. Most of that memory is in fact only needed by a
 | 
						|
> single thread. 
 | 
						|
> 
 | 
						|
 | 
						|
Again, this has been covered already.
 | 
						|
 | 
						|
 | 
						|
> Processes by default have complete memory isolation. However postgres actually
 | 
						|
> weakens that by doing a lot of work in a shared memory pool. That memory gets
 | 
						|
> exactly the same protection as it would get in a threaded model, which is to
 | 
						|
> say none.
 | 
						|
> 
 | 
						|
 | 
						|
Again, this has all been covered, more or less.  You're comments seem to
 | 
						|
imply that you did not fully read what has been said on the topic thus
 | 
						|
far or that you misunderstood something that was said.  Of course, it's
 | 
						|
also possible that I may of said something out of it's proper context
 | 
						|
which may be confusing you.
 | 
						|
 | 
						|
I think it's safe to say I don't have any further comment unless
 | 
						|
something new is being brought to the table.  Should there be something
 | 
						|
new to cover, I'm happy to talk about it.  At this point, however, it
 | 
						|
appears that it's been beat to death already.
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Greg Copeland <greg@copelandconsulting.net>
 | 
						|
Copeland Computer Consulting
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 3: if posting/reading through Usenet, please send an appropriate
 | 
						|
subscribe-nomail command to majordomo@postgresql.org so that your
 | 
						|
message can get through to the mailing list cleanly
 | 
						|
 | 
						|
From pgsql-hackers-owner+M33946@postgresql.org Tue Jan  7 14:02:33 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M33946@postgresql.org>
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h07J2TX22478
 | 
						|
	for <pgman@candle.pha.pa.us>; Tue, 7 Jan 2003 14:02:30 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP
 | 
						|
	id 6A905477204; Tue,  7 Jan 2003 14:02:32 -0500 (EST)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with SMTP
 | 
						|
	id 3546E476688; Tue,  7 Jan 2003 14:02:21 -0500 (EST)
 | 
						|
Received: from localhost (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id E3CC44760BD
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 14:02:14 -0500 (EST)
 | 
						|
Received: from sss.pgh.pa.us (unknown [192.204.191.242])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 3D8FA475AD7
 | 
						|
	for <pgsql-hackers@postgresql.org>; Tue,  7 Jan 2003 14:02:14 -0500 (EST)
 | 
						|
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
 | 
						|
	by sss.pgh.pa.us (8.12.6/8.12.6) with ESMTP id h07J1s0U019750;
 | 
						|
	Tue, 7 Jan 2003 14:01:54 -0500 (EST)
 | 
						|
To: Greg Stark <gsstark@mit.edu>
 | 
						|
cc: Greg Copeland <greg@CopelandConsulting.Net>, kar@kakidata.dk,
 | 
						|
   PGHackers <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Threads 
 | 
						|
In-Reply-To: <87isx0izwk.fsf@stark.dyndns.tv> 
 | 
						|
References: <D90A5A6C612A39408103E6ECDD77B829408A20@voyager.corporate.connx.com> <23763.1041644042@sss.pgh.pa.us> <1041646276.15927.202.camel@mouse.copelandconsulting.net> <200301041359.35715.kar@kakidata.dk> <1041704480.15927.224.camel@mouse.copelandconsulting.net> <87isx0izwk.fsf@stark.dyndns.tv>
 | 
						|
Comments: In-reply-to Greg Stark <gsstark@mit.edu>
 | 
						|
	message dated "07 Jan 2003 13:21:47 -0500"
 | 
						|
Date: Tue, 07 Jan 2003 14:01:53 -0500
 | 
						|
Message-ID: <19749.1041966113@sss.pgh.pa.us>
 | 
						|
From: Tom Lane <tgl@sss.pgh.pa.us>
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
X-Virus-Scanned: by AMaViS new-20020517
 | 
						|
Status: OR
 | 
						|
 | 
						|
Greg Stark <gsstark@mit.edu> writes:
 | 
						|
> You missed the point of his post. If one process in your database does
 | 
						|
> something nasty you damn well should worry about the state of and validity of
 | 
						|
> the entire database, not just that one backend.
 | 
						|
 | 
						|
Right.  And in fact we do blow away all the processes when any one of
 | 
						|
them crashes or panics.  Nonetheless, memory isolation between processes
 | 
						|
is a Good Thing, because it reduces the chances that a process gone
 | 
						|
wrong will cause damage via other processes before they can be shut
 | 
						|
down.
 | 
						|
 | 
						|
Here is a simple example of a scenario where that isolation buys us
 | 
						|
something: suppose that we have a bug that tromps on memory starting at
 | 
						|
some point X until it falls off the sbrk boundary and dumps core.
 | 
						|
(There are plenty of ways to make that happen, such as miscalculating
 | 
						|
the length of a memcpy or memset operation as -1.)  Such a bug causes
 | 
						|
no serious damage in isolation, because the process suffering the
 | 
						|
failure will be in a tight data-copying or data-zeroing loop until it
 | 
						|
gets the SIGSEGV exception.  It won't do anything bad based on all the
 | 
						|
data structures it has clobbered during its march to the end of memory.
 | 
						|
 | 
						|
However, put that same bug in a multithreading context, and it becomes
 | 
						|
entirely possible that some other thread will be dispatched and will
 | 
						|
try to make use of already-clobbered data structures before the ultimate
 | 
						|
SIGSEGV exception happens.  Now you have the potential for unlimited
 | 
						|
trouble.
 | 
						|
 | 
						|
In general, isolation buys you some safety anytime there is a delay
 | 
						|
between the occurrence of a failure and its detection.
 | 
						|
 | 
						|
> Processes by default have complete memory isolation. However postgres
 | 
						|
> actually weakens that by doing a lot of work in a shared memory
 | 
						|
> pool. That memory gets exactly the same protection as it would get in
 | 
						|
> a threaded model, which is to say none.
 | 
						|
 | 
						|
Yes.  We try to minimize the risk by keeping the shared memory pool
 | 
						|
relatively small and not doing more than we have to in it.  (For
 | 
						|
example, this was one of the arguments against creating a shared plan
 | 
						|
cache.)  It's also very helpful that in most platforms, shared memory
 | 
						|
is not address-wise contiguous to normal memory; thus for example a
 | 
						|
process caught in a memset death march will hit a SIGSEGV before it
 | 
						|
gets to the shared memory block.
 | 
						|
 | 
						|
It's interesting to note that this can be made into an argument for
 | 
						|
not making shared_buffers very large: the larger the fraction of your
 | 
						|
address space that the shared buffers occupy, the larger the chance
 | 
						|
that a wild store will overwrite something you'd wish it didn't.
 | 
						|
I can't recall anyone having made that point during our many discussions
 | 
						|
of appropriate shared_buffer sizing.
 | 
						|
 | 
						|
> So the reality is that if you have a bug most likely you've only corrupted the
 | 
						|
> local data which can be easily cleaned up either way. In the thread model
 | 
						|
> there's also the unlikely but scary risk that you've damaged other threads'
 | 
						|
> memory. And in either case there's the possibility that you've damaged the
 | 
						|
> shared pool which is unrecoverable.
 | 
						|
 | 
						|
In a thread model, *most* of the accessible memory space would be shared
 | 
						|
with other threads, at least potentially.  So I think you're wrong to
 | 
						|
categorize the second case as unlikely.
 | 
						|
 | 
						|
			regards, tom lane
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 6: Have you searched our list archives?
 | 
						|
 | 
						|
http://archives.postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M37860@postgresql.org Fri Apr 11 15:37:03 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M37860@postgresql.org>
 | 
						|
Received: from relay3.pgsql.com (relay3.pgsql.com [64.117.224.149])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h3BJaxv13018
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 11 Apr 2003 15:37:01 -0400 (EDT)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by relay3.pgsql.com (Postfix) with ESMTP
 | 
						|
	id 3F9D0EA81E7; Fri, 11 Apr 2003 19:36:56 +0000 (GMT)
 | 
						|
X-Original-To: pgsql-hackers@postgresql.org
 | 
						|
Received: from spampd.localdomain (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id D27B2476036
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri, 11 Apr 2003 15:35:32 -0400 (EDT)
 | 
						|
Received: from mail1.ihs.com (mail1.ihs.com [170.207.70.222])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 742DD475F5F
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri, 11 Apr 2003 15:35:31 -0400 (EDT)
 | 
						|
Received: from css120.ihs.com (css120.ihs.com [170.207.105.120])
 | 
						|
	by mail1.ihs.com (8.12.9/8.12.9) with ESMTP id h3BJZHRF027332;
 | 
						|
	Fri, 11 Apr 2003 13:35:17 -0600 (MDT)
 | 
						|
Date: Fri, 11 Apr 2003 13:31:06 -0600 (MDT)
 | 
						|
From: "scott.marlowe" <scott.marlowe@ihs.com>
 | 
						|
To: Ron Peacetree <rjpeace@earthlink.net>
 | 
						|
cc: <pgsql-hackers@postgresql.org>
 | 
						|
Subject: Re: [HACKERS] Anyone working on better transaction locking?
 | 
						|
In-Reply-To: <eS0la.16229$ey1.1398978@newsread1.prod.itd.earthlink.net>
 | 
						|
Message-ID: <Pine.LNX.4.33.0304111314130.3232-100000@css120.ihs.com>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: TEXT/PLAIN; charset=US-ASCII
 | 
						|
X-MailScanner: Found to be clean
 | 
						|
X-Spam-Status: No, hits=-31.5 required=5.0
 | 
						|
	tests=BAYES_10,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT,
 | 
						|
       QUOTE_TWICE_1,REPLY_WITH_QUOTES,USER_AGENT_PINE
 | 
						|
	autolearn=ham	version=2.50
 | 
						|
X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp)
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
On Wed, 9 Apr 2003, Ron Peacetree wrote:
 | 
						|
 | 
						|
> "Andrew Sullivan" <andrew@libertyrms.info> wrote in message
 | 
						|
> news:20030409170926.GH2255@libertyrms.info...
 | 
						|
> > On Wed, Apr 09, 2003 at 05:41:06AM +0000, Ron Peacetree wrote:
 | 
						|
> > Nonsense.  You explicitly made the MVCC comparison with Oracle, and
 | 
						|
> > are asking for a "better" locking mechanism without providing any
 | 
						|
> > evidence that PostgreSQL's is bad.
 | 
						|
> >
 | 
						|
> Just because someone else's is "better" does not mean PostgreSQL's is
 | 
						|
> "bad", and I've never said such.  As I've said, I'll get back to Tom
 | 
						|
> and the list on this.
 | 
						|
 | 
						|
But you didn't identify HOW it was better.  I think that's the point 
 | 
						|
being made.
 | 
						|
 | 
						|
> > > Please see my posts with regards to ...
 | 
						|
> >
 | 
						|
> > I think your other posts were similar to the one which started this
 | 
						|
> > thread: full of mighty big pronouncements which turned out to depend
 | 
						|
> > on a bunch of not-so-tenable assumptions.
 | 
						|
> >
 | 
						|
> Hmmm.  Well, I don't think of algorithm analysis by the likes of
 | 
						|
> Knuth, Sedgewick, Gonnet, and Baeza-Yates as being "not so tenable
 | 
						|
> assumptions", but YMMV.  As for "mighty pronouncements", that also
 | 
						|
> seems a bit misleading since we are talking about quantifiable
 | 
						|
> programming and computer science issues, not unquantifiable things
 | 
						|
> like politics.
 | 
						|
 | 
						|
But the real truth is revealed when the rubber hits the pavement.  
 | 
						|
Remember that Linux Torvalds was roundly criticized for his choice of a 
 | 
						|
monolithic development model for his kernel, and was literally told that 
 | 
						|
his choice would restrict to "toy" status and that no commercial OS could 
 | 
						|
scale with a monolithic kernel.
 | 
						|
 | 
						|
There's no shortage of people with good ideas, just people with the skills 
 | 
						|
to implement those good ideas.  If you've got a patch to apply that's been 
 | 
						|
tested to show something is faster EVERYONE here wants to see it.
 | 
						|
 | 
						|
If you've got a theory, no matter how well backed up by academic research, 
 | 
						|
it's still just a theory.  Until someone writes to code to implement it, 
 | 
						|
the gains are theoretical, and many things that MIGHT help don't because 
 | 
						|
of the real world issues underlying your database, like I/O bandwidth or 
 | 
						|
CPU <-> memory bandwidth.
 | 
						|
 | 
						|
> > I'm sorry to be so cranky about this, but I get tired of having to
 | 
						|
> > defend one of my employer's core technologies from accusations based
 | 
						|
> > on half-truths and "everybody knows" assumptions.  For instance,
 | 
						|
> >
 | 
						|
> Again, "accusations" is a bit strong.  I thought the discussion was
 | 
						|
> about the technical merits and costs of various features and various
 | 
						|
> ways to implement them, particularly when this product must compete
 | 
						|
> for installed base with other solutions.  Being coldly realistic about
 | 
						|
> what a product's strengths and weaknesses are is, again, just good
 | 
						|
> business.  Sun Tzu's comment about knowing the enemy and yourself
 | 
						|
> seems appropriate here...
 | 
						|
 | 
						|
No, you're wrong.  Postgresql doesn't have to compete.  It doesn't have to 
 | 
						|
win.  it doesn't need a marketing department.  All those things are nice, 
 | 
						|
and I'm glad if it does them, but doesn't HAVE TO.  Postgresql has to 
 | 
						|
work.  It does that well.
 | 
						|
 | 
						|
Postgresql CAN compete if someone wants to put the effort into competing, 
 | 
						|
but it isn't a priority for me.  Working is the priority, and if other 
 | 
						|
people aren't smart enough to test Postgresql to see if it works for them, 
 | 
						|
all the better, I keep my edge by having a near zero cost database engine, 
 | 
						|
while the competition spends money on MSSQL or Oracle.
 | 
						|
 | 
						|
Tom and Andrew ARE coldly realistic about the shortcomings of postgresql.  
 | 
						|
It has issues, and things that need to be fixed.  It needs more coders.  
 | 
						|
It doesn't need every feature that Oracle or DB2 have.  Heck some of their 
 | 
						|
"features" would be considered a mis-feature in the Postgresql world.
 | 
						|
 | 
						|
> > > I'll mention thread support in passing,
 | 
						|
> >
 | 
						|
> > there's actually a FAQ item about thread support, because in the
 | 
						|
> > opinion of those who have looked at it, the cost is just not worth
 | 
						|
> > the benefit.  If you have evidence to the contrary (specific
 | 
						|
> > evidence, please, for this application), and have already read all
 | 
						|
> the
 | 
						|
> > previous discussion of the topic, perhaps people would be interested
 | 
						|
> in
 | 
						|
> > opening that debate again (though I have my doubts).
 | 
						|
> >
 | 
						|
> Zeus had a performance ceiling roughly 3x that of Apache when Zeus
 | 
						|
> supported threading as well as pre-forking and Apache only supported
 | 
						|
> pre forking.  The Apache folks now support both.  DB2, Oracle, and SQL
 | 
						|
> Server all use threads.  Etc, etc.
 | 
						|
 | 
						|
Yes, and if you configured your apache server to have 20 or 30 spare 
 | 
						|
servers, in the real world, it was nearly neck and neck to Zeus, but since 
 | 
						|
Zeus cost like $3,000 a copy, it is still cheaper to just overwhelm it 
 | 
						|
with more servers running apache than to use zeus.
 | 
						|
 | 
						|
> That's an awful lot of very bright programmers and some serious $$
 | 
						|
> voting that threads are worth it.  
 | 
						|
 | 
						|
For THAT application.  for what a web server does, threads can be very 
 | 
						|
useful, even useful enough to put up with the problems created by running 
 | 
						|
threads on multiple threading libs on different OSes.  
 | 
						|
 | 
						|
Let me ask you, if Zeus scrams and crashes out, and it's installed 
 | 
						|
properly so it just comes right back up, how much data can you lose?
 | 
						|
 | 
						|
If Postgresql scrams and crashes out, how much data can you lost?
 | 
						|
 | 
						|
> Given all that, if PostgreSQL
 | 
						|
> specific
 | 
						|
> thread support is =not= showing itself to be a win that's an
 | 
						|
> unexpected
 | 
						|
> enough outcome that we should be asking hard questions as to why not.
 | 
						|
 | 
						|
There HAS been testing on threads in Postgresql.  It has been covered to 
 | 
						|
death.  The fact that you're still arguing proves you likely haven't read 
 | 
						|
the archive (google has it back to way back when, use that to look it up) 
 | 
						|
about this subject.
 | 
						|
 | 
						|
Threads COULD help on multi-sorted results, and a few other areas, but the 
 | 
						|
increase in performance really wasn't that great for 95% of all the cases, 
 | 
						|
and for the 5% it was, simple query planner improvements have provided far 
 | 
						|
greater performance increases.
 | 
						|
 | 
						|
The problem with threading is that we can either use the one process -> 
 | 
						|
many thread design, which I personally don't trust for something like a 
 | 
						|
database, or a process per backend connection which can run 
 | 
						|
multi-threaded.  This scenario makes Postgresql just as stable and 
 | 
						|
reliable as it was as a multi-process app, but allows threaded performance 
 | 
						|
in certain areas of the backend that are parallelizable to run in parallel 
 | 
						|
on multi-CPU systems.
 | 
						|
 | 
						|
the gain, again, is minimal, and on a system with many users accessing it, 
 | 
						|
there is NO real world gain.
 | 
						|
 | 
						|
> At their core, threads are a context switching efficiency tweak.
 | 
						|
 | 
						|
Except that on the two OSes which Postgresql runs on the most, threads are 
 | 
						|
really no faster than processes.  In the Linux kernel, the only real 
 | 
						|
difference is how the OS treats them, creation, destruction of threads 
 | 
						|
versus processes is virtually identical there.
 | 
						|
 | 
						|
> Certainly it's =possible= that threads have nothing to offer
 | 
						|
> PostgreSQL, but IMHO it's not =probable=.  Just another thing for me
 | 
						|
> to add to my TODO heap for looking at...
 | 
						|
 | 
						|
It's been tested, it didn't help a lot, and it made it MUCH harder to 
 | 
						|
maintain, as threads in Linux are handled by a different lib than in say 
 | 
						|
Solaris, or Windows or any other OS.  I.e. you can't guarantee the thread 
 | 
						|
lib you need will be there, and that there are no bugs.  MySQL still has 
 | 
						|
thread bug issues pop up, most of which are in the thread libs themselves.
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 4: Don't 'kill -9' the postmaster
 | 
						|
 | 
						|
From pgsql-hackers-owner+M37865@postgresql.org Fri Apr 11 17:34:21 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M37865@postgresql.org>
 | 
						|
Received: from relay1.pgsql.com (relay1.pgsql.com [64.49.215.129])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h3BLYIv28485
 | 
						|
	for <pgman@candle.pha.pa.us>; Fri, 11 Apr 2003 17:34:19 -0400 (EDT)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by relay1.pgsql.com (Postfix) with ESMTP
 | 
						|
	id 0AF036F77ED; Fri, 11 Apr 2003 17:34:19 -0400 (EDT)
 | 
						|
X-Original-To: pgsql-hackers@postgresql.org
 | 
						|
Received: from spampd.localdomain (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id EBB41476323
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri, 11 Apr 2003 17:33:02 -0400 (EDT)
 | 
						|
Received: from filer (12-234-86-219.client.attbi.com [12.234.86.219])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id CED7D4762E1
 | 
						|
	for <pgsql-hackers@postgresql.org>; Fri, 11 Apr 2003 17:32:57 -0400 (EDT)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
  (uid 1000)
 | 
						|
  by filer with local; Fri, 11 Apr 2003 14:32:59 -0700
 | 
						|
Date: Fri, 11 Apr 2003 14:32:59 -0700
 | 
						|
From: Kevin Brown <kevin@sysexperts.com>
 | 
						|
To: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Anyone working on better transaction locking?
 | 
						|
Message-ID: <20030411213259.GU1833@filer>
 | 
						|
Mail-Followup-To: Kevin Brown <kevin@sysexperts.com>,
 | 
						|
	pgsql-hackers@postgresql.org
 | 
						|
References: <20030409170926.GH2255@libertyrms.info> <eS0la.16229$ey1.1398978@newsread1.prod.itd.earthlink.net>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Content-Disposition: inline
 | 
						|
In-Reply-To: <eS0la.16229$ey1.1398978@newsread1.prod.itd.earthlink.net>
 | 
						|
User-Agent: Mutt/1.4i
 | 
						|
Organization: Frobozzco International
 | 
						|
X-Spam-Status: No, hits=-38.0 required=5.0
 | 
						|
	tests=BAYES_10,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT,
 | 
						|
       REFERENCES,REPLY_WITH_QUOTES,USER_AGENT_MUTT
 | 
						|
	autolearn=ham	version=2.50
 | 
						|
X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp)
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
Ron Peacetree wrote:
 | 
						|
> Zeus had a performance ceiling roughly 3x that of Apache when Zeus
 | 
						|
> supported threading as well as pre-forking and Apache only supported
 | 
						|
> pre forking.  The Apache folks now support both.  DB2, Oracle, and SQL
 | 
						|
> Server all use threads.  Etc, etc.
 | 
						|
 | 
						|
You can't use Apache as an example of why you should thread a database
 | 
						|
engine, except for the cases where the database is used much like the
 | 
						|
web server is: for numerous short transactions.
 | 
						|
 | 
						|
> That's an awful lot of very bright programmers and some serious $$
 | 
						|
> voting that threads are worth it.  Given all that, if PostgreSQL
 | 
						|
> specific thread support is =not= showing itself to be a win that's
 | 
						|
> an unexpected enough outcome that we should be asking hard questions
 | 
						|
> as to why not.
 | 
						|
 | 
						|
It's not that there won't be any performance benefits to be had from
 | 
						|
threading (there surely will, on some platforms), but gaining those
 | 
						|
benefits comes at a very high development and maintenance cost.  You
 | 
						|
lose a *lot* of robustness when all of your threads share the same
 | 
						|
memory space, and make yourself vulnerable to classes of failures that
 | 
						|
simply don't happen when you don't have shared memory space.
 | 
						|
 | 
						|
PostgreSQL is a compromise in this regard: it *does* share memory, but
 | 
						|
it only shares memory that has to be shared, and nothing else.  To get
 | 
						|
the benefits of full-fledged threads, though, requires that all memory
 | 
						|
be shared (otherwise the OS has to tweak the page tables whenever it
 | 
						|
switches contexts between your threads).
 | 
						|
 | 
						|
> At their core, threads are a context switching efficiency tweak.
 | 
						|
 | 
						|
This is the heart of the matter.  Context switching is an operating
 | 
						|
system problem, and *that* is where the optimization belongs.  Threads
 | 
						|
exist in large part because operating system vendors didn't bother to
 | 
						|
do a good job of optimizing process context switching and
 | 
						|
creation/destruction.
 | 
						|
 | 
						|
Under Linux, from what I've read, process creation/destruction and
 | 
						|
context switching happens almost as fast as thread context switching
 | 
						|
on other operating systems (Windows in particular, if I'm not
 | 
						|
mistaken).
 | 
						|
 | 
						|
> Since DB's switch context a lot under many circumstances, threads
 | 
						|
> should be a win under such circumstances.  At the least, it should be
 | 
						|
> helpful in situations where we have multiple CPUs to split query
 | 
						|
> execution between.
 | 
						|
 | 
						|
This is true, but I see little reason that we can't do the same thing
 | 
						|
using fork()ed processes and shared memory instead.
 | 
						|
 | 
						|
There is context switching within databases, to be sure, but I think
 | 
						|
you'll be hard pressed to demonstrate that it is anything more than an
 | 
						|
insignificant fraction of the total overhead incurred by the database.
 | 
						|
I strongly suspect that much larger gains are to be had by optimizing
 | 
						|
other areas of the database, such as the planner, the storage manager
 | 
						|
(using mmap for file handling may prove useful here), the shared
 | 
						|
memory system (mmap may be faster than System V style shared memory),
 | 
						|
etc.
 | 
						|
 | 
						|
The big overhead in the process model on most platforms is in creation
 | 
						|
and destruction of processes.  PostgreSQL has a relatively high
 | 
						|
connection startup cost.  But there are ways of dealing with this
 | 
						|
problem other than threading, namely the use of a connection caching
 | 
						|
middleware layer.  Such layers exist for databases other than
 | 
						|
PostgreSQL, so the high cost of fielding and setting up a database
 | 
						|
connection is *not* unique to PostgreSQL ... which suggests that while
 | 
						|
threading may help, it doesn't help *enough*.
 | 
						|
 | 
						|
I'd rather see some development work go into a connection caching
 | 
						|
process that understands the PostgreSQL wire protocol well enough to
 | 
						|
look like a PostgreSQL backend to connecting processes, rather than
 | 
						|
see a much larger amount of effort be spent on converting PostgreSQL
 | 
						|
to a threaded architecture (and then discover that connection caching
 | 
						|
is still needed anyway).
 | 
						|
 | 
						|
> Certainly it's =possible= that threads have nothing to offer
 | 
						|
> PostgreSQL, but IMHO it's not =probable=.  Just another thing for me
 | 
						|
> to add to my TODO heap for looking at...
 | 
						|
 | 
						|
It's not that threads don't have anything to offer.  It's that the
 | 
						|
costs associated with them are high enough that it's not at all clear
 | 
						|
that they're an overall win.
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Kevin Brown					      kevin@sysexperts.com
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 6: Have you searched our list archives?
 | 
						|
 | 
						|
http://archives.postgresql.org
 | 
						|
 | 
						|
From pgsql-hackers-owner+M37876@postgresql.org Sat Apr 12 06:56:17 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M37876@postgresql.org>
 | 
						|
Received: from relay3.pgsql.com (relay3.pgsql.com [64.117.224.149])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h3CAuDS20700
 | 
						|
	for <pgman@candle.pha.pa.us>; Sat, 12 Apr 2003 06:56:15 -0400 (EDT)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by relay3.pgsql.com (Postfix) with ESMTP
 | 
						|
	id 35797EA81FF; Sat, 12 Apr 2003 10:55:59 +0000 (GMT)
 | 
						|
X-Original-To: pgsql-hackers@postgresql.org
 | 
						|
Received: from spampd.localdomain (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 7393E4762EF
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat, 12 Apr 2003 06:54:48 -0400 (EDT)
 | 
						|
Received: from filer (12-234-86-219.client.attbi.com [12.234.86.219])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 423294762E1
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat, 12 Apr 2003 06:54:44 -0400 (EDT)
 | 
						|
Received: from localhost (localhost [127.0.0.1])
 | 
						|
  (uid 1000)
 | 
						|
  by filer with local; Sat, 12 Apr 2003 03:54:52 -0700
 | 
						|
Date: Sat, 12 Apr 2003 03:54:52 -0700
 | 
						|
From: Kevin Brown <kevin@sysexperts.com>
 | 
						|
To: pgsql-hackers@postgresql.org
 | 
						|
Subject: Re: [HACKERS] Anyone working on better transaction locking?
 | 
						|
Message-ID: <20030412105452.GV1833@filer>
 | 
						|
Mail-Followup-To: Kevin Brown <kevin@sysexperts.com>,
 | 
						|
	pgsql-hackers@postgresql.org
 | 
						|
References: <20030409170926.GH2255@libertyrms.info> <eS0la.16229$ey1.1398978@newsread1.prod.itd.earthlink.net> <20030411213259.GU1833@filer> <200304121221.12377.shridhar_daithankar@nospam.persistent.co.in>
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=us-ascii
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
Content-Disposition: inline
 | 
						|
In-Reply-To: <200304121221.12377.shridhar_daithankar@nospam.persistent.co.in>
 | 
						|
User-Agent: Mutt/1.4i
 | 
						|
Organization: Frobozzco International
 | 
						|
X-Spam-Status: No, hits=-39.4 required=5.0
 | 
						|
	tests=BAYES_01,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT,
 | 
						|
       QUOTE_TWICE_1,REFERENCES,REPLY_WITH_QUOTES,USER_AGENT_MUTT
 | 
						|
	autolearn=ham	version=2.50
 | 
						|
X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp)
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
Shridhar Daithankar wrote:
 | 
						|
> Apache does too many things to be a speed daemon and what it offers
 | 
						|
> is pretty impressive from performance POV.
 | 
						|
>
 | 
						|
> But database is not webserver. It is not suppose to handle tons of
 | 
						|
> concurrent requests. That is a fundamental difference.
 | 
						|
 | 
						|
I'm not sure I necessarily agree with this.  A database is just a
 | 
						|
tool, a means of reliably storing information in such a way that it
 | 
						|
can be retrieved quickly.  Whether or not it "should" handle lots of
 | 
						|
concurrent requests is a question that the person trying to use it
 | 
						|
must answer.
 | 
						|
 | 
						|
A better answer is that a database engine that can handle lots of
 | 
						|
concurrent requests can also handle a smaller number, but not vice
 | 
						|
versa.  So it's clearly an advantage to have a database engine that
 | 
						|
can handle lots of concurrent requests because such an engine can be
 | 
						|
applied to a larger number of problems.  That is, of course, assuming
 | 
						|
that all other things are equal...
 | 
						|
 | 
						|
There are situations in which a database would have to handle a lot of
 | 
						|
concurrent requests.  Handling ATM transactions over a large area is
 | 
						|
one such situation.  A database with current weather information might
 | 
						|
be another, if it is actively queried by clients all over the country.
 | 
						|
Acting as a mail store for a large organization is another.  And, of
 | 
						|
course, acting as a filesystem is definitely another.  :-)
 | 
						|
 | 
						|
> Well. Threading does not necessarily imply one thread per connection
 | 
						|
> model. Threading can be used to make CPU work during I/O and taking
 | 
						|
> advantage of SMP for things like sort etc. This is especially true
 | 
						|
> for 2.4.x linux kernels where async I/O can not be used for threaded
 | 
						|
> apps. as threads and signal do not mix together well.
 | 
						|
 | 
						|
This is true, but whether you choose to limit the use of threads to a
 | 
						|
few specific situations or use them throughout the database, the
 | 
						|
dangers and difficulties faced by the developers when using threads
 | 
						|
will be the same.
 | 
						|
 | 
						|
> One connection per thread is not a good model for postgresql since
 | 
						|
> it has already built a robust product around process paradigm. If I
 | 
						|
> have to start a new database project today, a mix of process+thread
 | 
						|
> is what I would choose bu postgresql is not in same stage of life.
 | 
						|
 | 
						|
Certainly there are situations for which it would be advantageous to
 | 
						|
have multiple concurrent actions happening on behalf of a single
 | 
						|
connection, as you say.  But that doesn't automatically mean that a
 | 
						|
thread is the best overall solution.  On systems such as Linux that
 | 
						|
have fast process handling, processes are almost certainly the way to
 | 
						|
go.  On other systems such as Solaris or Windows, threads might be the
 | 
						|
right answer (on Windows they might be the *only* answer).  But my
 | 
						|
argument here is simple: the responsibility of optimizing process
 | 
						|
handling belongs to the maintainers of the OS.  Application developers
 | 
						|
shouldn't have to worry about this stuff.
 | 
						|
 | 
						|
Of course, back here in the real world they *do* have to worry about
 | 
						|
this stuff, and that's why it's important to quantify the problem.
 | 
						|
It's not sufficient to say that "processes are slow and threads are
 | 
						|
fast".  Processes on the target platform may well be slow relative to
 | 
						|
other systems (and relative to threads).  But the question is: for the
 | 
						|
problem being solved, how much overhead does process handling
 | 
						|
represent relative to the total amount of overhead the solution itself
 | 
						|
incurs?
 | 
						|
 | 
						|
For instance, if we're talking about addressing the problem of
 | 
						|
distributing sorts across multiple CPUs, the amount of overhead
 | 
						|
involved in doing disk activity while sorting could easily swamp, in
 | 
						|
the typical case, the overhead involved in creating parallel processes
 | 
						|
to do the sorts themselves.  And if that's the case, you may as well
 | 
						|
gain the benefits of using full-fledged processes rather than deal
 | 
						|
with the problems that come with the use of threads -- because the
 | 
						|
gains to be found by using threads will be small in relative terms.
 | 
						|
 | 
						|
> > > At their core, threads are a context switching efficiency tweak.
 | 
						|
> >
 | 
						|
> > This is the heart of the matter.  Context switching is an operating
 | 
						|
> > system problem, and *that* is where the optimization belongs.  Threads
 | 
						|
> > exist in large part because operating system vendors didn't bother to
 | 
						|
> > do a good job of optimizing process context switching and
 | 
						|
> > creation/destruction.
 | 
						|
> 
 | 
						|
> But why would a database need a tons of context switches if it is
 | 
						|
> not supposed to service loads to request simaltenously? If there are
 | 
						|
> 50 concurrent connections, how much context switching overhead is
 | 
						|
> involved regardless of amount of work done in a single connection? 
 | 
						|
> Remeber that database state is maintened in shared memory. It does
 | 
						|
> not take a context switch to access it.
 | 
						|
 | 
						|
If there are 50 concurrent connections with one process per
 | 
						|
connection, then there are 50 database processes.  The context switch
 | 
						|
overhead is incurred whenever the current process blocks (or exhausts
 | 
						|
its time slice) and the OS activates a different process.  Since
 | 
						|
database handling is generally rather I/O intensive as services go,
 | 
						|
relatively few of those 50 processes are likely to be in a runnable
 | 
						|
state, so I would expect the overall hit from context switching to be
 | 
						|
rather low -- I'd expect the I/O subsystem to fall over well before
 | 
						|
context switching became a real issue.
 | 
						|
 | 
						|
Of course, all of that is independent of whether or not the database
 | 
						|
can handle a lot of simultaneous requests.
 | 
						|
 | 
						|
> > Under Linux, from what I've read, process creation/destruction and
 | 
						|
> > context switching happens almost as fast as thread context switching
 | 
						|
> > on other operating systems (Windows in particular, if I'm not
 | 
						|
> > mistaken).
 | 
						|
> 
 | 
						|
> I hear solaris also has very heavy processes. But postgresql has
 | 
						|
> other issues with solaris as well.
 | 
						|
 | 
						|
Yeah, I didn't want to mention Solaris because I haven't kept up with
 | 
						|
it and thought that perhaps they had fixed this...
 | 
						|
 | 
						|
 | 
						|
-- 
 | 
						|
Kevin Brown					      kevin@sysexperts.com
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 2: you can get off all lists at once with the unregister command
 | 
						|
    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
 | 
						|
 | 
						|
From pgsql-hackers-owner+M37883@postgresql.org Sat Apr 12 16:09:19 2003
 | 
						|
Return-path: <pgsql-hackers-owner+M37883@postgresql.org>
 | 
						|
Received: from relay1.pgsql.com (relay1.pgsql.com [64.49.215.129])
 | 
						|
	by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id h3CK9HS03520
 | 
						|
	for <pgman@candle.pha.pa.us>; Sat, 12 Apr 2003 16:09:18 -0400 (EDT)
 | 
						|
Received: from postgresql.org (postgresql.org [64.49.215.8])
 | 
						|
	by relay1.pgsql.com (Postfix) with ESMTP
 | 
						|
	id 507626F768B; Sat, 12 Apr 2003 16:09:01 -0400 (EDT)
 | 
						|
X-Original-To: pgsql-hackers@postgresql.org
 | 
						|
Received: from spampd.localdomain (postgresql.org [64.49.215.8])
 | 
						|
	by postgresql.org (Postfix) with ESMTP id 06543475AE4
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat, 12 Apr 2003 16:08:03 -0400 (EDT)
 | 
						|
Received: from mail.gmx.net (mail.gmx.net [213.165.65.60])
 | 
						|
	by postgresql.org (Postfix) with SMTP id C6DC347580B
 | 
						|
	for <pgsql-hackers@postgresql.org>; Sat, 12 Apr 2003 16:08:01 -0400 (EDT)
 | 
						|
Received: (qmail 31386 invoked by uid 65534); 12 Apr 2003 20:08:13 -0000
 | 
						|
Received: from chello062178186201.1.15.tuwien.teleweb.at (EHLO beeblebrox) (62.178.186.201)
 | 
						|
  by mail.gmx.net (mp001-rz3) with SMTP; 12 Apr 2003 22:08:13 +0200
 | 
						|
Message-ID: <01cc01c3012f$526aaf80$3201a8c0@beeblebrox>
 | 
						|
From: "Michael Paesold" <mpaesold@gmx.at>
 | 
						|
To: "Neil Conway" <neilc@samurai.com>, "Kevin Brown" <kevin@sysexperts.com>
 | 
						|
cc: "PostgreSQL Hackers" <pgsql-hackers@postgresql.org>
 | 
						|
References: <20030409170926.GH2255@libertyrms.info> <eS0la.16229$ey1.1398978@newsread1.prod.itd.earthlink.net> <20030411213259.GU1833@filer> <1050175777.392.13.camel@tokyo>
 | 
						|
Subject: Re: [HACKERS] Anyone working on better transaction locking?
 | 
						|
Date: Sat, 12 Apr 2003 22:08:40 +0200
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain;
 | 
						|
	charset="Windows-1252"
 | 
						|
Content-Transfer-Encoding: 7bit
 | 
						|
X-Priority: 3
 | 
						|
X-MSMail-Priority: Normal
 | 
						|
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
 | 
						|
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
 | 
						|
X-Spam-Status: No, hits=-25.8 required=5.0
 | 
						|
	tests=BAYES_20,EMAIL_ATTRIBUTION,QUOTED_EMAIL_TEXT,REFERENCES,
 | 
						|
       REPLY_WITH_QUOTES
 | 
						|
	autolearn=ham	version=2.50
 | 
						|
X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp)
 | 
						|
Precedence: bulk
 | 
						|
Sender: pgsql-hackers-owner@postgresql.org
 | 
						|
Status: OR
 | 
						|
 | 
						|
Neil Conway wrote:
 | 
						|
 | 
						|
> Furthermore, IIRC PostgreSQL's relatively slow connection creation time
 | 
						|
> has as much to do with other per-backend initialization work as it does
 | 
						|
> with the time to actually fork() a new backend. If there is interest in
 | 
						|
> optimizing backend startup time, my guess would be that there is plenty
 | 
						|
> of room for improvement without requiring the replacement of processes
 | 
						|
> with threads.
 | 
						|
 | 
						|
I see there is a whole TODO Chapter devoted to the topic. There is the idea
 | 
						|
of pre-forked and persistent backends. That would be very useful in an
 | 
						|
environment where it's quite hard to use connection pooling. We are
 | 
						|
currently working on a mail system for a free webmail. The mda (mail
 | 
						|
delivery agent) written in C connects to the pg database to do some queries
 | 
						|
everytime a new mail comes in. I didn't find a solution for connection
 | 
						|
pooling yet.
 | 
						|
 | 
						|
About the TODO items, apache has a nice description of their accept()
 | 
						|
serialization:
 | 
						|
http://httpd.apache.org/docs-2.0/misc/perf-tuning.html
 | 
						|
 | 
						|
Perhaps this could be useful if someone decided to start implementing those
 | 
						|
features.
 | 
						|
 | 
						|
Regards,
 | 
						|
Michael Paesold
 | 
						|
 | 
						|
 | 
						|
---------------------------(end of broadcast)---------------------------
 | 
						|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
 | 
						|
 |