The receive-window work now depends on keeping sender-visible rwnd and
hard receive-memory accounting aligned.

Expose the current rmem charge and backlog reservation in the TCP and
MPTCP rcvbuf_grow tracepoints so that later drift between advertised
window and local backing is visible during review and debugging.

Signed-off-by: Wesley Atwell <[email protected]>
---
 include/trace/events/mptcp.h | 11 +++++++----
 include/trace/events/tcp.h   | 12 +++++++-----
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/include/trace/events/mptcp.h b/include/trace/events/mptcp.h
index 269d949b2025..167970e8e0a5 100644
--- a/include/trace/events/mptcp.h
+++ b/include/trace/events/mptcp.h
@@ -199,6 +199,8 @@ TRACE_EVENT(mptcp_rcvbuf_grow,
                __field(__u32, inq)
                __field(__u32, space)
                __field(__u32, ooo_space)
+               __field(__u32, rmem_alloc)
+               __field(__u32, backlog_len)
                __field(__u32, rcvbuf)
                __field(__u32, rcv_wnd)
                __field(__u8, scaling_ratio)
@@ -228,6 +230,8 @@ TRACE_EVENT(mptcp_rcvbuf_grow,
                                     MPTCP_SKB_CB(msk->ooo_last_skb)->end_seq -
                                     msk->ack_seq;
 
+               __entry->rmem_alloc = tcp_rmem_used(sk);
+               __entry->backlog_len = READ_ONCE(msk->backlog_len);
                __entry->rcvbuf = sk->sk_rcvbuf;
                __entry->rcv_wnd = atomic64_read(&msk->rcv_wnd_sent) -
                                   msk->ack_seq;
@@ -248,12 +252,11 @@ TRACE_EVENT(mptcp_rcvbuf_grow,
                __entry->skaddr = sk;
        ),
 
-       TP_printk("time=%u rtt_us=%u copied=%u inq=%u space=%u ooo=%u 
scaling_ratio=%u "
-                 "rcvbuf=%u rcv_wnd=%u family=%d sport=%hu dport=%hu 
saddr=%pI4 "
-                 "daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c skaddr=%p",
+       TP_printk("time=%u rtt_us=%u copied=%u inq=%u space=%u ooo=%u 
scaling_ratio=%u rmem_alloc=%u backlog_len=%u rcvbuf=%u rcv_wnd=%u family=%d 
sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c 
skaddr=%p",
                  __entry->time, __entry->rtt_us, __entry->copied,
                  __entry->inq, __entry->space, __entry->ooo_space,
-                 __entry->scaling_ratio, __entry->rcvbuf, __entry->rcv_wnd,
+                 __entry->scaling_ratio, __entry->rmem_alloc,
+                 __entry->backlog_len, __entry->rcvbuf, __entry->rcv_wnd,
                  __entry->family, __entry->sport, __entry->dport,
                  __entry->saddr, __entry->daddr, __entry->saddr_v6,
                  __entry->daddr_v6, __entry->skaddr)
diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h
index f155f95cdb6e..92d0bd6be0ba 100644
--- a/include/trace/events/tcp.h
+++ b/include/trace/events/tcp.h
@@ -217,6 +217,8 @@ TRACE_EVENT(tcp_rcvbuf_grow,
                __field(__u32, inq)
                __field(__u32, space)
                __field(__u32, ooo_space)
+               __field(__u32, rmem_alloc)
+               __field(__u32, backlog_len)
                __field(__u32, rcvbuf)
                __field(__u32, rcv_ssthresh)
                __field(__u32, window_clamp)
@@ -247,6 +249,8 @@ TRACE_EVENT(tcp_rcvbuf_grow,
                                     TCP_SKB_CB(tp->ooo_last_skb)->end_seq -
                                     tp->rcv_nxt;
 
+               __entry->rmem_alloc = tcp_rmem_used(sk);
+               __entry->backlog_len = READ_ONCE(sk->sk_backlog.len);
                __entry->rcvbuf = sk->sk_rcvbuf;
                __entry->rcv_ssthresh = tp->rcv_ssthresh;
                __entry->window_clamp = tp->window_clamp;
@@ -269,13 +273,11 @@ TRACE_EVENT(tcp_rcvbuf_grow,
                __entry->sock_cookie = sock_gen_cookie(sk);
        ),
 
-       TP_printk("time=%u rtt_us=%u copied=%u inq=%u space=%u ooo=%u 
scaling_ratio=%u rcvbuf=%u "
-                 "rcv_ssthresh=%u window_clamp=%u rcv_wnd=%u "
-                 "family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 "
-                 "saddrv6=%pI6c daddrv6=%pI6c skaddr=%p sock_cookie=%llx",
+       TP_printk("time=%u rtt_us=%u copied=%u inq=%u space=%u ooo=%u 
scaling_ratio=%u rmem_alloc=%u backlog_len=%u rcvbuf=%u rcv_ssthresh=%u 
window_clamp=%u rcv_wnd=%u family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 
saddrv6=%pI6c daddrv6=%pI6c skaddr=%p sock_cookie=%llx",
                  __entry->time, __entry->rtt_us, __entry->copied,
                  __entry->inq, __entry->space, __entry->ooo_space,
-                 __entry->scaling_ratio, __entry->rcvbuf,
+                 __entry->scaling_ratio, __entry->rmem_alloc,
+                 __entry->backlog_len, __entry->rcvbuf,
                  __entry->rcv_ssthresh, __entry->window_clamp,
                  __entry->rcv_wnd,
                  show_family_name(__entry->family),
-- 
2.34.1


Reply via email to