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); }