[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: ITS#3950





--On Monday, January 09, 2006 7:00 PM -0800 Howard Chu <hyc@symas.com> wrote:

Kurt D. Zeilenga wrote:
At present, we only replace sched_yield(2) on Linux as
the replacements are non-portable.  If other operating
systems are known to have problem sched_yield(2)
implementations, I suggest filing a separate ITS with
details and suggested replacement.


Sigh... select() seems to be about 5-6x slower than HAVE_NANOSLEEP on my Linux 2.6 system with current HEAD. Not sure why I didn't see such a drastic difference before, but it's quite noticable on test008 and test039. Perhaps the added Bind load pushed it over a threshold...


Okay, I've committed a basic detection code for REPLACE_SCHED_YIELD as well as updated replacement code. Currently uses select(2), but can be switched to nanosleep(2).

I've only tested on FreeBSD4 where this is a no-op.
Now pushing to a Linux box for real testing.

nanosleep(2) should work on Solaris (at least 8, 9 and 10) as well.


I started benchmarking on OpenLDAP 2.3.17 tonight. I found that on Solaris, there was no change in performance over previous OpenLDAP releases. However, I found that on linux, performance on just the prime job (which doesn't measure the full performance of the server, just loads the cache) had dropped from approximately 1500 searches/second to 100 searches/second (15X reduction in speed).

Changing portable.h to #undef REPLACE_BROKEN_YIELD brought performance back up.

I then tested

#define REPLACE_BROKEN_YIELD 1
#undef HAVE_NANOSLEEP


This also brought performance back up.

So some part of this change likely needs to be reverted, and is also likely the cause of the performance issue reports seen on -software.

--Quanah

--
Quanah Gibson-Mount
Product Engineer
Symas Corporation
Packaged, certified, and supported LDAP solutions powered by OpenLDAP:
<http://www.symas.com>