Message ID | 9a7fe804a654722cab2b7b4cd97f21a5f27ec2cb.1617175133.git.geliangtang@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | Matthieu Baerts |
Headers | show |
Series | add tracepoints | expand |
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
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 --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;
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