"Jeffrey W. Baker" <jwbaker(at)acm(dot)org> writes:
> I have a moderately loaded postgres server running 7.2beta4 (i wanted to
> try out the live vacuum) that turns out to spend the majority of its cpu
> time in kernel land. With only a handful of running processes, postgres
> induces tens of thousands of context switches per second. Practically the
> only thing postgres does with all this CPU time is semop() in a tight
> loop.
It sounds like you have a build that's using SysV semaphores in place of
test-and-set instructions. That should not happen on x86 hardware,
since we have assembly TAS code for x86. Please look at your port
header file (src/include/pg_config_os.h symlink) and
src/include/storage/s_lock.h to figure out why it's misbuilt.
regards, tom lane