[PATCH 05/18] vinyl: wake up fibers waiting for quota one by one

Konstantin Osipov kostja at tarantool.org
Mon Aug 20 14:11:23 MSK 2018


* Vladimir Davydov <vdavydov.dev at gmail.com> [18/08/16 23:03]:
> Currently, we wake up all fibers whenever we free some memory. This
> is inefficient, because it might occur that all available quota gets
> consumed by a few fibers while the rest will have to go back to sleep.
> This is also kinda unfair, because waking up all fibers breaks the order
> in which the fibers were put to sleep. This works now, because we free
> memory and wake up fibers infrequently (on dump) and there normally
> shouldn't be any fibers waiting for quota (if there were, the latency
> would rocket sky high because of absence of any kind of throttling).
> However, once throttling is introduced, fibers waiting for quota will
> become the norm. So let's wake up fibers one by one: whenever we free
> memory we wake up the first fiber in the line, which will wake up the
> next fiber on success and so forth.
> +
> +	/* Wake up the next fiber in the line waiting for quota. */
> +	fiber_cond_signal(&q->cond);
>  	return 0;

Please only wake up the next fiber if there is one, or, better
yet,  if this fiber had been put to sleep and then was woken up. 

>  }
-- 
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.io - www.twitter.com/kostja_osipov



More information about the Tarantool-patches mailing list