pgsql-server/ /configure /configure.in rc/incl ...

pgsql-server/ /configure /configure.in rc/incl ...

Post by Sean Chittend » Wed, 12 Mar 2003 03:21:31



--G5yIW5EaChZ5gJdA
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Quote:> >>> Has anyone ever thought about adding kqueue (for *BSD) support to
> >>> Postgres, instead of using select?
> >>=20
> >> Why?  poll() is standard.  kqueue isn't, AFAIK.
>=20
> > It's supposed be a whole heap faster - there is no polling involved...
>=20
> Supposed by whom?  Faster than what?  And how would it not poll?
>=20
> The way libpq uses this call, it's either probing for current status
> (timeout=3D0) or it's willing to block, possibly indefinitely, until the
> desired condition arises.  It does not sit there in a busy-wait loop.
> I can't see any reason to think that an OS-specific API would give
> any marked difference in performance.

Heh, kqueue is _the_ reason to use FreeBSD.

http://www.kegel.com/dkftpbench/Poller_bench.html#results

I've toyed with the idea of adding this because it is monstrously more
efficient than select()/poll() in basically every way, shape, and
form.

That said, in terms of performance perks, I'd think migrating the
backend to using mmap() would yield a bigger performance benefit (see
Stevens) to a larger group of people than adding FreeBSD's kqueue
interface (something I plan on doing at some point if no one beats me
to it).  mmap() + write() for FreeBSD is a zero-copy socket operation
and likely is on other platforms.  Reducing the number of pages that
have to be copied around would be a big win in terms of sending data
to clients as well as scanning through data.  Files are also only
mmap()'ed in the kernel once with BSD's VM system which could reduce
the RAM consumed by backends considerably.

mmap() would also be an interesting way of providing some kind of
atomicity for MVCC (re: WAL, use msync() to have the mapped region hit
the disk before the change). I was actually quite surprised when I
grep'ed through the code and found that mmap() wasn't in use
_anywhere_.  The TODO seems to be full of messages, but not much in
the way of authoritative statements.  Is this one of the areas of
PostgreSQL that just needs to get slowly migrated to use mmap() or are
there any gaping reasons why to not use the family of system calls?

-sc

--=20
Sean Chittenden

--G5yIW5EaChZ5gJdA
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----

iD8DBQE+Zxe93ZnjH7yEs0ERAmcgAJ9zLfxB62TbCeeXby7GEsZBpOb0rACg5OR4
AanBKeFWVvARKCN0Un/xCm8=
=6nPT
-----END PGP SIGNATURE-----

--G5yIW5EaChZ5gJdA--

 
 
 

1. pgsql-server/ /configure /configure.in rc/incl ...

CVSROOT:        /cvsroot
Module name:    pgsql-server

Modified files:
        .              : configure configure.in
        src/include    : c.h
Added files:
        src/port       : opendir.c

Log message:
        Add opendir/readdir/closedir() for Win32.

        Keep SRA copyright on file because it contains BSD license clause.

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

2. sql problem

3. Small query, how to find and/or adjust the maximum log files?

4. Word Template

5. ORACLE-Internal-Date-Format

6. pgsql/ /configure /configure.in rc/Makefile rc ...

7. pgsql-server/ /configure /configure.in rc/Make ...

8. pgsql-server/ /configure /configure.in rc/test ...

9. pgsql-server/ /configure /configure.in rc/Make ...

10. pgsql-server/ /configure /configure.in rc/back ...