Message ID | 20240304034632.GA21357@didi-ThinkCentre-M920t-N000 (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,v2] tcp: Add skb addr and sock addr to arguments of tracepoint tcp_probe. | expand |
On Mon, Mar 4, 2024 at 11:46 AM fuyuanli <fuyuanli@didiglobal.com> wrote: > > It is useful to expose skb addr and sock addr to user in tracepoint > tcp_probe, so that we can get more information while monitoring > receiving of tcp data, by ebpf or other ways. > > For example, we need to identify a packet by seq and end_seq when > calculate transmit latency between lay 2 and lay 4 by ebpf, but which is > not available in tcp_probe, so we can only use kprobe hooking > tcp_rcv_esatblised to get them. But we can use tcp_probe directly if skb > addr and sock addr are available, which is more efficient. > > Signed-off-by: fuyuanli <fuyuanli@didiglobal.com> > Link: https://lore.kernel.org/netdev/20240229052813.GA23899@didi-ThinkCentre-M920t-N000/ Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
On Mon, Mar 4, 2024 at 4:46 AM fuyuanli <fuyuanli@didiglobal.com> wrote: > > It is useful to expose skb addr and sock addr to user in tracepoint > tcp_probe, so that we can get more information while monitoring > receiving of tcp data, by ebpf or other ways. > > For example, we need to identify a packet by seq and end_seq when > calculate transmit latency between lay 2 and lay 4 by ebpf, but which is Please use "layer 2 and layer 4". > not available in tcp_probe, so we can only use kprobe hooking > tcp_rcv_esatblised to get them. But we can use tcp_probe directly if skb > addr and sock addr are available, which is more efficient. Okay, but please fix the typo. Correct function name is tcp_rcv_established > > Signed-off-by: fuyuanli <fuyuanli@didiglobal.com> > Link: https://lore.kernel.org/netdev/20240229052813.GA23899@didi-ThinkCentre-M920t-N000/ >
Eric Dumazet <edumazet@google.com> 于2024年3月4日周一 16:13写道: > > On Mon, Mar 4, 2024 at 4:46 AM fuyuanli <fuyuanli@didiglobal.com> wrote: > > > > It is useful to expose skb addr and sock addr to user in tracepoint > > tcp_probe, so that we can get more information while monitoring > > receiving of tcp data, by ebpf or other ways. > > > > For example, we need to identify a packet by seq and end_seq when > > calculate transmit latency between lay 2 and lay 4 by ebpf, but which is > > Please use "layer 2 and layer 4". > > > not available in tcp_probe, so we can only use kprobe hooking > > tcp_rcv_esatblised to get them. But we can use tcp_probe directly if skb > > addr and sock addr are available, which is more efficient. > > Okay, but please fix the typo. Correct function name is tcp_rcv_established > > > > > Signed-off-by: fuyuanli <fuyuanli@didiglobal.com> > > Link: https://lore.kernel.org/netdev/20240229052813.GA23899@didi-ThinkCentre-M920t-N000/ > > > OK, I will submit a v3 patch, thanks for your review :) fuyuanli
diff --git a/include/trace/events/tcp.h b/include/trace/events/tcp.h index 7b1ddffa3dfc..efb651683781 100644 --- a/include/trace/events/tcp.h +++ b/include/trace/events/tcp.h @@ -258,6 +258,8 @@ TRACE_EVENT(tcp_probe, __field(__u32, srtt) __field(__u32, rcv_wnd) __field(__u64, sock_cookie) + __field(const void *, skbaddr) + __field(const void *, skaddr) ), TP_fast_assign( @@ -285,14 +287,18 @@ TRACE_EVENT(tcp_probe, __entry->ssthresh = tcp_current_ssthresh(sk); __entry->srtt = tp->srtt_us >> 3; __entry->sock_cookie = sock_gen_cookie(sk); + + __entry->skbaddr = skb; + __entry->skaddr = sk; ), - 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", + 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 skbaddr=%p skaddr=%p", 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, - __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie) + __entry->srtt, __entry->rcv_wnd, __entry->sock_cookie, + __entry->skbaddr, __entry->skaddr) ); #define TP_STORE_ADDR_PORTS_SKB_V4(__entry, skb) \
It is useful to expose skb addr and sock addr to user in tracepoint tcp_probe, so that we can get more information while monitoring receiving of tcp data, by ebpf or other ways. For example, we need to identify a packet by seq and end_seq when calculate transmit latency between lay 2 and lay 4 by ebpf, but which is not available in tcp_probe, so we can only use kprobe hooking tcp_rcv_esatblised to get them. But we can use tcp_probe directly if skb addr and sock addr are available, which is more efficient. Signed-off-by: fuyuanli <fuyuanli@didiglobal.com> Link: https://lore.kernel.org/netdev/20240229052813.GA23899@didi-ThinkCentre-M920t-N000/ --- v2: 1) Add printing about those two addresses. 2) Target "net-next" in the title of patch. --- include/trace/events/tcp.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)