Hallvard Breien Furuseth wrote:
On 15. mars 2017 12:15, openldap-commit2devel(a)OpenLDAP.org wrote:
> commit e12ca8b6fed6b8a2526c5c8ee820bf5aa942b59d
> Author: Howard Chu <hyc(a)openldap.org>
> Date: Wed Mar 15 11:13:09 2017 +0000
>
> Fixes for multiple threadpool queues
>
> Remove poolq_hash, it wasn't distributing work evenly to the queues.
Not surprising when it was hashing the address instead of contents
of a local variable. Whatever that intended to achieve, it looks
to me like rand_r() would have done the same but better.
It was hashing the bytes of arg. In the common case of the slapd_daemon_task
submitting jobs to the pool, arg was the socket descriptor of an active
connection, so this was always distributing those evenly. But in other cases
where arg was a context pointer, the result was heavily skewed.
(Also the
hash was pointlessly slow in that it walked a byte at a time, it
could have hashed better with fewer operations.)
for a 4 or 8 byte arg this was hardly important.
I guess I should have looked closer at that code earlier:-)
--
-- Howard Chu
CTO, Symas Corp.
http://www.symas.com
Director, Highland Sun
http://highlandsun.com/hyc/
Chief Architect, OpenLDAP
http://www.openldap.org/project/