]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
net: snmp: add statistics for tcp small queue check
authorMenglong Dong <imagedong@tencent.com>
Sun, 28 Nov 2021 06:01:02 +0000 (14:01 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 29 Nov 2021 13:05:47 +0000 (13:05 +0000)
Once tcp small queue check failed in tcp_small_queue_check(), the
throughput of tcp will be limited, and it's hard to distinguish
whether it is out of tcp congestion control.

Add statistics of LINUX_MIB_TCPSMALLQUEUEFAILURE for this scene.

Signed-off-by: Menglong Dong <imagedong@tencent.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 904909d020e2c8974128392370540c0ba3af4e15..e32ec6932e8200fbc9e1f27d00bd43e7b34633d4 100644 (file)
@@ -292,6 +292,7 @@ enum
        LINUX_MIB_TCPDSACKIGNOREDDUBIOUS,       /* TCPDSACKIgnoredDubious */
        LINUX_MIB_TCPMIGRATEREQSUCCESS,         /* TCPMigrateReqSuccess */
        LINUX_MIB_TCPMIGRATEREQFAILURE,         /* TCPMigrateReqFailure */
+       LINUX_MIB_TCPSMALLQUEUEFAILURE,         /* TCPSmallQueueFailure */
        __LINUX_MIB_MAX
 };
 
index f30273afb5399ddf0122e46e36da2ddae720a1c3..43b7a77cd6b4588cc10150613cf05154640d679f 100644 (file)
@@ -297,6 +297,7 @@ static const struct snmp_mib snmp4_net_list[] = {
        SNMP_MIB_ITEM("TCPDSACKIgnoredDubious", LINUX_MIB_TCPDSACKIGNOREDDUBIOUS),
        SNMP_MIB_ITEM("TCPMigrateReqSuccess", LINUX_MIB_TCPMIGRATEREQSUCCESS),
        SNMP_MIB_ITEM("TCPMigrateReqFailure", LINUX_MIB_TCPMIGRATEREQFAILURE),
+       SNMP_MIB_ITEM("TCPSmallQueueFailure", LINUX_MIB_TCPSMALLQUEUEFAILURE),
        SNMP_MIB_SENTINEL
 };
 
index 5079832af5c1090917a8fd5dfb1a3025e2d85ae0..c4ab6c8f0c77d32e1c4e7e558a6a0f0aa17a5986 100644 (file)
@@ -2524,8 +2524,11 @@ static bool tcp_small_queue_check(struct sock *sk, const struct sk_buff *skb,
                 * test again the condition.
                 */
                smp_mb__after_atomic();
-               if (refcount_read(&sk->sk_wmem_alloc) > limit)
+               if (refcount_read(&sk->sk_wmem_alloc) > limit) {
+                       NET_INC_STATS(sock_net(sk),
+                                     LINUX_MIB_TCPSMALLQUEUEFAILURE);
                        return true;
+               }
        }
        return false;
 }