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; | 	limit <<= factor; | ||||||
| 
 | 
 | ||||||
| 	if (atomic_read(&sk->sk_wmem_alloc) > limit) { | 	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); | 		set_bit(TSQ_THROTTLED, &tcp_sk(sk)->tsq_flags); | ||||||
| 		/* It is possible TX completion already happened
 | 		/* It is possible TX completion already happened
 | ||||||
| 		 * before we set TSQ_THROTTLED, so we must | 		 * before we set TSQ_THROTTLED, so we must | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Eric Dumazet
						Eric Dumazet