Latch implementation

From: Ganesh Venkitachalam-1 <ganesh(at)vmware(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Latch implementation
Date: 2010-09-22 20:31:18
Message-ID: Pine.LNX.4.64.1009221329460.20386@aluva.prom.eng.vmware.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Hi,

I've been playing around with measuring the latch implementation in 9.1,
and here are the results of a ping-pong test with 2 processes signalling
and waiting on the latch. I did three variations (linux 2.6.18, nehalem
processor).

One is the current one.

The second is built on native semaphors on linux. This one cannot
implement WaitLatchOrSocket, there's no select involved.

The third is an implementation based on pipe() and poll. Note: in its
current incarnation it's essentially a hack to measure performance, it's
not usable in postgres, this assumes all latches are created before any
process is forked. We'd need to use mkfifo to sort that out if we really
want to go this route, or similar.

- Current implementation: 1 pingpong is avg 15 usecs
- Pipe+poll: 9 usecs
- Semaphore: 6 usecs

The test program & modified unix_latch.c is attached, you can compile it
like "gcc -DPIPE -O2 sema.c" or "gcc -DLINUX_SEM -O2 sema.c" or "gcc -O2
sema.c".

Thanks,
--Ganesh

Attachment Content-Type Size
sema.c text/plain 2.7 KB
latch.h text/plain 2.4 KB
unix_latch.c text/plain 18.6 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2010-09-22 20:35:55 Re: Git conversion status
Previous Message Tom Lane 2010-09-22 20:28:04 Re: Another Modest Proposal: Platforms