From patchwork Wed Aug 1 00:46:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 951866 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="b3U6sioB"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41gF4K1Qv0z9s3Z for ; Wed, 1 Aug 2018 10:46:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732919AbeHAC3d (ORCPT ); Tue, 31 Jul 2018 22:29:33 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:46411 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732804AbeHAC3d (ORCPT ); Tue, 31 Jul 2018 22:29:33 -0400 Received: by mail-pf1-f194.google.com with SMTP id u24-v6so6908260pfn.13 for ; Tue, 31 Jul 2018 17:46:39 -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=l5R+I+yTxu35bdWQcoW/ifi2wgh3Is4FrzHoccWNhMw=; b=b3U6sioBnWTLqosEXh8hcUcZ2FZ3rI3n/hkUCDX2TAFK/y6EDmQWpjzmKutRPkyaLm att2jV9+bSiClmCUCX3LaL1HgL9Z+EZyfuDhzOTxZGKPwjUNCrREEasGH/9te2lUuRLu o52GTUpR+ACLAoZp9gbdWhYHSQFrmccdkmFyyixi3SlZXJkjeApiBAOlo9kL0sGAwamU /AkOEDMpg0nOFWaRhm6qPvyT35i7ctRzLtGjiYoDhTIokHZCPHtPDKba43STGMPs6c69 +XtfqsgaMIgHWzNqyaVp1AXr5SwnVe/B28oC6+id7Mildon/sjmBp9yFaN8PZWgDLhvF 0nDg== 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=l5R+I+yTxu35bdWQcoW/ifi2wgh3Is4FrzHoccWNhMw=; b=SBAdURMBJYyzJxOa8Pr8vZam3fyUlUaFe43tx+L/iOaAvjzrjHTgaKksU4NmrVNDY1 SpDAZyATJTSoitAe7M4/4DEDORrujgCOQUZoor9siVGlpe4Alb0Ra+J9A6Qz5r/mx3HW CQPpd25pli+FDDqekNZzAvxRjfhOToVGqGRYihWAVhMoXG3S6kpIFax0s2VDASSzt7C3 vdhr7D3LWnUT6GwVtY0caVj6p/dNe9xC8E8c6kyhh1XsnaV/m5d96KwFcOtDRRzsc/Yp C6NqD4J+BRuSjO2Z5xTntmDjJwmJCsqPNzc/wlOoFJyGnqsbgfSkz2MSQaRYXUACasse XaIQ== X-Gm-Message-State: AOUpUlEApwGJ4Xhp6sXxJIqfjEObAACbYuW04reb55J1l3Tfcvk8Y0b9 pnxwL5srxLbvi+TCKWNVm3n/TMymsYkh8g== X-Google-Smtp-Source: AAOMgpd7rCaopfY3qs6QovmMkQPcRvMGf0wfyza+dTKfpMcGTruwApw8aBub5LR7pYBpEyUIRV4kiQ== X-Received: by 2002:a62:106:: with SMTP id 6-v6mr5553542pfb.168.1533084398289; Tue, 31 Jul 2018 17:46:38 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:9310:64cb:677b:dcba]) by smtp.gmail.com with ESMTPSA id p66-v6sm27587797pfd.65.2018.07.31.17.46.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 31 Jul 2018 17:46:37 -0700 (PDT) From: Wei Wang X-Google-Original-From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Neal Cardwell , Soheil Hassas Yeganeh , Yuchung Cheng , Wei Wang Subject: [PATCH v2 net-next 1/5] tcp: add a helper to calculate size of opt_stats Date: Tue, 31 Jul 2018 17:46:20 -0700 Message-Id: <20180801004624.154346-2-tracywwnj@gmail.com> X-Mailer: git-send-email 2.18.0.597.ga71716f1ad-goog In-Reply-To: <20180801004624.154346-1-tracywwnj@gmail.com> References: <20180801004624.154346-1-tracywwnj@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Wei Wang This is to refactor the calculation of the size of opt_stats to a helper function to make the code cleaner and easier for later changes. Suggested-by: Stephen Hemminger Signed-off-by: Wei Wang Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Acked-by: Soheil Hassas Yeganeh Acked-by: Yuchung Cheng --- net/ipv4/tcp.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index f3bfb9f29520..27bbe6a792b7 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -3205,6 +3205,29 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) } EXPORT_SYMBOL_GPL(tcp_get_info); +static size_t tcp_opt_stats_get_size(void) +{ + return + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BUSY */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_RWND_LIMITED */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_SNDBUF_LIMITED */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_DATA_SEGS_OUT */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_TOTAL_RETRANS */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_PACING_RATE */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_DELIVERY_RATE */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_SND_CWND */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_REORDERING */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_MIN_RTT */ + nla_total_size(sizeof(u8)) + /* TCP_NLA_RECUR_RETRANS */ + nla_total_size(sizeof(u8)) + /* TCP_NLA_DELIVERY_RATE_APP_LMT */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_SNDQ_SIZE */ + nla_total_size(sizeof(u8)) + /* TCP_NLA_CA_STATE */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_SND_SSTHRESH */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED_CE */ + 0; +} + struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk) { const struct tcp_sock *tp = tcp_sk(sk); @@ -3213,9 +3236,7 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk) u64 rate64; u32 rate; - stats = alloc_skb(7 * nla_total_size_64bit(sizeof(u64)) + - 7 * nla_total_size(sizeof(u32)) + - 3 * nla_total_size(sizeof(u8)), GFP_ATOMIC); + stats = alloc_skb(tcp_opt_stats_get_size(), GFP_ATOMIC); if (!stats) return NULL; From patchwork Wed Aug 1 00:46:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 951868 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="QsaEnSdr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41gF4M59Qvz9s3q for ; Wed, 1 Aug 2018 10:46:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732932AbeHAC3f (ORCPT ); Tue, 31 Jul 2018 22:29:35 -0400 Received: from mail-pg1-f196.google.com ([209.85.215.196]:46225 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732804AbeHAC3f (ORCPT ); Tue, 31 Jul 2018 22:29:35 -0400 Received: by mail-pg1-f196.google.com with SMTP id p23-v6so9890609pgv.13 for ; Tue, 31 Jul 2018 17:46:41 -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=JEHjkEBO4/GZ+xHu+jryMQZX19cIV8cbmWhL/suWwjA=; b=QsaEnSdriKI0m7EnQnnm55Bt77cXl+NLRPtgx5epiCLj5QyM4GT074IkGYN+UcJOKh diCxliOsgFeIdYFB/Sj6RyYzgbpS6ffVMXwOQRYh5qkDt3e4B3ZNz06KXAencyzW9zii mz5BkDYRLoRtCdeF/ZTgF8v69NYJEUhc4xMZicxjsHfGrw/N/7YfkPPtAwiObjyJbqFK zAFZ7AwEaojLslea9be8i2HuD5rfiwx2WS4GYPDzLxN5/0WAdPFHIs+HQvd5mx5P2LnS n8taofmgMay1B1oXt5gxm6OzZNoSxpxAJC5LZHk3WfkddCFu0xZNcoMM2Gq93yxaqNL9 oYcg== 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=JEHjkEBO4/GZ+xHu+jryMQZX19cIV8cbmWhL/suWwjA=; b=ptRZjcB2hWuV7+pc//avF2v5/3+q0ZWI1K/oBNa2L6+rfwHwuAqEA3bZeWX40oEhJO KzIqkSoZT5oqpc+Wz27PqjUJh/6lLpIYZKPAGsDkpj8hRT+Shsisne9Y1LV0sw6GEAQ5 TNcEV6bPGOJL2yLp+qIe9ojj0aLIUb1jWtOHfUYfV0QWXdG0EUH8ntrOBf6BO4fS4Or4 s50bLNAVYiu1ITkU9c+ttSHLgoBr68BMuMNtNSrN5bUOW+DA9lpe6P573lqWpSSYKl7J mqHFFLwE/VoH2abp5ZawmZjDV0pYJ+PSUBc0Oq8yJmQjoVCehHmxLUsRzPGFSaugnCNE cIMA== X-Gm-Message-State: AOUpUlGP5TfGFKjWkms6XQ1b6V3S1YxixVdIjI0Zl6MHcjhDhpZLbxb+ xskHh0zpDW+q/wP4gH8nITs6Sg== X-Google-Smtp-Source: AAOMgpfO/dfHMPxRtDeUszZFABNxop3dQdB3b06I4vsP2LkV8+cVS11f/02C/7PL+F6uoFCnhtG79A== X-Received: by 2002:a63:e811:: with SMTP id s17-v6mr13568462pgh.176.1533084401024; Tue, 31 Jul 2018 17:46:41 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:9310:64cb:677b:dcba]) by smtp.gmail.com with ESMTPSA id u83-v6sm2604332pfj.37.2018.07.31.17.46.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 31 Jul 2018 17:46:40 -0700 (PDT) From: Wei Wang X-Google-Original-From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Neal Cardwell , Soheil Hassas Yeganeh , Yuchung Cheng , Wei Wang Subject: [PATCH v2 net-next 2/5] tcp: add data bytes sent stats Date: Tue, 31 Jul 2018 17:46:21 -0700 Message-Id: <20180801004624.154346-3-tracywwnj@gmail.com> X-Mailer: git-send-email 2.18.0.597.ga71716f1ad-goog In-Reply-To: <20180801004624.154346-2-tracywwnj@gmail.com> References: <20180801004624.154346-1-tracywwnj@gmail.com> <20180801004624.154346-2-tracywwnj@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Wei Wang Introduce a new TCP stat to record the number of bytes sent (RFC4898 tcpEStatsPerfHCDataOctetsOut) and expose it in both tcp_info (TCP_INFO) and opt_stats (SOF_TIMESTAMPING_OPT_STATS). Signed-off-by: Wei Wang Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Acked-by: Soheil Hassas Yeganeh Acked-by: Yuchung Cheng --- include/linux/tcp.h | 3 +++ include/uapi/linux/tcp.h | 4 +++- net/ipv4/tcp.c | 6 ++++++ net/ipv4/tcp_output.c | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 58a8d7d71354..d0798dcd2cab 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -181,6 +181,9 @@ struct tcp_sock { u32 data_segs_out; /* RFC4898 tcpEStatsPerfDataSegsOut * total number of data segments sent. */ + u64 bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut + * total number of data bytes sent. + */ u64 bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked * sum(delta(snd_una)), or how many bytes * were acked. diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index e3f6ed8a7064..1c70ed287c3b 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h @@ -235,6 +235,8 @@ struct tcp_info { __u32 tcpi_delivered; __u32 tcpi_delivered_ce; + + __u64 tcpi_bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut */ }; /* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */ @@ -257,7 +259,7 @@ enum { TCP_NLA_SND_SSTHRESH, /* Slow start size threshold */ TCP_NLA_DELIVERED, /* Data pkts delivered incl. out-of-order */ TCP_NLA_DELIVERED_CE, /* Like above but only ones w/ CE marks */ - + TCP_NLA_BYTES_SENT, /* Data bytes sent including retransmission */ }; /* for TCP_MD5SIG socket option */ diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 27bbe6a792b7..873cb9968ff5 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2594,6 +2594,7 @@ int tcp_disconnect(struct sock *sk, int flags) sk->sk_rx_dst = NULL; tcp_saved_syn_free(tp); tp->compressed_ack = 0; + tp->bytes_sent = 0; /* Clean up fastopen related fields */ tcp_free_fastopen_req(tp); @@ -3201,6 +3202,7 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) info->tcpi_delivery_rate = rate64; info->tcpi_delivered = tp->delivered; info->tcpi_delivered_ce = tp->delivered_ce; + info->tcpi_bytes_sent = tp->bytes_sent; unlock_sock_fast(sk, slow); } EXPORT_SYMBOL_GPL(tcp_get_info); @@ -3225,6 +3227,7 @@ static size_t tcp_opt_stats_get_size(void) nla_total_size(sizeof(u32)) + /* TCP_NLA_SND_SSTHRESH */ nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED */ nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED_CE */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_SENT */ 0; } @@ -3272,6 +3275,9 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk) nla_put_u32(stats, TCP_NLA_SNDQ_SIZE, tp->write_seq - tp->snd_una); nla_put_u8(stats, TCP_NLA_CA_STATE, inet_csk(sk)->icsk_ca_state); + nla_put_u64_64bit(stats, TCP_NLA_BYTES_SENT, tp->bytes_sent, + TCP_NLA_PAD); + return stats; } diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 490df62f26d4..861531fe0e97 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1136,6 +1136,7 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, if (skb->len != tcp_header_size) { 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); } From patchwork Wed Aug 1 00:46:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 951869 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="Hb3IGAVG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41gF4Q5mQ7z9s0R for ; Wed, 1 Aug 2018 10:46:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732939AbeHAC3j (ORCPT ); Tue, 31 Jul 2018 22:29:39 -0400 Received: from mail-pl0-f65.google.com ([209.85.160.65]:39311 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732804AbeHAC3i (ORCPT ); Tue, 31 Jul 2018 22:29:38 -0400 Received: by mail-pl0-f65.google.com with SMTP id m1-v6so7908747plt.6 for ; Tue, 31 Jul 2018 17:46:44 -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=oNRoXu0KF1XTz0ts3xeXSdWz15P+yFYRKM8AkPWO3Zs=; b=Hb3IGAVGX9VZEV6Inyu2WKcAgpMT6axipGokIyzSF8kfo3aMiVUpVrFgLOHu3+quLO A2Q/Sdn0RPcwEL8QIb/fmhtotFu7wi/Ry4D8sjgpGFP8EkJ7EW2cBlSMtfh7qnT8tUho 05rC1ME4Rw/MMP0VrfZpJM0Z22Z0GhRGWXEBMnP5/QpfFV4NjH2xzNjSmkY4vwBTkl7w FejNulc1uQDWH8rlgYAp8GHfSKPvDkgIQh9YgeUIA/QfJBKQ8gP7zKet6fEHliksgF6w 0nfg+cIqaQCxJUTKCqvsBkkBHN2cXufyb398EXpDJixj4Q6M3Q4L8IBJa3lILZL+KlVD yRwQ== 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=oNRoXu0KF1XTz0ts3xeXSdWz15P+yFYRKM8AkPWO3Zs=; b=bQcQmKK+KLxdpwaMJIubDRqeoIzLQANaX/xR2GboxREbcahdzcAfRDAeJ4f6jw5pcg j2bVPAA6tg68VZRSPkIF4wbi6xLyAj+TZ0QFHyFRX9Sgdo2t8YhFdkTNTI//y+sEB1P8 Lj+r5tal++Q2Fa7x0T7yPM9LwKfwbYUBnoe09Rkd4EtTxfNXaDI9V2i/E3F+/Hm0bTpf NhdnP+jlwV+/ndSOrqkjZitbqitiS56IGvslWhsL+1tgdu7qZg/OxE0P0ze401pCpgLG NX6RwW44GqDeqlRt/Rk0ugqonK3MYApw/JzdMEvrkvITSwiAhenIHPhg/otxjFC1A+uL c7dQ== X-Gm-Message-State: AOUpUlEXiieyS3qPcSDjDYGUk0e0ERDNROBe5NQ2Z0SrUd6nKqh0Vesc MIqvpQ6+1aUQ0ed36xZIRewEug== X-Google-Smtp-Source: AAOMgpd04Rq2emE5J6NpmZQU9QmMsCdxP/kMkhunJL8DZz50TWGmQM+njP+K6Jf4Cd0E5lFzG8vYMA== X-Received: by 2002:a17:902:1121:: with SMTP id d30-v6mr22854740pla.247.1533084403918; Tue, 31 Jul 2018 17:46:43 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:9310:64cb:677b:dcba]) by smtp.gmail.com with ESMTPSA id k26-v6sm43037819pfb.167.2018.07.31.17.46.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 31 Jul 2018 17:46:43 -0700 (PDT) From: Wei Wang X-Google-Original-From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Neal Cardwell , Soheil Hassas Yeganeh , Yuchung Cheng , Wei Wang Subject: [PATCH v2 net-next 3/5] tcp: add data bytes retransmitted stats Date: Tue, 31 Jul 2018 17:46:22 -0700 Message-Id: <20180801004624.154346-4-tracywwnj@gmail.com> X-Mailer: git-send-email 2.18.0.597.ga71716f1ad-goog In-Reply-To: <20180801004624.154346-3-tracywwnj@gmail.com> References: <20180801004624.154346-1-tracywwnj@gmail.com> <20180801004624.154346-2-tracywwnj@gmail.com> <20180801004624.154346-3-tracywwnj@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Wei Wang Introduce a new TCP stat to record the number of bytes retransmitted (RFC4898 tcpEStatsPerfOctetsRetrans) and expose it in both tcp_info (TCP_INFO) and opt_stats (SOF_TIMESTAMPING_OPT_STATS). Signed-off-by: Wei Wang Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Acked-by: Soheil Hassas Yeganeh Acked-by: Yuchung Cheng --- include/linux/tcp.h | 3 +++ include/uapi/linux/tcp.h | 2 ++ net/ipv4/tcp.c | 5 +++++ net/ipv4/tcp_output.c | 1 + 4 files changed, 11 insertions(+) diff --git a/include/linux/tcp.h b/include/linux/tcp.h index d0798dcd2cab..fb67f9a51b95 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -333,6 +333,9 @@ struct tcp_sock { * the first SYN. */ u32 undo_marker; /* snd_una upon a new recovery episode. */ int undo_retrans; /* number of undoable retransmissions. */ + u64 bytes_retrans; /* RFC4898 tcpEStatsPerfOctetsRetrans + * Total data bytes retransmitted + */ u32 total_retrans; /* Total retransmits for entire connection */ u32 urg_seq; /* Seq of received urgent pointer */ diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index 1c70ed287c3b..c31f5100b744 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h @@ -237,6 +237,7 @@ struct tcp_info { __u32 tcpi_delivered_ce; __u64 tcpi_bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut */ + __u64 tcpi_bytes_retrans; /* RFC4898 tcpEStatsPerfOctetsRetrans */ }; /* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */ @@ -260,6 +261,7 @@ enum { TCP_NLA_DELIVERED, /* Data pkts delivered incl. out-of-order */ TCP_NLA_DELIVERED_CE, /* Like above but only ones w/ CE marks */ TCP_NLA_BYTES_SENT, /* Data bytes sent including retransmission */ + TCP_NLA_BYTES_RETRANS, /* Data bytes retransmitted */ }; /* for TCP_MD5SIG socket option */ diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 873cb9968ff5..5ed1be88e922 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2595,6 +2595,7 @@ int tcp_disconnect(struct sock *sk, int flags) tcp_saved_syn_free(tp); tp->compressed_ack = 0; tp->bytes_sent = 0; + tp->bytes_retrans = 0; /* Clean up fastopen related fields */ tcp_free_fastopen_req(tp); @@ -3203,6 +3204,7 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) info->tcpi_delivered = tp->delivered; info->tcpi_delivered_ce = tp->delivered_ce; info->tcpi_bytes_sent = tp->bytes_sent; + info->tcpi_bytes_retrans = tp->bytes_retrans; unlock_sock_fast(sk, slow); } EXPORT_SYMBOL_GPL(tcp_get_info); @@ -3228,6 +3230,7 @@ static size_t tcp_opt_stats_get_size(void) nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED */ nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED_CE */ nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_SENT */ + nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_RETRANS */ 0; } @@ -3277,6 +3280,8 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk) nla_put_u64_64bit(stats, TCP_NLA_BYTES_SENT, tp->bytes_sent, TCP_NLA_PAD); + nla_put_u64_64bit(stats, TCP_NLA_BYTES_RETRANS, tp->bytes_retrans, + TCP_NLA_PAD); return stats; } diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 861531fe0e97..50cabf7656f3 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2871,6 +2871,7 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs) if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_SYN) __NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPSYNRETRANS); tp->total_retrans += segs; + tp->bytes_retrans += skb->len; /* make sure skb->data is aligned on arches that require it * and check if ack-trimming & collapsing extended the headroom From patchwork Wed Aug 1 00:46:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 951870 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="sbAspIg8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41gF4T0z4Vz9s0R for ; Wed, 1 Aug 2018 10:46:49 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732943AbeHAC3l (ORCPT ); Tue, 31 Jul 2018 22:29:41 -0400 Received: from mail-pf1-f173.google.com ([209.85.210.173]:37022 "EHLO mail-pf1-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732804AbeHAC3l (ORCPT ); Tue, 31 Jul 2018 22:29:41 -0400 Received: by mail-pf1-f173.google.com with SMTP id a26-v6so6917983pfo.4 for ; Tue, 31 Jul 2018 17:46:47 -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=dJoPayjtoTzKzpnQmaYGEmQMKtJJBJUjjl4hYczkUfA=; b=sbAspIg8BdGu8+5DOzeDh+84qG5CPCq3i6MIP0r5F6aba0cIK8Wy3Nb3CNFOSQfWFG gAGlK3ZDdsVtxQS89z2EYNLpD2eF/9dt/pmUGFGVID4bJt3EXT/MweABitwqRH5EFsbm NQQJftVYvujTwanxFfFrUqtJpBgYb7bujB1DtqdlIn017MB3V5RpAdfjMmwQVHJbHP91 EbQTqEtFrNZhfDcEo9158cZJaQJWqg+IHI6Fdlhqd93+WRdJhvEbiYuzUNrVCehX4Z8d 2pmdYWnal09QUeJ5L76NMJsF/6XxEbz0s17Xe83OWG1ZLlWjZFQ9aQpP8pL5441fb3jW TaeQ== 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=dJoPayjtoTzKzpnQmaYGEmQMKtJJBJUjjl4hYczkUfA=; b=ifdsWY+MMl0exzoSy9rXpNME9IJJ1GAcygOzuNwUxoaRd6sjWqYsMI6Dw3QcT8s7XL n04o9VCenc2A8skQm6HWwk8Zkas+yhlooIw3dqK+6VhizAls6h7VOgHtYdLLHDUJ9vuI ssWG2RPnxn/1w+Xgoi7esdpwyqmxuh8AzQdYXFruyWBq/6YFOuFYXVKtt9NcC5xJb45D 3COATa+MDCBupfEuRHgGDkaqkSQV7Gr6GIu7eX4RIbzFkxHRu3vdN/3erEyMFvxO51ZD v4lLvqhVtOWczGPVSfne/jP3m/3lrYFJuBZT0lX2UjRhLDzKeDJD0PblAR2mzSVqzEiw kw4g== X-Gm-Message-State: AOUpUlFOyNdihuK9TckFXk5veO7b/nGz3uQ8fD5as8bO4EbdsR/PZkC1 LLbkc08z3DjxVZfGZI8BJFMIwfCZWusX9g== X-Google-Smtp-Source: AAOMgpdUkA4SdfBu0uR/WDkMddS4jbaiOgv563RAJvcZ5Lm98T6XfkT6G6xHmdrFp67xmFZfVRhhPg== X-Received: by 2002:a62:b20c:: with SMTP id x12-v6mr24845236pfe.64.1533084406254; Tue, 31 Jul 2018 17:46:46 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:9310:64cb:677b:dcba]) by smtp.gmail.com with ESMTPSA id y3-v6sm44554826pfi.24.2018.07.31.17.46.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 31 Jul 2018 17:46:45 -0700 (PDT) From: Wei Wang X-Google-Original-From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Neal Cardwell , Soheil Hassas Yeganeh , Yuchung Cheng , Wei Wang Subject: [PATCH v2 net-next 4/5] tcp: add dsack blocks received stats Date: Tue, 31 Jul 2018 17:46:23 -0700 Message-Id: <20180801004624.154346-5-tracywwnj@gmail.com> X-Mailer: git-send-email 2.18.0.597.ga71716f1ad-goog In-Reply-To: <20180801004624.154346-4-tracywwnj@gmail.com> References: <20180801004624.154346-1-tracywwnj@gmail.com> <20180801004624.154346-2-tracywwnj@gmail.com> <20180801004624.154346-3-tracywwnj@gmail.com> <20180801004624.154346-4-tracywwnj@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Wei Wang Introduce a new TCP stat to record the number of DSACK blocks received (RFC4989 tcpEStatsStackDSACKDups) and expose it in both tcp_info (TCP_INFO) and opt_stats (SOF_TIMESTAMPING_OPT_STATS). Signed-off-by: Wei Wang Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Acked-by: Soheil Hassas Yeganeh Acked-by: Yuchung Cheng --- include/linux/tcp.h | 3 +++ include/uapi/linux/tcp.h | 2 ++ net/ipv4/tcp.c | 4 ++++ net/ipv4/tcp_input.c | 1 + 4 files changed, 10 insertions(+) diff --git a/include/linux/tcp.h b/include/linux/tcp.h index fb67f9a51b95..da6281c549a5 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -188,6 +188,9 @@ struct tcp_sock { * sum(delta(snd_una)), or how many bytes * were acked. */ + u32 dsack_dups; /* RFC4898 tcpEStatsStackDSACKDups + * total number of DSACK blocks received + */ u32 snd_una; /* First byte we want an ack for */ u32 snd_sml; /* Last byte of the most recently transmitted small packet */ u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index c31f5100b744..0e1c0aec0153 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h @@ -238,6 +238,7 @@ struct tcp_info { __u64 tcpi_bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut */ __u64 tcpi_bytes_retrans; /* RFC4898 tcpEStatsPerfOctetsRetrans */ + __u32 tcpi_dsack_dups; /* RFC4898 tcpEStatsStackDSACKDups */ }; /* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */ @@ -262,6 +263,7 @@ enum { TCP_NLA_DELIVERED_CE, /* Like above but only ones w/ CE marks */ TCP_NLA_BYTES_SENT, /* Data bytes sent including retransmission */ TCP_NLA_BYTES_RETRANS, /* Data bytes retransmitted */ + TCP_NLA_DSACK_DUPS, /* DSACK blocks received */ }; /* for TCP_MD5SIG socket option */ diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 5ed1be88e922..d6232b598cae 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2596,6 +2596,7 @@ int tcp_disconnect(struct sock *sk, int flags) tp->compressed_ack = 0; tp->bytes_sent = 0; tp->bytes_retrans = 0; + tp->dsack_dups = 0; /* Clean up fastopen related fields */ tcp_free_fastopen_req(tp); @@ -3205,6 +3206,7 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) info->tcpi_delivered_ce = tp->delivered_ce; info->tcpi_bytes_sent = tp->bytes_sent; info->tcpi_bytes_retrans = tp->bytes_retrans; + info->tcpi_dsack_dups = tp->dsack_dups; unlock_sock_fast(sk, slow); } EXPORT_SYMBOL_GPL(tcp_get_info); @@ -3231,6 +3233,7 @@ static size_t tcp_opt_stats_get_size(void) nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED_CE */ nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_SENT */ nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_RETRANS */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_DSACK_DUPS */ 0; } @@ -3282,6 +3285,7 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk) TCP_NLA_PAD); nla_put_u64_64bit(stats, TCP_NLA_BYTES_RETRANS, tp->bytes_retrans, TCP_NLA_PAD); + nla_put_u32(stats, TCP_NLA_DSACK_DUPS, tp->dsack_dups); return stats; } diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index d51fa358b2b1..fbc85ff7d71d 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -874,6 +874,7 @@ static void tcp_dsack_seen(struct tcp_sock *tp) { tp->rx_opt.sack_ok |= TCP_DSACK_SEEN; tp->rack.dsack_seen = 1; + tp->dsack_dups++; } /* It's reordering when higher sequence was delivered (i.e. sacked) before From patchwork Wed Aug 1 00:46:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 951871 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="FQZY3Ind"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41gF4Y4qqMz9s0R for ; Wed, 1 Aug 2018 10:46:53 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732951AbeHAC3q (ORCPT ); Tue, 31 Jul 2018 22:29:46 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:43305 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732804AbeHAC3p (ORCPT ); Tue, 31 Jul 2018 22:29:45 -0400 Received: by mail-pg1-f194.google.com with SMTP id d17-v6so5467581pgv.10 for ; Tue, 31 Jul 2018 17:46:51 -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=DExFV9bkTVdJWaXteh+K8fSnkWW5xnl2Jp81QT+E8PE=; b=FQZY3IndarbknqOvmjcF8MMXN4Jv5iSyanA8MI2m583YqXTwjVyO9wUYG+ZRXuprEZ VrhzwP/dtmPH8+VNfpYr9HDZx+CR3nhxKlYwXIofh3/4aT5as0Ky3vqjgTks9dggWcyo 91Sh5DE7SZCKo4DqH3vybRc4AAYmLKKT/fztAt3KSL/tRB/v1YCJ4fELZgb6jI7Ppe3I s/Rho1NnoxS16HOmbgASstz3uWk8A4DI7vtyXb1mf1beV4y+wD+mWHxnU56AzuBuMjhM EoU8180s40sXPde0DHXyPqkFvAq2AM6F40S/xUWFHVSI4W4t0GuC399nv2YnSPpITClk K+vg== 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=DExFV9bkTVdJWaXteh+K8fSnkWW5xnl2Jp81QT+E8PE=; b=jP4Usn+8uEb7CDwMzv3UAsJOdikyGAW/stUHQNNujqdMa5YnUgJXc3kGSZvDyJ3y3V 9UdzFu4xhgaq+QYF1cUGL4PvQracUcIiBSu/OFTsBboKA5bRcDjLmW05WZ8pgGlGZrLA QgYvYNsIO8wmxaxgxqwKKORkv1Gip8KIR7c5L14dZfSW8BW9Sy+7LgwnJQavUMkA5vMS EApUrBpZ4De24TMYLmtL4+f/2RAF14BG4M3JLCKnA9sj7XBowwWNb+BpkECxA3cq5JTi Co6akpLuuvxzhtn75UGQZ5H3jvpEHz5UQwpbg7A30K85HPbEoB1YoxuGkQna3d06W/bb YZ7Q== X-Gm-Message-State: AOUpUlEx37Dty7bogBtSZxS0rlS8YOKIoi3/+BCnje8Xc0CYnSNhw3OI N/vH8bdHToSlZo9xoqOElxURkQ== X-Google-Smtp-Source: AAOMgpeyDXRNnw65rmXmAdTH/k7fpxxk9for76qth10MTX1lLGNbRiZrYfH6ULiqFeoUE5ufpVndeA== X-Received: by 2002:a63:be4a:: with SMTP id g10-v6mr22204425pgo.378.1533084410946; Tue, 31 Jul 2018 17:46:50 -0700 (PDT) Received: from localhost ([2620:15c:2c4:201:9310:64cb:677b:dcba]) by smtp.gmail.com with ESMTPSA id a20-v6sm44354703pfc.14.2018.07.31.17.46.50 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 31 Jul 2018 17:46:50 -0700 (PDT) From: Wei Wang X-Google-Original-From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Neal Cardwell , Soheil Hassas Yeganeh , Yuchung Cheng , Wei Wang Subject: [PATCH v2 net-next 5/5] tcp: add stat of data packet reordering events Date: Tue, 31 Jul 2018 17:46:24 -0700 Message-Id: <20180801004624.154346-6-tracywwnj@gmail.com> X-Mailer: git-send-email 2.18.0.597.ga71716f1ad-goog In-Reply-To: <20180801004624.154346-5-tracywwnj@gmail.com> References: <20180801004624.154346-1-tracywwnj@gmail.com> <20180801004624.154346-2-tracywwnj@gmail.com> <20180801004624.154346-3-tracywwnj@gmail.com> <20180801004624.154346-4-tracywwnj@gmail.com> <20180801004624.154346-5-tracywwnj@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Wei Wang Introduce a new TCP stats to record the number of reordering events seen and expose it in both tcp_info (TCP_INFO) and opt_stats (SOF_TIMESTAMPING_OPT_STATS). Application can use this stats to track the frequency of the reordering events in addition to the existing reordering stats which tracks the magnitude of the latest reordering event. Note: this new stats tracks reordering events triggered by ACKs, which could often be fewer than the actual number of packets being delivered out-of-order. Signed-off-by: Wei Wang Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Acked-by: Soheil Hassas Yeganeh Acked-by: Yuchung Cheng --- include/linux/tcp.h | 4 ++-- include/uapi/linux/tcp.h | 2 ++ net/ipv4/tcp.c | 4 ++++ net/ipv4/tcp_input.c | 3 ++- net/ipv4/tcp_recovery.c | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/linux/tcp.h b/include/linux/tcp.h index da6281c549a5..263e37271afd 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -220,8 +220,7 @@ struct tcp_sock { #define TCP_RACK_RECOVERY_THRESH 16 u8 reo_wnd_persist:5, /* No. of recovery since last adj */ dsack_seen:1, /* Whether DSACK seen after last adj */ - advanced:1, /* mstamp advanced since last lost marking */ - reord:1; /* reordering detected */ + advanced:1; /* mstamp advanced since last lost marking */ } rack; u16 advmss; /* Advertised MSS */ u8 compressed_ack; @@ -267,6 +266,7 @@ struct tcp_sock { u8 ecn_flags; /* ECN status bits. */ u8 keepalive_probes; /* num of allowed keep alive probes */ u32 reordering; /* Packet reordering metric. */ + u32 reord_seen; /* number of data packet reordering events */ u32 snd_up; /* Urgent pointer */ /* diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index 0e1c0aec0153..e02d31986ff9 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h @@ -239,6 +239,7 @@ struct tcp_info { __u64 tcpi_bytes_sent; /* RFC4898 tcpEStatsPerfHCDataOctetsOut */ __u64 tcpi_bytes_retrans; /* RFC4898 tcpEStatsPerfOctetsRetrans */ __u32 tcpi_dsack_dups; /* RFC4898 tcpEStatsStackDSACKDups */ + __u32 tcpi_reord_seen; /* reordering events seen */ }; /* netlink attributes types for SCM_TIMESTAMPING_OPT_STATS */ @@ -264,6 +265,7 @@ enum { TCP_NLA_BYTES_SENT, /* Data bytes sent including retransmission */ TCP_NLA_BYTES_RETRANS, /* Data bytes retransmitted */ TCP_NLA_DSACK_DUPS, /* DSACK blocks received */ + TCP_NLA_REORD_SEEN, /* reordering events seen */ }; /* for TCP_MD5SIG socket option */ diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index d6232b598cae..31fa1c080f28 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2597,6 +2597,7 @@ int tcp_disconnect(struct sock *sk, int flags) tp->bytes_sent = 0; tp->bytes_retrans = 0; tp->dsack_dups = 0; + tp->reord_seen = 0; /* Clean up fastopen related fields */ tcp_free_fastopen_req(tp); @@ -3207,6 +3208,7 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) info->tcpi_bytes_sent = tp->bytes_sent; info->tcpi_bytes_retrans = tp->bytes_retrans; info->tcpi_dsack_dups = tp->dsack_dups; + info->tcpi_reord_seen = tp->reord_seen; unlock_sock_fast(sk, slow); } EXPORT_SYMBOL_GPL(tcp_get_info); @@ -3234,6 +3236,7 @@ static size_t tcp_opt_stats_get_size(void) nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_SENT */ nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_RETRANS */ nla_total_size(sizeof(u32)) + /* TCP_NLA_DSACK_DUPS */ + nla_total_size(sizeof(u32)) + /* TCP_NLA_REORD_SEEN */ 0; } @@ -3286,6 +3289,7 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk) nla_put_u64_64bit(stats, TCP_NLA_BYTES_RETRANS, tp->bytes_retrans, TCP_NLA_PAD); nla_put_u32(stats, TCP_NLA_DSACK_DUPS, tp->dsack_dups); + nla_put_u32(stats, TCP_NLA_REORD_SEEN, tp->reord_seen); return stats; } diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index fbc85ff7d71d..3d6156f07a8d 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -906,8 +906,8 @@ static void tcp_check_sack_reordering(struct sock *sk, const u32 low_seq, sock_net(sk)->ipv4.sysctl_tcp_max_reordering); } - tp->rack.reord = 1; /* This exciting event is worth to be remembered. 8) */ + tp->reord_seen++; NET_INC_STATS(sock_net(sk), ts ? LINUX_MIB_TCPTSREORDER : LINUX_MIB_TCPSACKREORDER); } @@ -1871,6 +1871,7 @@ static void tcp_check_reno_reordering(struct sock *sk, const int addend) tp->reordering = min_t(u32, tp->packets_out + addend, sock_net(sk)->ipv4.sysctl_tcp_max_reordering); + tp->reord_seen++; NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPRENOREORDER); } diff --git a/net/ipv4/tcp_recovery.c b/net/ipv4/tcp_recovery.c index 71593e4400ab..c81aadff769b 100644 --- a/net/ipv4/tcp_recovery.c +++ b/net/ipv4/tcp_recovery.c @@ -25,7 +25,7 @@ static u32 tcp_rack_reo_wnd(const struct sock *sk) { struct tcp_sock *tp = tcp_sk(sk); - if (!tp->rack.reord) { + if (!tp->reord_seen) { /* If reordering has not been observed, be aggressive during * the recovery or starting the recovery by DUPACK threshold. */