diff mbox series

[net-next] net: Print real skb addresses for all net events

Message ID 1656050956-9762-1-git-send-email-quic_subashab@quicinc.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series [net-next] net: Print real skb addresses for all net events | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/subject_prefix success Link
netdev/cover_letter success Single patches do not need cover letters
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 14 this patch: 14
netdev/cc_maintainers warning 3 maintainers not CCed: bigeasy@linutronix.de rostedt@goodmis.org mingo@redhat.com
netdev/build_clang success Errors and warnings before: 6 this patch: 6
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 14 this patch: 14
netdev/checkpatch warning CHECK: Alignment should match open parenthesis
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Subash Abhinov Kasiviswanathan (KS) June 24, 2022, 6:09 a.m. UTC
Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
added support for printing the real addresses for the events using
net_dev_template.

However, tracing the packet traversal shows a mix of hashes and real
addresses. Pasting a sample trace for reference-

ping-14249   [002] .....  3424.046612: netif_rx_entry: dev=lo napi_id=0x3 queue_mapping=0
skbaddr=00000000dcbed83e vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800
ip_summed=0 hash=0x00000000 l4_hash=0 len=84 data_len=0 truesize=768 mac_header_valid=1
mac_header=-14 nr_frags=0 gso_size=0 gso_type=0x0
ping-14249   [002] .....  3424.046615: netif_rx: dev=lo skbaddr=ffffff888e5d1000 len=84

Switch the trace print formats to %px for all the events to have a
consistent format of printing the real addresses in all cases.

Signed-off-by: Sean Tranchetti <quic_stranche@quicinc.com>
Signed-off-by: Subash Abhinov Kasiviswanathan <quic_subashab@quicinc.com>
---
 include/trace/events/net.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Eric Dumazet June 24, 2022, 6:27 a.m. UTC | #1
On Fri, Jun 24, 2022 at 8:09 AM Subash Abhinov Kasiviswanathan
<quic_subashab@quicinc.com> wrote:
>
> Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
> added support for printing the real addresses for the events using
> net_dev_template.
>

It is not clear why the 'real address' is needed in trace events.

I would rather do the opposite.

diff --git a/include/trace/events/net.h b/include/trace/events/net.h
index 032b431b987b63b5fab1d3c763643d6192f2c325..da611a7aaf970f541949cdd87ac9203c4c7e81b1
100644
--- a/include/trace/events/net.h
+++ b/include/trace/events/net.h
@@ -136,7 +136,7 @@ DECLARE_EVENT_CLASS(net_dev_template,
                __assign_str(name, skb->dev->name);
        ),

-       TP_printk("dev=%s skbaddr=%px len=%u",
+       TP_printk("dev=%s skbaddr=%p len=%u",
                __get_str(name), __entry->skbaddr, __entry->len)
 )

diff --git a/include/trace/events/qdisc.h b/include/trace/events/qdisc.h
index 59c945b66f9c7469bc071e2a27efb8bfa9eb19f7..a3995925cb057021dc779344d19f7e3724f6df3c
100644
--- a/include/trace/events/qdisc.h
+++ b/include/trace/events/qdisc.h
@@ -41,7 +41,7 @@ TRACE_EVENT(qdisc_dequeue,
                __entry->txq_state      = txq->state;
        ),

-       TP_printk("dequeue ifindex=%d qdisc handle=0x%X parent=0x%X
txq_state=0x%lX packets=%d skbaddr=%px",
+       TP_printk("dequeue ifindex=%d qdisc handle=0x%X parent=0x%X
txq_state=0x%lX packets=%d skbaddr=%p",
                  __entry->ifindex, __entry->handle, __entry->parent,
                  __entry->txq_state, __entry->packets, __entry->skbaddr )
 );
@@ -70,7 +70,7 @@ TRACE_EVENT(qdisc_enqueue,
                __entry->parent  = qdisc->parent;
        ),

-       TP_printk("enqueue ifindex=%d qdisc handle=0x%X parent=0x%X
skbaddr=%px",
+       TP_printk("enqueue ifindex=%d qdisc handle=0x%X parent=0x%X skbaddr=%p",
                  __entry->ifindex, __entry->handle, __entry->parent,
__entry->skbaddr)
 );



