diff mbox series

net: tracepoint: exposing sk_family in all tcp:tracepoints

Message ID 20210129001210.344438-1-hari@netflix.com (mailing list archive)
State Accepted
Delegated to: Netdev Maintainers
Headers show
Series net: tracepoint: exposing sk_family in all tcp:tracepoints | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Hariharan Ananthakrishnan Jan. 29, 2021, 12:12 a.m. UTC
Similar to sock:inet_sock_set_state tracepoint, expose sk_family to
distinguish AF_INET and AF_INET6 families.

The following tcp tracepoints are updated:
tcp:tcp_destroy_sock
tcp:tcp_rcv_space_adjust
tcp:tcp_retransmit_skb
tcp:tcp_send_reset
tcp:tcp_receive_reset
tcp:tcp_retransmit_synack
tcp:tcp_probe

Signed-off-by: Hariharan Ananthakrishnan <hari@netflix.com>
Signed-off-by: Brendan Gregg <bgregg@netflix.com>
---
 include/trace/events/tcp.h | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)


base-commit: bbc20b70424aeb3c84f833860f6340adda5141fc

Comments

Alexei Starovoitov Jan. 29, 2021, 12:16 a.m. UTC | #1
On Thu, Jan 28, 2021 at 4:12 PM Hariharan Ananthakrishnan
<hari@netflix.com> wrote:
>
> Similar to sock:inet_sock_set_state tracepoint, expose sk_family to
> distinguish AF_INET and AF_INET6 families.
>
> The following tcp tracepoints are updated:
> tcp:tcp_destroy_sock
> tcp:tcp_rcv_space_adjust
> tcp:tcp_retransmit_skb
> tcp:tcp_send_reset
> tcp:tcp_receive_reset
> tcp:tcp_retransmit_synack
> tcp:tcp_probe
>
> Signed-off-by: Hariharan Ananthakrishnan <hari@netflix.com>
> Signed-off-by: Brendan Gregg <bgregg@netflix.com>
> ---
>  include/trace/events/tcp.h | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h
> index cf97f6339acb..a319d2f86cd9 100644
> --- a/include/trace/events/tcp.h
> +++ b/include/trace/events/tcp.h
> @@ -59,6 +59,7 @@ DECLARE_EVENT_CLASS(tcp_event_sk_skb,
>                 __field(int, state)
>                 __field(__u16, sport)
>                 __field(__u16, dport)
> +               __field(__u16, family)
>                 __array(__u8, saddr, 4)
>                 __array(__u8, daddr, 4)
>                 __array(__u8, saddr_v6, 16)

raw tracepoint can access all sk and skb fields already.
Why do you need this?
Brendan Gregg Jan. 29, 2021, 12:53 a.m. UTC | #2
On Fri, Jan 29, 2021 at 11:16 AM Alexei Starovoitov
<alexei.starovoitov@gmail.com> wrote:
>
> On Thu, Jan 28, 2021 at 4:12 PM Hariharan Ananthakrishnan
> <hari@netflix.com> wrote:
> >
> > Similar to sock:inet_sock_set_state tracepoint, expose sk_family to
> > distinguish AF_INET and AF_INET6 families.
> >
> > The following tcp tracepoints are updated:
> > tcp:tcp_destroy_sock
> > tcp:tcp_rcv_space_adjust
> > tcp:tcp_retransmit_skb
> > tcp:tcp_send_reset
> > tcp:tcp_receive_reset
> > tcp:tcp_retransmit_synack
> > tcp:tcp_probe
> >
> > Signed-off-by: Hariharan Ananthakrishnan <hari@netflix.com>
> > Signed-off-by: Brendan Gregg <bgregg@netflix.com>
> > ---
> >  include/trace/events/tcp.h | 20 ++++++++++++++++----
> >  1 file changed, 16 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h
> > index cf97f6339acb..a319d2f86cd9 100644
> > --- a/include/trace/events/tcp.h
> > +++ b/include/trace/events/tcp.h
> > @@ -59,6 +59,7 @@ DECLARE_EVENT_CLASS(tcp_event_sk_skb,
> >                 __field(int, state)
> >                 __field(__u16, sport)
> >                 __field(__u16, dport)
> > +               __field(__u16, family)
> >                 __array(__u8, saddr, 4)
> >                 __array(__u8, daddr, 4)
> >                 __array(__u8, saddr_v6, 16)
>
> raw tracepoint can access all sk and skb fields already.
> Why do you need this?


We (Netflix) can dig it out using raw tracepoints and BTF (once it's
rolled out) but this was about fixing the existing tracepoints so they
were more useful.

I think tracepoints and their arguments suit a class of
non-kernel-hacker users: SREs, operators, sysadmins, etc. People who
run and tweak bpftrace one-liners.

Brendan
Jakub Kicinski Feb. 1, 2021, 10:06 p.m. UTC | #3
On Fri, 29 Jan 2021 00:12:10 +0000 Hariharan Ananthakrishnan wrote:
> Similar to sock:inet_sock_set_state tracepoint, expose sk_family to
> distinguish AF_INET and AF_INET6 families.
> 
> The following tcp tracepoints are updated:
> tcp:tcp_destroy_sock
> tcp:tcp_rcv_space_adjust
> tcp:tcp_retransmit_skb
> tcp:tcp_send_reset
> tcp:tcp_receive_reset
> tcp:tcp_retransmit_synack
> tcp:tcp_probe
> 
> Signed-off-by: Hariharan Ananthakrishnan <hari@netflix.com>
> Signed-off-by: Brendan Gregg <bgregg@netflix.com>

Eric, any thoughts?
Eric Dumazet Feb. 2, 2021, 7:38 a.m. UTC | #4
On Mon, Feb 1, 2021 at 11:06 PM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Fri, 29 Jan 2021 00:12:10 +0000 Hariharan Ananthakrishnan wrote:
> > Similar to sock:inet_sock_set_state tracepoint, expose sk_family to
> > distinguish AF_INET and AF_INET6 families.
> >
> > The following tcp tracepoints are updated:
> > tcp:tcp_destroy_sock
> > tcp:tcp_rcv_space_adjust
> > tcp:tcp_retransmit_skb
> > tcp:tcp_send_reset
> > tcp:tcp_receive_reset
> > tcp:tcp_retransmit_synack
> > tcp:tcp_probe
> >
> > Signed-off-by: Hariharan Ananthakrishnan <hari@netflix.com>
> > Signed-off-by: Brendan Gregg <bgregg@netflix.com>
>
> Eric, any thoughts?


I do not use these tracepoints in production scripts, but I wonder if
existing tools could break after this change ?

Or do we consider tracepoints format is not part of the ABI and can be
arbitrarily changed by anyone ?
Stanislav Fomichev Feb. 3, 2021, 4:26 p.m. UTC | #5
On 02/02, Eric Dumazet wrote:
> On Mon, Feb 1, 2021 at 11:06 PM Jakub Kicinski <kuba@kernel.org> wrote:
> >
> > On Fri, 29 Jan 2021 00:12:10 +0000 Hariharan Ananthakrishnan wrote:
> > > Similar to sock:inet_sock_set_state tracepoint, expose sk_family to
> > > distinguish AF_INET and AF_INET6 families.
> > >
> > > The following tcp tracepoints are updated:
> > > tcp:tcp_destroy_sock
> > > tcp:tcp_rcv_space_adjust
> > > tcp:tcp_retransmit_skb
> > > tcp:tcp_send_reset
> > > tcp:tcp_receive_reset
> > > tcp:tcp_retransmit_synack
> > > tcp:tcp_probe
> > >
> > > Signed-off-by: Hariharan Ananthakrishnan <hari@netflix.com>
> > > Signed-off-by: Brendan Gregg <bgregg@netflix.com>
> >
> > Eric, any thoughts?


> I do not use these tracepoints in production scripts, but I wonder if
> existing tools could break after this change ?

> Or do we consider tracepoints format is not part of the ABI and can be
> arbitrarily changed by anyone ?
They are not ABI and since we are extending tracepoints with additional
info (and not removing any existing fields) it shouldn't be a problem.
Jakub Kicinski Feb. 3, 2021, 6:16 p.m. UTC | #6
On Wed, 3 Feb 2021 08:26:04 -0800 sdf@google.com wrote:
> On 02/02, Eric Dumazet wrote:
> > On Mon, Feb 1, 2021 at 11:06 PM Jakub Kicinski <kuba@kernel.org> wrote:  
> > > Eric, any thoughts?  
> 
> > I do not use these tracepoints in production scripts, but I wonder if
> > existing tools could break after this change ?  
> 
> > Or do we consider tracepoints format is not part of the ABI and can be
> > arbitrarily changed by anyone ?  
> 
> They are not ABI and since we are extending tracepoints with additional
> info (and not removing any existing fields) it shouldn't be a problem.

Okay, but we should perhaps add the field at the end just to be on the
safe side (and avoid weird alignment of the IP addresses).
Hariharan Ananthakrishnan Feb. 3, 2021, 6:25 p.m. UTC | #7
On Wed, Feb 3, 2021 at 10:16 AM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Wed, 3 Feb 2021 08:26:04 -0800 sdf@google.com wrote:
> > On 02/02, Eric Dumazet wrote:
> > > On Mon, Feb 1, 2021 at 11:06 PM Jakub Kicinski <kuba@kernel.org> wrote:
> > > > Eric, any thoughts?
> >
> > > I do not use these tracepoints in production scripts, but I wonder if
> > > existing tools could break after this change ?
> >
> > > Or do we consider tracepoints format is not part of the ABI and can be
> > > arbitrarily changed by anyone ?
> >
> > They are not ABI and since we are extending tracepoints with additional
> > info (and not removing any existing fields) it shouldn't be a problem.
>
> Okay, but we should perhaps add the field at the end just to be on the
> safe side (and avoid weird alignment of the IP addresses).
I added it after dport to be consistent with the earlier patch to
sock:inet_sock_set_state
https://lore.kernel.org/patchwork/patch/870492/.
Jakub Kicinski Feb. 3, 2021, 6:44 p.m. UTC | #8
On Wed, 3 Feb 2021 10:25:11 -0800 Hariharan Ananthakrishnan wrote:
> On Wed, Feb 3, 2021 at 10:16 AM Jakub Kicinski <kuba@kernel.org> wrote:
> > On Wed, 3 Feb 2021 08:26:04 -0800 sdf@google.com wrote:  
> > > They are not ABI and since we are extending tracepoints with additional
> > > info (and not removing any existing fields) it shouldn't be a problem.  
> >
> > Okay, but we should perhaps add the field at the end just to be on the
> > safe side (and avoid weird alignment of the IP addresses).  
> I added it after dport to be consistent with the earlier patch to
> sock:inet_sock_set_state
> https://lore.kernel.org/patchwork/patch/870492/.

I see :(

I'll give it a few more hours and if there are no objections apply the
patch.
Jakub Kicinski Feb. 4, 2021, 5:26 p.m. UTC | #9
On Fri, 29 Jan 2021 00:12:10 +0000 Hariharan Ananthakrishnan wrote:
> Similar to sock:inet_sock_set_state tracepoint, expose sk_family to
> distinguish AF_INET and AF_INET6 families.
> 
> The following tcp tracepoints are updated:
> tcp:tcp_destroy_sock
> tcp:tcp_rcv_space_adjust
> tcp:tcp_retransmit_skb
> tcp:tcp_send_reset
> tcp:tcp_receive_reset
> tcp:tcp_retransmit_synack
> tcp:tcp_probe
> 
> Signed-off-by: Hariharan Ananthakrishnan <hari@netflix.com>
> Signed-off-by: Brendan Gregg <bgregg@netflix.com>

Fixed up white space and applied, thanks!
diff mbox series

Patch

diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h
index cf97f6339acb..a319d2f86cd9 100644
--- a/include/trace/events/tcp.h
+++ b/include/trace/events/tcp.h
@@ -59,6 +59,7 @@  DECLARE_EVENT_CLASS(tcp_event_sk_skb,
 		__field(int, state)
 		__field(__u16, sport)
 		__field(__u16, dport)
+		__field(__u16, family)
 		__array(__u8, saddr, 4)
 		__array(__u8, daddr, 4)
 		__array(__u8, saddr_v6, 16)
@@ -75,6 +76,7 @@  DECLARE_EVENT_CLASS(tcp_event_sk_skb,
 
 		__entry->sport = ntohs(inet->inet_sport);
 		__entry->dport = ntohs(inet->inet_dport);
+		__entry->family = sk->sk_family;
 
 		p32 = (__be32 *) __entry->saddr;
 		*p32 = inet->inet_saddr;
@@ -86,7 +88,8 @@  DECLARE_EVENT_CLASS(tcp_event_sk_skb,
 			      sk->sk_v6_rcv_saddr, sk->sk_v6_daddr);
 	),
 
-	TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s",
+	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s",
+		  show_family_name(__entry->family),
 		  __entry->sport, __entry->dport, __entry->saddr, __entry->daddr,
 		  __entry->saddr_v6, __entry->daddr_v6,
 		  show_tcp_state_name(__entry->state))
@@ -125,6 +128,7 @@  DECLARE_EVENT_CLASS(tcp_event_sk,
 		__field(const void *, skaddr)
 		__field(__u16, sport)
 		__field(__u16, dport)
+		__field(__u16, family)
 		__array(__u8, saddr, 4)
 		__array(__u8, daddr, 4)
 		__array(__u8, saddr_v6, 16)
@@ -140,6 +144,7 @@  DECLARE_EVENT_CLASS(tcp_event_sk,
 
 		__entry->sport = ntohs(inet->inet_sport);
 		__entry->dport = ntohs(inet->inet_dport);
+		__entry->family = sk->sk_family;
 
 		p32 = (__be32 *) __entry->saddr;
 		*p32 = inet->inet_saddr;
@@ -153,7 +158,8 @@  DECLARE_EVENT_CLASS(tcp_event_sk,
 		__entry->sock_cookie = sock_gen_cookie(sk);
 	),
 
-	TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c sock_cookie=%llx",
+	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c sock_cookie=%llx",
+		  show_family_name(__entry->family),
 		  __entry->sport, __entry->dport,
 		  __entry->saddr, __entry->daddr,
 		  __entry->saddr_v6, __entry->daddr_v6,
@@ -192,6 +198,7 @@  TRACE_EVENT(tcp_retransmit_synack,
 		__field(const void *, req)
 		__field(__u16, sport)
 		__field(__u16, dport)
+		__field(__u16, family)
 		__array(__u8, saddr, 4)
 		__array(__u8, daddr, 4)
 		__array(__u8, saddr_v6, 16)
@@ -207,6 +214,7 @@  TRACE_EVENT(tcp_retransmit_synack,
 
 		__entry->sport = ireq->ir_num;
 		__entry->dport = ntohs(ireq->ir_rmt_port);
+		__entry->family = sk->sk_family;
 
 		p32 = (__be32 *) __entry->saddr;
 		*p32 = ireq->ir_loc_addr;
@@ -218,7 +226,8 @@  TRACE_EVENT(tcp_retransmit_synack,
 			      ireq->ir_v6_loc_addr, ireq->ir_v6_rmt_addr);
 	),
 
-	TP_printk("sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
+	TP_printk("family=%s sport=%hu dport=%hu saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c",
+	          show_family_name(__entry->family),
 		  __entry->sport, __entry->dport,
 		  __entry->saddr, __entry->daddr,
 		  __entry->saddr_v6, __entry->daddr_v6)
@@ -238,6 +247,7 @@  TRACE_EVENT(tcp_probe,
 		__array(__u8, daddr, sizeof(struct sockaddr_in6))
 		__field(__u16, sport)
 		__field(__u16, dport)
+		__field(__u16, family)
 		__field(__u32, mark)
 		__field(__u16, data_len)
 		__field(__u32, snd_nxt)
@@ -264,6 +274,7 @@  TRACE_EVENT(tcp_probe,
 		__entry->sport = ntohs(inet->inet_sport);
 		__entry->dport = ntohs(inet->inet_dport);
 		__entry->mark = skb->mark;
+		__entry->family = sk->sk_family;
 
 		__entry->data_len = skb->len - __tcp_hdrlen(th);
 		__entry->snd_nxt = tp->snd_nxt;
@@ -276,7 +287,8 @@  TRACE_EVENT(tcp_probe,
 		__entry->sock_cookie = sock_gen_cookie(sk);
 	),
 
-	TP_printk("src=%pISpc dest=%pISpc mark=%#x data_len=%d snd_nxt=%#x snd_una=%#x snd_cwnd=%u ssthresh=%u snd_wnd=%u srtt=%u rcv_wnd=%u sock_cookie=%llx",
+	TP_printk("family=%s src=%pISpc dest=%pISpc mark=%#x data_len=%d snd_nxt=%#x snd_una=%#x snd_cwnd=%u ssthresh=%u snd_wnd=%u srtt=%u rcv_wnd=%u sock_cookie=%llx",
+		  show_family_name(__entry->family),
 		  __entry->saddr, __entry->daddr, __entry->mark,
 		  __entry->data_len, __entry->snd_nxt, __entry->snd_una,
 		  __entry->snd_cwnd, __entry->ssthresh, __entry->snd_wnd,