Re: Threaded PosgreSQL server - Mailing list pgsql-hackers

From
Subject Re: Threaded PosgreSQL server
Date
Msg-id Pine.GSO.4.10.10202080903420.4027-100000@goldengate.kojoworldwide.com.
Whole thread Raw
In response to Re: Threaded PosgreSQL server  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Threaded PosgreSQL server
List pgsql-hackers

On Fri, 8 Feb 2002, Tom Lane wrote:

> I have a sneaking feeling that what you are going to come up with is a
> multi-megabyte patch to convert CurrentMemoryContext into a non-global,
> which will require changing the parameter list of damn near every
> routine in the backend.

While working with 7.0.2, I changed the call signature on only about 10
functions.  In the MemoryContext example,
MemorycontextSwitchTo(<Any>MemoryContext) turned into 
MemoryContextSwitchTo(GetEnv()-><Any>MemoryContext).  You may be able 
to do this with a #define.  While profiling the
code, this actually had very little impact on CPU resources.  There were
some hotspots where it made more sense to pass the global environment to
the function but the list is small.

> 
> Personally I will vote for rejecting such a patch, as it will uglify the
> code (and break nearly all existing user-written extension functions)
> far more than is justified by what it accomplishes: exactly zero, in
> terms of near-term usefulness.

I don't think that user functions need be broken.  As long as they use
palloc, a recompile may be all that is needed.

> 
> I think what's more interesting to discuss at this stage is the
> considerations I alluded to before: what are we going to do with the
> caches and other potentially-sharable datastructures?  Without a
> credible design for those issues, there is no point in sweating the
> small-but-annoying stuff.

As far as caches go, I punted on sharing.  Controlling access to the cache
hash tables looked like alot of work and I thought the contention for this
resource would be high.  So I had each thread build separate cache
structures.  The one difference was I had the original cache build occur
from memory rather than the file pg_internal.init.  So when the first
thread for a particular db is built,  the cache structures are built in
system memory and copied into the appropriate MemoryContext.  Each
subsequent cache for the db is copied from main memory at thread build.

One place where sharing worked great was the file manager.  I modified
md.c to share Vfd's. I made the maximum number of threads that could share
one Vfd configurable so that the number of Vfds created and the contention
to those Vfd's could be balanced.

It seems obvious to me that we need to thread slowly and softly into this
area so I promise I will not to spend a ton of time mangling the whole CVS
tree, 
that most definitely, would be a waste of everybody's time. I think I can
find an example area that will be a small patch and submit it for review.
Hopefully this can get the ball rolling.


Myron
mkscott@sacadia.com



pgsql-hackers by date:

Previous
From: Jean-Michel POURE
Date:
Subject: Re: Database abstration layers
Next
From: Tom Lane
Date:
Subject: Re: GiST on 64-bit box