> However, tracing the packet traversal shows a mix of hashes and real
> addresses. Pasting a sample trace for reference-
>
> ping-14249   [002] .....  3424.046612: netif_rx_entry: dev=lo napi_id=0x3 queue_mapping=0
> skbaddr=00000000dcbed83e vlan_tagged=0 vlan_proto=0x0000 vlan_tci=0x0000 protocol=0x0800
> ip_summed=0 hash=0x00000000 l4_hash=0 len=84 data_len=0 truesize=768 mac_header_valid=1
> mac_header=-14 nr_frags=0 gso_size=0 gso_type=0x0
> ping-14249   [002] .....  3424.046615: netif_rx: dev=lo skbaddr=ffffff888e5d1000 len=84
>
> Switch the trace print formats to %px for all the events to have a
> consistent format of printing the real addresses in all cases.
>
> Signed-off-by: Sean Tranchetti <quic_stranche@quicinc.com>
> Signed-off-by: Subash Abhinov Kasiviswanathan <quic_subashab@quicinc.com>
> ---
>  include/trace/events/net.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/include/trace/events/net.h b/include/trace/events/net.h
> index 032b431..2651350 100644
> --- a/include/trace/events/net.h
> +++ b/include/trace/events/net.h
> @@ -58,7 +58,7 @@ TRACE_EVENT(net_dev_start_xmit,
>                 __entry->gso_type = skb_shinfo(skb)->gso_type;
>         ),
>
> -       TP_printk("dev=%s queue_mapping=%u skbaddr=%p vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d len=%u data_len=%u network_offset=%d transport_offset_valid=%d transport_offset=%d tx_flags=%d gso_size=%d gso_segs=%d gso_type=%#x",
> +       TP_printk("dev=%s queue_mapping=%u skbaddr=%px vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d len=%u data_len=%u network_offset=%d transport_offset_valid=%d transport_offset=%d tx_flags=%d gso_size=%d gso_segs=%d gso_type=%#x",
>                   __get_str(name), __entry->queue_mapping, __entry->skbaddr,
>                   __entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci,
>                   __entry->protocol, __entry->ip_summed, __entry->len,
> @@ -91,7 +91,7 @@ TRACE_EVENT(net_dev_xmit,
>                 __assign_str(name, dev->name);
>         ),
>
> -       TP_printk("dev=%s skbaddr=%p len=%u rc=%d",
> +       TP_printk("dev=%s skbaddr=%px len=%u rc=%d",
>                 __get_str(name), __entry->skbaddr, __entry->len, __entry->rc)
>  );
>
> @@ -215,7 +215,7 @@ DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
>                 __entry->gso_type = skb_shinfo(skb)->gso_type;
>         ),
>
> -       TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%p vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d hash=0x%08x l4_hash=%d len=%u data_len=%u truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d gso_type=%#x",
> +       TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%px vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d hash=0x%08x l4_hash=%d len=%u data_len=%u truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d gso_type=%#x",
>                   __get_str(name), __entry->napi_id, __entry->queue_mapping,
>                   __entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto,
>                   __entry->vlan_tci, __entry->protocol, __entry->ip_summed,
> --
> 2.7.4
>
Subash Abhinov Kasiviswanathan (KS) June 24, 2022, 8:48 a.m. UTC | #2
On 6/24/2022 12:27 AM, Eric Dumazet wrote:
> On Fri, Jun 24, 2022 at 8:09 AM Subash Abhinov Kasiviswanathan
> <quic_subashab@quicinc.com> wrote:
>>
>> Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
>> added support for printing the real addresses for the events using
>> net_dev_template.
>>
> 
> It is not clear why the 'real address' is needed in trace events.
> 
> I would rather do the opposite.
> 

We don't need the real address. We just need the events to display in 
the same format - hashed address is fine.

> diff --git a/include/trace/events/net.h b/include/trace/events/net.h
> index 032b431b987b63b5fab1d3c763643d6192f2c325..da611a7aaf970f541949cdd87ac9203c4c7e81b1
> 100644
> --- a/include/trace/events/net.h
> +++ b/include/trace/events/net.h
> @@ -136,7 +136,7 @@ DECLARE_EVENT_CLASS(net_dev_template,
>                  __assign_str(name, skb->dev->name);
>          ),
> 
> -       TP_printk("dev=%s skbaddr=%px len=%u",
> +       TP_printk("dev=%s skbaddr=%p len=%u",
>                  __get_str(name), __entry->skbaddr, __entry->len)
>   )
> 

Qitao / Cong, do you have any concerns as it ends up reverting commit 
65875073eddd ("net: use %px to print skb address in 
trace_netif_receive_skb")

> diff --git a/include/trace/events/qdisc.h b/include/trace/events/qdisc.h
> index 59c945b66f9c7469bc071e2a27efb8bfa9eb19f7..a3995925cb057021dc779344d19f7e3724f6df3c
> 100644
> --- a/include/trace/events/qdisc.h
> +++ b/include/trace/events/qdisc.h
> @@ -41,7 +41,7 @@ TRACE_EVENT(qdisc_dequeue,
>                  __entry->txq_state      = txq->state;
>          ),
> 
> -       TP_printk("dequeue ifindex=%d qdisc handle=0x%X parent=0x%X
> txq_state=0x%lX packets=%d skbaddr=%px",
> +       TP_printk("dequeue ifindex=%d qdisc handle=0x%X parent=0x%X
> txq_state=0x%lX packets=%d skbaddr=%p",
>                    __entry->ifindex, __entry->handle, __entry->parent,
>                    __entry->txq_state, __entry->packets, __entry->skbaddr )
>   );
> @@ -70,7 +70,7 @@ TRACE_EVENT(qdisc_enqueue,
>                  __entry->parent  = qdisc->parent;
>          ),
> 
> -       TP_printk("enqueue ifindex=%d qdisc handle=0x%X parent=0x%X
> skbaddr=%px",
> +       TP_printk("enqueue ifindex=%d qdisc handle=0x%X parent=0x%X skbaddr=%p",
>                    __entry->ifindex, __entry->handle, __entry->parent,
> __entry->skbaddr)
>   );
> 
>
Cong Wang June 27, 2022, 7:24 p.m. UTC | #3
On Fri, Jun 24, 2022 at 08:27:34AM +0200, Eric Dumazet wrote:
> On Fri, Jun 24, 2022 at 8:09 AM Subash Abhinov Kasiviswanathan
> <quic_subashab@quicinc.com> wrote:
> >
> > Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
> > added support for printing the real addresses for the events using
> > net_dev_template.
> >
> 
> It is not clear why the 'real address' is needed in trace events.

Because hashed address is _further_ from being unique, we could even
observe same hashed addresses with a few manually injected packets.

Real address is much better. Although definitely it can't guarantee
uniqueness, it is already the cheapest way to identify the packets in
tracing. (Surely you can add an ID generator or something similiar, but
nothing is cheaper than just using the real address.)

> 
> I would rather do the opposite.
>

Strongly disagree. I will sent a revert.

Thanks.
Cong Wang June 27, 2022, 7:27 p.m. UTC | #4
On Fri, Jun 24, 2022 at 02:48:24AM -0600, Subash Abhinov Kasiviswanathan (KS) wrote:
> 
> 
> On 6/24/2022 12:27 AM, Eric Dumazet wrote:
> > On Fri, Jun 24, 2022 at 8:09 AM Subash Abhinov Kasiviswanathan
> > <quic_subashab@quicinc.com> wrote:
> > > 
> > > Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
> > > added support for printing the real addresses for the events using
> > > net_dev_template.
> > > 
> > 
> > It is not clear why the 'real address' is needed in trace events.
> > 
> > I would rather do the opposite.
> > 
> 
> We don't need the real address. We just need the events to display in the
> same format - hashed address is fine.
> 
> > diff --git a/include/trace/events/net.h b/include/trace/events/net.h
> > index 032b431b987b63b5fab1d3c763643d6192f2c325..da611a7aaf970f541949cdd87ac9203c4c7e81b1
> > 100644
> > --- a/include/trace/events/net.h
> > +++ b/include/trace/events/net.h
> > @@ -136,7 +136,7 @@ DECLARE_EVENT_CLASS(net_dev_template,
> >                  __assign_str(name, skb->dev->name);
> >          ),
> > 
> > -       TP_printk("dev=%s skbaddr=%px len=%u",
> > +       TP_printk("dev=%s skbaddr=%p len=%u",
> >                  __get_str(name), __entry->skbaddr, __entry->len)
> >   )
> > 
> 
> Qitao / Cong, do you have any concerns as it ends up reverting commit
> 65875073eddd ("net: use %px to print skb address in
> trace_netif_receive_skb")

Yes, see this example:
https://lists.openwall.net/netdev/2021/07/28/24

Thanks.
Eric Dumazet June 27, 2022, 7:33 p.m. UTC | #5
On Mon, Jun 27, 2022 at 9:25 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
>
> On Fri, Jun 24, 2022 at 08:27:34AM +0200, Eric Dumazet wrote:
> > On Fri, Jun 24, 2022 at 8:09 AM Subash Abhinov Kasiviswanathan
> > <quic_subashab@quicinc.com> wrote:
> > >
> > > Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
> > > added support for printing the real addresses for the events using
> > > net_dev_template.
> > >
> >
> > It is not clear why the 'real address' is needed in trace events.
>
> Because hashed address is _further_ from being unique, we could even
> observe same hashed addresses with a few manually injected packets.
>
> Real address is much better. Although definitely it can't guarantee
> uniqueness, it is already the cheapest way to identify the packets in
> tracing. (Surely you can add an ID generator or something similiar, but
> nothing is cheaper than just using the real address.)
>
> >
> > I would rather do the opposite.
> >
>
> Strongly disagree. I will sent a revert.
>

Make sure to include lkml for this discussion :

Vast majority (100%) of TP_printk() using %p use %p, not %px

$ git grep -n TP_printk|grep %p|wc -l
425
$ git grep -n TP_printk|grep %px|wc -l
0


> Thanks.
Cong Wang June 27, 2022, 7:41 p.m. UTC | #6
On Mon, Jun 27, 2022 at 12:33 PM Eric Dumazet <edumazet@google.com> wrote:
>
> On Mon, Jun 27, 2022 at 9:25 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> >
> > On Fri, Jun 24, 2022 at 08:27:34AM +0200, Eric Dumazet wrote:
> > > On Fri, Jun 24, 2022 at 8:09 AM Subash Abhinov Kasiviswanathan
> > > <quic_subashab@quicinc.com> wrote:
> > > >
> > > > Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
> > > > added support for printing the real addresses for the events using
> > > > net_dev_template.
> > > >
> > >
> > > It is not clear why the 'real address' is needed in trace events.
> >
> > Because hashed address is _further_ from being unique, we could even
> > observe same hashed addresses with a few manually injected packets.
> >
> > Real address is much better. Although definitely it can't guarantee
> > uniqueness, it is already the cheapest way to identify the packets in
> > tracing. (Surely you can add an ID generator or something similiar, but
> > nothing is cheaper than just using the real address.)
> >
> > >
> > > I would rather do the opposite.
> > >
> >
> > Strongly disagree. I will sent a revert.
> >
>
> Make sure to include lkml for this discussion :

Already did:
https://lore.kernel.org/all/CAM_iQpV3Qm_GTfCX1E_OC0PXu+diT9QHtPt4OYcJdyGRcA37Sw@mail.gmail.com/

>
> Vast majority (100%) of TP_printk() using %p use %p, not %px
>
> $ git grep -n TP_printk|grep %p|wc -l
> 425
> $ git grep -n TP_printk|grep %px|wc -l
> 0

You are changing this topic, no one here in this thread cares about non-skb
addresses.

Thanks.
Eric Dumazet June 27, 2022, 7:46 p.m. UTC | #7
On Mon, Jun 27, 2022 at 9:41 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
>
> On Mon, Jun 27, 2022 at 12:33 PM Eric Dumazet <edumazet@google.com> wrote:
> >
> > On Mon, Jun 27, 2022 at 9:25 PM Cong Wang <xiyou.wangcong@gmail.com> wrote:
> > >
> > > On Fri, Jun 24, 2022 at 08:27:34AM +0200, Eric Dumazet wrote:
> > > > On Fri, Jun 24, 2022 at 8:09 AM Subash Abhinov Kasiviswanathan
> > > > <quic_subashab@quicinc.com> wrote:
> > > > >
> > > > > Commit 65875073eddd ("net: use %px to print skb address in trace_netif_receive_skb")
> > > > > added support for printing the real addresses for the events using
> > > > > net_dev_template.
> > > > >
> > > >
> > > > It is not clear why the 'real address' is needed in trace events.
> > >
> > > Because hashed address is _further_ from being unique, we could even
> > > observe same hashed addresses with a few manually injected packets.
> > >
> > > Real address is much better. Although definitely it can't guarantee
> > > uniqueness, it is already the cheapest way to identify the packets in
> > > tracing. (Surely you can add an ID generator or something similiar, but
> > > nothing is cheaper than just using the real address.)
> > >
> > > >
> > > > I would rather do the opposite.
> > > >
> > >
> > > Strongly disagree. I will sent a revert.
> > >
> >
> > Make sure to include lkml for this discussion :
>
> Already did:
> https://lore.kernel.org/all/CAM_iQpV3Qm_GTfCX1E_OC0PXu+diT9QHtPt4OYcJdyGRcA37Sw@mail.gmail.com/
>
> >
> > Vast majority (100%) of TP_printk() using %p use %p, not %px
> >
> > $ git grep -n TP_printk|grep %p|wc -l
> > 425
> > $ git grep -n TP_printk|grep %px|wc -l
> > 0
>
> You are changing this topic, no one here in this thread cares about non-skb
> addresses.
>

I will not ack a revert.

Unless you get ACK from Linus Torvalds maybe.

We have ways for developers : no_hash_pointers
Cong Wang July 3, 2022, 4:43 a.m. UTC | #8
On Mon, Jun 27, 2022 at 12:46 PM Eric Dumazet <edumazet@google.com> wrote:
>
> We have ways for developers : no_hash_pointers

I have no idea why you keep generalizing this topic to all pointers.

You have to realize no one even argues about any other pointers
than just skb's. You must be kidding when you suggest to disable
all hash pointers when people only want skb.
Cong Wang July 3, 2022, 5:58 a.m. UTC | #9
Hmm, I just noticed there is actually a hash-ptr option for trace ring
buffer:

  hash-ptr
        When set, "%p" in the event printk format displays the
        hashed pointer value instead of real address.
        This will be useful if you want to find out which hashed
        value is corresponding to the real value in trace log.

I am glad people noticed the usefulness of real addresses in tracepoint
before I did.

I will backport this to our 5.10 kernel.

Thanks.
diff mbox series

Patch

diff --git a/include/trace/events/net.h b/include/trace/events/net.h
index 032b431..2651350 100644
--- a/include/trace/events/net.h
+++ b/include/trace/events/net.h
@@ -58,7 +58,7 @@  TRACE_EVENT(net_dev_start_xmit,
 		__entry->gso_type = skb_shinfo(skb)->gso_type;
 	),
 
-	TP_printk("dev=%s queue_mapping=%u skbaddr=%p vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d len=%u data_len=%u network_offset=%d transport_offset_valid=%d transport_offset=%d tx_flags=%d gso_size=%d gso_segs=%d gso_type=%#x",
+	TP_printk("dev=%s queue_mapping=%u skbaddr=%px vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d len=%u data_len=%u network_offset=%d transport_offset_valid=%d transport_offset=%d tx_flags=%d gso_size=%d gso_segs=%d gso_type=%#x",
 		  __get_str(name), __entry->queue_mapping, __entry->skbaddr,
 		  __entry->vlan_tagged, __entry->vlan_proto, __entry->vlan_tci,
 		  __entry->protocol, __entry->ip_summed, __entry->len,
@@ -91,7 +91,7 @@  TRACE_EVENT(net_dev_xmit,
 		__assign_str(name, dev->name);
 	),
 
-	TP_printk("dev=%s skbaddr=%p len=%u rc=%d",
+	TP_printk("dev=%s skbaddr=%px len=%u rc=%d",
 		__get_str(name), __entry->skbaddr, __entry->len, __entry->rc)
 );
 
@@ -215,7 +215,7 @@  DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
 		__entry->gso_type = skb_shinfo(skb)->gso_type;
 	),
 
-	TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%p vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d hash=0x%08x l4_hash=%d len=%u data_len=%u truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d gso_type=%#x",
+	TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%px vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d hash=0x%08x l4_hash=%d len=%u data_len=%u truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d gso_type=%#x",
 		  __get_str(name), __entry->napi_id, __entry->queue_mapping,
 		  __entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto,
 		  __entry->vlan_tci, __entry->protocol, __entry->ip_summed,