Create thread specific zombie queues

Because each thread has their own epoll file descriptor and only one
thread can process a DCB, it makes sense to move to a per thread zombie
queue. This removes one of the last restrictions on scalability.
This commit is contained in:
Markus Makela
2016-10-26 21:55:24 +03:00
parent f77f78360e
commit 076b810c1e
6 changed files with 81 additions and 216 deletions

View File

@ -450,6 +450,7 @@ poll_remove_dcb(DCB *dcb)
*/
dcbfd = dcb->fd;
spinlock_release(&dcb->dcb_initlock);
if (dcbfd > 0)
{
rc = epoll_ctl(epoll_fd[dcb->owner], EPOLL_CTL_DEL, dcbfd, &ev);
@ -842,12 +843,11 @@ poll_set_maxwait(unsigned int maxwait)
static int
process_pollq(int thread_id, struct epoll_event *event)
{
int found = 0;
uint32_t ev = event->events;
unsigned long qtime;
DCB *dcb = event->data.ptr;
ss_dassert(dcb->owner == thread_id);
#if PROFILE_POLL
memlog_log(plog, hkheartbeat - dcb->evq.inserted);
#endif