Re: [HACKERS] fork/exec for backend

Bruce Momjian <maillist@candle.pha.pa.us>

From: Bruce Momjian <maillist@candle.pha.pa.us>
To: goran@bildbasen.se (Goran Thyni)
Cc: tom@sdf.com, hackers@postgreSQL.org
Date: 1998-01-25T00:21:55Z
Lists: pgsql-hackers
> 
> 
>    On 24 Jan 1998, Goran Thyni wrote:
> 
>    > Fork on modern unices (linux and (a think) *BSD) cost
>    > almost nothing (in time and memory) thanks to COW (copy-on-write).
>    > Exec in expensive as it breaks COW.
> 
>      Not so.  Modern Unixs will share executable address space between
>    processes.  So if you fork and exec 10 identical programs, they will share
>    most address space.
> 
> 1. Code is probably not shared between postmaster and postgres
>    processes.



I think it is shared.  postmaster is a symlink to postgres, so by the
time it gets to the kernel exec routines, both processes are mapped to
the same inode number.

> 
> 2. Some inits may be done once (by postmaster) and not repeated
>    by every child.

Maybe.

> 
> 3. (and most important) 
>    With no exec COW is in action, meaning:
>    data pages in shared until changed.

This would also prevent us from attaching to shared memory because it
would already be in the address space.

> 
> COW is the key to how Linux can fork faster than most unices
> starts a new thread. :-)


> 
>      Again, this only applies to "modern" systems, but FreeBSD definitely has
>    this behaviour.
> 
> I don't know if *BSD has COW, but if should think so.

All modern Unixes have COW.

-- 
Bruce Momjian
maillist@candle.pha.pa.us