Win32 shared memory speed

Started by Trevor Talbotabout 18 years ago4 messages
#1Trevor Talbot
quension@gmail.com

I've seen several comments about shared memory under Windows being
"slow", but I haven't had much luck finding info in the archives.

What are the details of this? How was it determined and is there a
straightforward test/benchmark?

#2Magnus Hagander
magnus@hagander.net
In reply to: Trevor Talbot (#1)
Re: Win32 shared memory speed

IIRC, there hasn't been any direct benchmark for it (though I've wanted to do that but had no time), but it's been the olnly real explanation put forward for the behaviour we've seen. And it does make sense given the thread-centric view of the windows mm.

/Magnus

Show quoted text

------- Original Message -------
From: "Trevor Talbot" <quension@gmail.com>
To: pgsql-hackers@postgresql.org
Sent: 07-11-11, 00:31:59
Subject: [HACKERS] Win32 shared memory speed

I've seen several comments about shared memory under Windows being
"slow", but I haven't had much luck finding info in the archives.

What are the details of this? How was it determined and is there a
straightforward test/benchmark?

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

#3James Mansion
james@mansionfamily.plus.com
In reply to: Magnus Hagander (#2)
Re: Win32 shared memory speed

Magnus Hagander wrote:

IIRC, there hasn't been any direct benchmark for it (though I've wanted to do that but had no time), but it's been the olnly real explanation put forward for the behaviour we've seen. And it does make sense given the thread-centric view of the windows mm.

/Magnus

How is it supposed to be slow, once its mapped into your process?
There's no OS interaction at all then.

If you are suggesting that the inter-process synch objects are slow,
then that may be so: just use interlocked
increment and a spin lock in place of a mutex and use an associated
event to wake up if necessary.

You dont have to use a named kernel mutex, though it may be handy while
setting up the shared memory.

If you are repeatedly changing the mappings - well, that may be
something that needs optimisation.

James

#4Magnus Hagander
magnus@hagander.net
In reply to: James Mansion (#3)
Re: Win32 shared memory speed

James Mansion wrote:

Magnus Hagander wrote:

IIRC, there hasn't been any direct benchmark for it (though I've
wanted to do that but had no time), but it's been the olnly real
explanation put forward for the behaviour we've seen. And it does make
sense given the thread-centric view of the windows mm.

/Magnus

How is it supposed to be slow, once its mapped into your process?
There's no OS interaction at all then.

Not entirely sure, I didn't think that theory up, I'm just echoing it.
My guess has been somewhere around interaction with the very expensive
between-process context switches.

If you are suggesting that the inter-process synch objects are slow,
then that may be so: just use interlocked
increment and a spin lock in place of a mutex and use an associated
event to wake up if necessary.

You dont have to use a named kernel mutex, though it may be handy while
setting up the shared memory.

We already use the interlocked functions for our spinlocks, with the
MSVC build. With the GCC build, we use custom assembler.

If you are repeatedly changing the mappings - well, that may be
something that needs optimisation.

We're not. The postmaster creates the segment, and each backend attaches
to it just once.

//Magnus