forked from mirrors/linux
		
	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:
		
							parent
							
								
									a9b204d156
								
							
						
					
					
						commit
						75eefc6c59
					
				
					 1 changed files with 9 additions and 0 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Eric Dumazet
						Eric Dumazet