> On Aug 23, 2017, at 9:47 AM, Gabriel Carrillo <erik.g.carri...@intel.com> > wrote: > > In the current implementation of the DPDK timer library, timers can be > created and set to be handled by a target lcore by adding it to a > skiplist that corresponds to that lcore. However, if an application > enables multiple lcores, and each of these lcores repeatedly attempts > to install timers on the same target lcore, overall application > throughput will be reduced as all lcores contend to acquire the lock > guarding the single skiplist of pending timers. > > This patchset addresses this scenario by adding an array of skiplists > to each lcore's priv_timer struct, such that when lcore i installs a > timer on lcore k, the timer will be added to the ith skiplist for > lcore k. If lcore j installs a timer on lcore k simultaneously, > lcores i and j can both proceed since they will be acquiring different > locks for different lists. > > When lcore k processes its pending timers, it will traverse each skiplist > in its array and acquire a skiplist's lock while a run list is broken > out; meanwhile, all other lists can continue to be modified. Then, all > run lists for lcore k are collected and traversed together so timers are > executed in their global order.
What is the performance and/or latency added to the timeout now? I worry about the case when just about all of the cores are enabled, which could be as high was 128 or more now. One option is to have the lcore j that wants to install a timer on lcore k to pass a message via a ring to lcore k to add that timer. We could even add that logic into setting a timer on a different lcore then the caller in the current API. The ring would be a multi-producer and single consumer, we still have the lock. What am I missing here? > > Gabriel Carrillo (3): > timer: add per-installer pending lists for each lcore > timer: handle timers installed from non-EAL threads > doc: update timer lib docs > > doc/guides/prog_guide/timer_lib.rst | 19 ++- > lib/librte_timer/rte_timer.c | 329 +++++++++++++++++++++++------------- > lib/librte_timer/rte_timer.h | 9 +- > 3 files changed, 231 insertions(+), 126 deletions(-) > > -- > 2.6.4 > Regards, Keith