Hallvard Breien Furuseth wrote:
On 15. mars 2017 12:15, openldap-commit2devel@OpenLDAP.org wrote:
commit e12ca8b6fed6b8a2526c5c8ee820bf5aa942b59d Author: Howard Chu hyc@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:-)
On 15. mars 2017 14:27, Howard Chu wrote:
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.
Duh, right. Sorry.
But in other cases where arg was a context pointer, the result was heavily skewed.