Re: [patch 0/3] do not raise timer softirq unconditionally (spinlockless version)
- Date: Mon, 15 Apr 2019 17:17:09 -0300
- From: Marcelo Tosatti <mtosatti@xxxxxxxxxx>
- Subject: Re: [patch 0/3] do not raise timer softirq unconditionally (spinlockless version)
On Mon, Apr 15, 2019 at 05:12:13PM -0300, Marcelo Tosatti wrote:
> For isolated CPUs, we'd like to skip awakening ktimersoftd
> (the switch to and then back from ktimersoftd takes 10us in
> virtualized environments, in addition to other OS overhead,
> which exceeds telco requirements for packet forwarding for
> 5G) from the sched tick.
> The patch "timers: do not raise softirq unconditionally" from Thomas
> attempts to address that by checking, in the sched tick, whether its
> necessary to raise the timer softirq. Unfortunately, it attempts to grab
> the tvec base spinlock which generates the issue described in the patch
> "Revert "timers: do not raise softirq unconditionally"".
> tvec_base->lock protects addition of timers to the wheel versus
> timer interrupt execution.
> This patch does not grab the tvec base spinlock from irq context,
> but rather performs a lockless access to base->pending_map.
> It handles the the race between timer addition and timer interrupt
> execution by unconditionally (in case of isolated CPUs) raising the
> timer softirq after making sure the updated bitmap is visible
> on remote CPUs.
> This patchset reduces cyclictest latency from 25us to 14us
> on my testbox.
Patch against v5.0.5-rt3 branch of linux-rt-devel.