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
