diff mbox series

[v4,mptcp-next,2/5] mptcp: add tracepoint in mptcp_subflow_get_send

Message ID 9a7fe804a654722cab2b7b4cd97f21a5f27ec2cb.1617175133.git.geliangtang@gmail.com
State Accepted, archived
Delegated to: Matthieu Baerts
Headers show
Series add tracepoints | expand

Commit Message

Geliang Tang March 31, 2021, 7:23 a.m. UTC
This patch added a tracepoint in the packet scheduler function
mptcp_subflow_get_send().

Suggested-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
 include/trace/events/mptcp.h | 53 ++++++++++++++++++++++++++++++++++++
 net/mptcp/protocol.c         |  8 +++---
 2 files changed, 57 insertions(+), 4 deletions(-)
 create mode 100644 include/trace/events/mptcp.h

Comments

Paolo Abeni April 1, 2021, 10:18 a.m. UTC | #1
On Wed, 2021-03-31 at 15:23 +0800, Geliang Tang wrote:
> This patch added a tracepoint in the packet scheduler function
> mptcp_subflow_get_send().
> 
> Suggested-by: Paolo Abeni <pabeni@redhat.com>
> Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> ---
>  include/trace/events/mptcp.h | 53 ++++++++++++++++++++++++++++++++++++
>  net/mptcp/protocol.c         |  8 +++---
>  2 files changed, 57 insertions(+), 4 deletions(-)
>  create mode 100644 include/trace/events/mptcp.h
> 
> diff --git a/include/trace/events/mptcp.h b/include/trace/events/mptcp.h
> new file mode 100644
> index 000000000000..f1c836573744
> --- /dev/null
> +++ b/include/trace/events/mptcp.h
> @@ -0,0 +1,53 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM mptcp
> +
> +#if !defined(_TRACE_MPTCP_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_MPTCP_H
> +
> +#include <linux/tracepoint.h>
> +
> +TRACE_EVENT(mptcp_subflow_get_send,
> +
> +	TP_PROTO(struct mptcp_subflow_context *subflow),
> +
> +	TP_ARGS(subflow),
> +
> +	TP_STRUCT__entry(
> +		__field(bool, active)
> +		__field(bool, free)
> +		__field(u32, snd_wnd)
> +		__field(u32, pace)
> +		__field(u8, backup)
> +		__field(u64, ratio)
> +	),
> +
> +	TP_fast_assign(
> +		bool sk = sk_fullsock(subflow->tcp_sock);
> +
> +		__entry->active = mptcp_subflow_active(subflow);
> +		__entry->backup = subflow->backup;
> +		if (sk) {
> +			struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> +
> +			__entry->free = sk_stream_memory_free(subflow->tcp_sock);
> +			if (ssk) {
> +				__entry->snd_wnd = tcp_sk(ssk)->snd_wnd;
> +				__entry->pace = ssk->sk_pacing_rate;
> +				if (__entry->pace)
> +					__entry->ratio = div_u64((u64)ssk->sk_wmem_queued << 32,
> +								 __entry->pace);
> +			}
> +		}
> +	),

Minor nit: I think we can reduce the indentation level and probably we
should zeroed the uninitialized fields, but I think we can do that
eventually later with a squash-to patch. I suggest to merge this as is
and than eventually improve later.

Thanks!

Paolo
Geliang Tang April 1, 2021, 10:23 a.m. UTC | #2
Paolo Abeni <pabeni@redhat.com> 于2021年4月1日周四 下午6:18写道:
>
> On Wed, 2021-03-31 at 15:23 +0800, Geliang Tang wrote:
> > This patch added a tracepoint in the packet scheduler function
> > mptcp_subflow_get_send().
> >
> > Suggested-by: Paolo Abeni <pabeni@redhat.com>
> > Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> > ---
> >  include/trace/events/mptcp.h | 53 ++++++++++++++++++++++++++++++++++++
> >  net/mptcp/protocol.c         |  8 +++---
> >  2 files changed, 57 insertions(+), 4 deletions(-)
> >  create mode 100644 include/trace/events/mptcp.h
> >
> > diff --git a/include/trace/events/mptcp.h b/include/trace/events/mptcp.h
> > new file mode 100644
> > index 000000000000..f1c836573744
> > --- /dev/null
> > +++ b/include/trace/events/mptcp.h
> > @@ -0,0 +1,53 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +#undef TRACE_SYSTEM
> > +#define TRACE_SYSTEM mptcp
> > +
> > +#if !defined(_TRACE_MPTCP_H) || defined(TRACE_HEADER_MULTI_READ)
> > +#define _TRACE_MPTCP_H
> > +
> > +#include <linux/tracepoint.h>
> > +
> > +TRACE_EVENT(mptcp_subflow_get_send,
> > +
> > +     TP_PROTO(struct mptcp_subflow_context *subflow),
> > +
> > +     TP_ARGS(subflow),
> > +
> > +     TP_STRUCT__entry(
> > +             __field(bool, active)
> > +             __field(bool, free)
> > +             __field(u32, snd_wnd)
> > +             __field(u32, pace)
> > +             __field(u8, backup)
> > +             __field(u64, ratio)
> > +     ),
> > +
> > +     TP_fast_assign(
> > +             bool sk = sk_fullsock(subflow->tcp_sock);
> > +
> > +             __entry->active = mptcp_subflow_active(subflow);
> > +             __entry->backup = subflow->backup;
> > +             if (sk) {
> > +                     struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> > +
> > +                     __entry->free = sk_stream_memory_free(subflow->tcp_sock);
> > +                     if (ssk) {
> > +                             __entry->snd_wnd = tcp_sk(ssk)->snd_wnd;
> > +                             __entry->pace = ssk->sk_pacing_rate;
> > +                             if (__entry->pace)
> > +                                     __entry->ratio = div_u64((u64)ssk->sk_wmem_queued << 32,
> > +                                                              __entry->pace);
> > +                     }
> > +             }
> > +     ),
>
> Minor nit: I think we can reduce the indentation level and probably we
> should zeroed the uninitialized fields, but I think we can do that
> eventually later with a squash-to patch. I suggest to merge this as is
> and than eventually improve later.

Thanks Paolo, I'll send the squash-to patch later.

-Geliang

>
> Thanks!
>
> Paolo
>
diff mbox series

Patch

diff --git a/include/trace/events/mptcp.h b/include/trace/events/mptcp.h
new file mode 100644
index 000000000000..f1c836573744
--- /dev/null
+++ b/include/trace/events/mptcp.h
@@ -0,0 +1,53 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM mptcp
+
+#if !defined(_TRACE_MPTCP_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_MPTCP_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(mptcp_subflow_get_send,
+
+	TP_PROTO(struct mptcp_subflow_context *subflow),
+
+	TP_ARGS(subflow),
+
+	TP_STRUCT__entry(
+		__field(bool, active)
+		__field(bool, free)
+		__field(u32, snd_wnd)
+		__field(u32, pace)
+		__field(u8, backup)
+		__field(u64, ratio)
+	),
+
+	TP_fast_assign(
+		bool sk = sk_fullsock(subflow->tcp_sock);
+
+		__entry->active = mptcp_subflow_active(subflow);
+		__entry->backup = subflow->backup;
+		if (sk) {
+			struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+
+			__entry->free = sk_stream_memory_free(subflow->tcp_sock);
+			if (ssk) {
+				__entry->snd_wnd = tcp_sk(ssk)->snd_wnd;
+				__entry->pace = ssk->sk_pacing_rate;
+				if (__entry->pace)
+					__entry->ratio = div_u64((u64)ssk->sk_wmem_queued << 32,
+								 __entry->pace);
+			}
+		}
+	),
+
+	TP_printk("active=%d free=%d snd_wnd=%u pace=%u backup=%u ratio=%llu",
+		  __entry->active, __entry->free,
+		  __entry->snd_wnd, __entry->pace,
+		  __entry->backup, __entry->ratio)
+);
+
+#endif /* _TRACE_MPTCP_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index a625c4e63152..2d895c3c8746 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -25,6 +25,9 @@ 
 #include "protocol.h"
 #include "mib.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/mptcp.h>
+
 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
 struct mptcp6_sock {
 	struct mptcp_sock msk;
@@ -1381,6 +1384,7 @@  static struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk)
 		send_info[i].ratio = -1;
 	}
 	mptcp_for_each_subflow(msk, subflow) {
+		trace_mptcp_subflow_get_send(subflow);
 		ssk =  mptcp_subflow_tcp_sock(subflow);
 		if (!mptcp_subflow_active(subflow))
 			continue;
@@ -1401,10 +1405,6 @@  static struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk)
 		}
 	}
 
-	pr_debug("msk=%p nr_active=%d ssk=%p:%lld backup=%p:%lld",
-		 msk, nr_active, send_info[0].ssk, send_info[0].ratio,
-		 send_info[1].ssk, send_info[1].ratio);
-
 	/* pick the best backup if no other subflow is active */
 	if (!nr_active)
 		send_info[0].ssk = send_info[1].ssk;