tcp: tsq: add a shortcut in tcp_small_queue_check()
Always allow the two first skbs in write queue to be sent, regardless of sk_wmem_alloc/sk_pacing_rate values. This helps a lot in situations where TX completions are delayed either because of driver latencies or softirq latencies. Test is done with no cache line misses. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
a9b204d156
Коммит
75eefc6c59
|
@ -2091,6 +2091,15 @@ static bool tcp_small_queue_check(struct sock *sk, const struct sk_buff *skb,
|
|||
limit <<= factor;
|
||||
|
||||
if (atomic_read(&sk->sk_wmem_alloc) > limit) {
|
||||
/* Always send the 1st or 2nd skb in write queue.
|
||||
* No need to wait for TX completion to call us back,
|
||||
* after softirq/tasklet schedule.
|
||||
* This helps when TX completions are delayed too much.
|
||||
*/
|
||||
if (skb == sk->sk_write_queue.next ||
|
||||
skb->prev == sk->sk_write_queue.next)
|
||||
return false;
|
||||
|
||||
set_bit(TSQ_THROTTLED, &tcp_sk(sk)->tsq_flags);
|
||||
/* It is possible TX completion already happened
|
||||
* before we set TSQ_THROTTLED, so we must
|
||||
|
|
Загрузка…
Ссылка в новой задаче