AW: Eliminating Packet Latency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Sebastian Andrzej Siewior [mailto:bigeasy@xxxxxxxxxxxxx]

> >> I found that sometimes when sending network packets, the kernel would
> >> hijack the thread of the sender when the queue was empty. This would
> >> cause issues, since I had no control over the priority of that
> >> thread, since it could be anything. My fix was to never allow the
> >> kernel to send in the context of the sending userspace
> >
> >We had a similar problem and solved it with changed locking:
> 
> So the following patch should do the job. Can someone confirm?
> 
> From: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> Date: Wed, 30 Mar 2016 13:36:29 +0200
> Subject: [PATCH] net: dev: always take qdisc's busylock in __dev_xmit_skb()
> 
> The root-lock is dropped before dev_hard_start_xmit() is invoked and after setting
> the __QDISC___STATE_RUNNING bit. If this task is now pushed away by a task
> with a higher priority then the task with the higher priority won't be able to submit
> packets to the NIC directly instead they will be enqueued into the Qdisc. The NIC
> will remain idle until the task(s) with higher priority leave the CPU and the task with
> lower priority gets back and finishes the job.
> 
> If we take always the busylock we ensure that the RT task can boost the low-prio
> task and submit the packet.
> 
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> ---
>  net/core/dev.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/net/core/dev.c b/net/core/dev.c index cc364be3587b..0e17592adbff
> 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -2891,7 +2891,11 @@ static inline int __dev_xmit_skb(struct sk_buff *skb,
> struct Qdisc *q,
>  	 * This permits __QDISC___STATE_RUNNING owner to get the lock more
>  	 * often and dequeue packets faster.
>  	 */
> +#ifdef CONFIG_PREEMPT_RT_FULL
> +	contended = true;
> +#else
>  	contended = qdisc_is_running(q);
> +#endif
>  	if (unlikely(contended))
>  		spin_lock(&q->busylock);
> 
> --
> 2.8.0.rc3

In could not reproduce the problematic situation with v4.4.4-rt11 (without patch) in our
test environment. The patch may work, but I am able to confirm that with a test.
��.n��������+%������w��{.n�����{�����ǫ���ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux