Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

Re: solaris build problem with Sun compilers



Tom Lane wrote:
Alan Stange <stange(at)rentec(dot)com> writes:
Hmmm. I've just been looking at the last snapshot of the HEAD and s_lock.h is still using an ldstub instruction instead of a cas for the inlined tas() function when gcc is being used. Having a cas instruction here would probably be an improvement too, right?

[ shrug... ]  The person who submitted the solaris_sparc.s change failed
to provide any evidence that it was anything but cosmetic, so I didn't
worry about changing the equivalent gcc code.  If there's actually a
performance win, please cite chapter and verse.  Also, shouldn't we be
worrying about breaking older Sparc chips?  Does CAS go all the way
back?

Well, in principle the cas variant is better as fewer memory writes occur. I'm unable to cite chapter and verse on this detail, but it is "better".

I'm fairly sure CAS was included in the v9 instruction set. I was actually surprised to see that you had allowed it in just for this reason. I'm fairly sure this will break any program that needs to link against the postgresql libs using a "v8" 32 bit version.

Either way, my original observation is that you ought to have the same thing in either location. I'd leave the ldstub version (minus the useless compare and assignment instructions) until you're sure everyone is running v8plusb or v9 binaries.


Not that it matters here and now, but Solaris 10 includes atomic_ops in libc which are probably all inlined when using the Sun compiler. It's just what you want here and would hide most of these details. I believe these were also added in a Solaris 9 update.
See "man atomic_ops" for details.



Finally, I noticed that pg_sleep is calling select() for a sleep. On Solaris, this is a fairly expensive way to get off the run queue compared to just calling nanosleep(). How often do backends go to sleep here under "typical" workloads?

If you actually reach that syscall you're screwed performance-wise
anyhow.  I'm disinclined to mess with OS-specific variants of the
delay logic.

Not a problem.  I was just poking around and asking questions.

-- Alan



Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group