From patchwork Fri Sep 21 15:51:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 973299 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="Bi0UoC7f"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42Gylf4VLhz9sCD for ; Sat, 22 Sep 2018 01:52:14 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390512AbeIUVll (ORCPT ); Fri, 21 Sep 2018 17:41:41 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:47026 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390320AbeIUVlk (ORCPT ); Fri, 21 Sep 2018 17:41:40 -0400 Received: by mail-pl1-f193.google.com with SMTP id t20-v6so2710015ply.13 for ; Fri, 21 Sep 2018 08:52:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q5PwJ94hhI+3Gk2VgqSLl0/t1bavBXPLRy+BX2VNDE0=; b=Bi0UoC7f1ca7UZ1YY10WiCvqicjwQqcUeWEwSVCjkQQW7zGFkDnqlEyI2MX6i+2fjo JZKKapElRYaKT+6LCAVdA91fIKNvPGwhS8E7vuqDEn7HhJOl7EC0iWgZzFeFcLZJ4qBM 6BIDVSQy3mt5ComBgu5ALrzUd5yQKcHwljr/5mIQIem02O7Ait8m/3EBN4fIK4uFqcNb Xg0hE9FZr3xrYWQQbf9tuzeVjwNZ3jbAT0PsVzJkeNb7tqjRoQXpDO+5I+QtOrBhOoH9 2sJHQk4dfgNoUzk5ukbMwyrQHzYkp2C66vlT3Kp+j2vSPG6J3Zaj54MFZRRIqJhxCff5 L3NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q5PwJ94hhI+3Gk2VgqSLl0/t1bavBXPLRy+BX2VNDE0=; b=Ma8ClEwPoO0hoXHppRUXL1/LKQ4SiYwbt47A2Bv59GAP39IPxHQSCf6aiXXWuxuBmL Tm61G8m2jVH0zk2qA8Mbtw5CkAp/WGk9ZbjZgtiZgHiJMbSwdP2tmomywJinRrqOHlnJ 50NHRFit2100SwNi+JxCPdtdNXoubdPhcLP0mN6GFWSJLhWF8mx9+BHxh89AJfJ17swe N5Dsqw1O4uJ+l4ypMTjZz56lo9opL++2BLKCDHWqyydqxpkuKbkRgG5vcS37RRrh6xtw bzGqnE3DbdoQ2jgT60beSJ3OkMPxYCFLK/jr/y+avAw8RsbAStjCUlvn/mmDEX7zswpP BNWA== X-Gm-Message-State: APzg51ATsZ0F3CsIWU00Iv7NMQFccZIMbvB2SnU6orfyujshtCv/HCFt PujrLBDWboXxwUgN0RDjUUOzyIlenfw= X-Google-Smtp-Source: ANB0VdYN9AmbCgMKyODDvi8BxoMroHQp5wmDFaGEclXJNGtGOIny5rLkIffM1Krfr/mNSmRxXhhA2w== X-Received: by 2002:a17:902:a504:: with SMTP id s4-v6mr46222422plq.101.1537545130472; Fri, 21 Sep 2018 08:52:10 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:f5a:7eca:440a:3ead]) by smtp.gmail.com with ESMTPSA id o20-v6sm72683088pfj.35.2018.09.21.08.52.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 21 Sep 2018 08:52:09 -0700 (PDT) From: Eric Dumazet To: "David S . Miller" Cc: netdev , Van Jacobson , Neal Cardwell , Yuchung Cheng , Soheil Hassas Yeganeh , Willem de Bruijn , Eric Dumazet , Eric Dumazet Subject: [PATCH net-next 8/9] tcp: switch tcp_internal_pacing() to tcp_wstamp_ns Date: Fri, 21 Sep 2018 08:51:53 -0700 Message-Id: <20180921155154.49489-9-edumazet@google.com> X-Mailer: git-send-email 2.19.0.444.g18242da7ef-goog In-Reply-To: <20180921155154.49489-1-edumazet@google.com> References: <20180921155154.49489-1-edumazet@google.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Now TCP keeps track of tcp_wstamp_ns, recording the earliest departure time of next packet, we can remove duplicate code from tcp_internal_pacing() This removes one ktime_get_tai_ns() call, and a divide. Signed-off-by: Eric Dumazet --- net/ipv4/tcp_output.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 2adb719e97b89021becfa1243d33c87df6cdf8a5..fe7855b090e4feed6a7d1ba6ee874cdb23a9bd0c 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -993,21 +993,12 @@ enum hrtimer_restart tcp_pace_kick(struct hrtimer *timer) return HRTIMER_NORESTART; } -static void tcp_internal_pacing(struct sock *sk, const struct sk_buff *skb) +static void tcp_internal_pacing(struct sock *sk) { - u64 len_ns; - u32 rate; - if (!tcp_needs_internal_pacing(sk)) return; - rate = sk->sk_pacing_rate; - if (!rate || rate == ~0U) - return; - - len_ns = (u64)skb->len * NSEC_PER_SEC; - do_div(len_ns, rate); hrtimer_start(&tcp_sk(sk)->pacing_timer, - ktime_add_ns(ktime_get_tai_ns(), len_ns), + ns_to_ktime(tcp_sk(sk)->tcp_wstamp_ns), HRTIMER_MODE_ABS_PINNED_SOFT); sock_hold(sk); } @@ -1026,7 +1017,8 @@ static void tcp_update_skb_after_send(struct sock *sk, struct sk_buff *skb) */ if (rate != ~0U && rate && tp->data_segs_out >= 10) { tp->tcp_wstamp_ns += div_u64((u64)skb->len * NSEC_PER_SEC, rate); - /* TODO: update internal pacing here */ + + tcp_internal_pacing(sk); } } list_move_tail(&skb->tcp_tsorted_anchor, &tp->tsorted_sent_queue); @@ -1167,7 +1159,6 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, tcp_event_data_sent(tp, sk); tp->data_segs_out += tcp_skb_pcount(skb); tp->bytes_sent += skb->len - tcp_header_size; - tcp_internal_pacing(sk, skb); } if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq)