Bug #81229 | Client performance trashed due to threads woken up too early | ||
---|---|---|---|
Submitted: | 29 Apr 2016 7:50 | Modified: | 10 May 2016 10:07 |
Reporter: | Ole John Aske | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Cluster: NDB API | Severity: | S3 (Non-critical) |
Version: | 7.3 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[29 Apr 2016 7:50]
Ole John Aske
[10 May 2016 10:07]
Jon Stephens
Documented fix as follows in the NDB 7.5.2 changelog: A performance problem was found in an internal polling method do_poll() where the polling client did not check whether it had itself been woken up before completing the poll. Subsequent analysis showed that it is sufficient that only some clients in the polling queue receive data. do_poll() can then signal these clients and give up its polling rights, even if the maximum specified wait time (10 ms) has not expired. This change allows do_poll() to continue polling until either the maximum specified wait time has expired, or the polling client itself has been woken up (by receiving what it was waiting for). This avoids unnecessary thread switches between client threads and thus reduces the associated overhead by as much as 10% in API clients, resulting in a significant performance improvement when client threads perform their own polling. Closed.