OSDN Git Service

tcp: add TCPAckCompressed SNMP counter
authorEric Dumazet <edumazet@google.com>
Thu, 17 May 2018 21:47:27 +0000 (14:47 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 May 2018 15:40:27 +0000 (11:40 -0400)
This counter tracks number of ACK packets that the host has not sent,
thanks to ACK compression.

Sample output :

$ nstat -n;sleep 1;nstat|egrep "IpInReceives|IpOutRequests|TcpInSegs|TcpOutSegs|TcpExtTCPAckCompressed"
IpInReceives                    123250             0.0
IpOutRequests                   3684               0.0
TcpInSegs                       123251             0.0
TcpOutSegs                      3684               0.0
TcpExtTCPAckCompressed          119252             0.0

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/snmp.h
net/ipv4/proc.c
net/ipv4/tcp_output.c

index d02e859..750d891 100644 (file)
@@ -278,6 +278,7 @@ enum
        LINUX_MIB_TCPMTUPSUCCESS,               /* TCPMTUPSuccess */
        LINUX_MIB_TCPDELIVERED,                 /* TCPDelivered */
        LINUX_MIB_TCPDELIVEREDCE,               /* TCPDeliveredCE */
+       LINUX_MIB_TCPACKCOMPRESSED,             /* TCPAckCompressed */
        __LINUX_MIB_MAX
 };
 
index 261b71d..6c1ff89 100644 (file)
@@ -298,6 +298,7 @@ static const struct snmp_mib snmp4_net_list[] = {
        SNMP_MIB_ITEM("TCPMTUPSuccess", LINUX_MIB_TCPMTUPSUCCESS),
        SNMP_MIB_ITEM("TCPDelivered", LINUX_MIB_TCPDELIVERED),
        SNMP_MIB_ITEM("TCPDeliveredCE", LINUX_MIB_TCPDELIVEREDCE),
+       SNMP_MIB_ITEM("TCPAckCompressed", LINUX_MIB_TCPACKCOMPRESSED),
        SNMP_MIB_SENTINEL
 };
 
index 7ee98aa..437bb7c 100644 (file)
@@ -165,6 +165,8 @@ static inline void tcp_event_ack_sent(struct sock *sk, unsigned int pkts)
        struct tcp_sock *tp = tcp_sk(sk);
 
        if (unlikely(tp->compressed_ack)) {
+               NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPACKCOMPRESSED,
+                             tp->compressed_ack);
                tp->compressed_ack = 0;
                if (hrtimer_try_to_cancel(&tp->compressed_ack_timer) == 1)
                        __sock_put(sk);