Re: git: 96ad640178ea - main - TCP LRO: add dtrace probe points

From: <tuexen_at_freebsd.org>
Date: Fri, 08 Mar 2024 10:31:59 UTC
> On Mar 8, 2024, at 10:57, Zhenlei Huang <zlei@FreeBSD.org> wrote:
> 
> 
> 
>> On Mar 8, 2024, at 5:25 PM, Michael Tuexen <tuexen@freebsd.org> wrote:
>> 
>> The branch main has been updated by tuexen:
>> 
>> URL: https://cgit.FreeBSD.org/src/commit/?id=96ad640178ea0a8a9d1772687659dce5be18fbd9
>> 
>> commit 96ad640178ea0a8a9d1772687659dce5be18fbd9
>> Author:     Michael Tuexen <tuexen@FreeBSD.org>
>> AuthorDate: 2024-03-08 09:21:09 +0000
>> Commit:     Michael Tuexen <tuexen@FreeBSD.org>
>> CommitDate: 2024-03-08 09:21:09 +0000
>> 
>>  TCP LRO: add dtrace probe points
>> 
>>  Add the IP, UDP, and TCP receive static probes to the code path,
>>  which avoids if_input.
>> 
>>  Reviewed by:            rrs, markj
>>  MFC after:              1 week`
> 
> Be aware the last character ` in meta message 'MFC after' . No idea whether the reminder mail
> for MFCing will be correctly composed or not.
Typo on side. Sorry for it and thanks for drawing attention to it.

Best regards
Michael
> 
>>  Sponsored by:           Netflix, Inc.
>>  Differential Revision:  https://reviews.freebsd.org/D43727
>> ---
>> sys/netinet/tcp_lro_hpts.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 44 insertions(+)
>> 
>> diff --git a/sys/netinet/tcp_lro_hpts.c b/sys/netinet/tcp_lro_hpts.c
>> index 9c0d4be91d53..cd757d5a6164 100644
>> --- a/sys/netinet/tcp_lro_hpts.c
>> +++ b/sys/netinet/tcp_lro_hpts.c
>> @@ -50,6 +50,7 @@
>> #include <net/pfil.h>
>> 
>> #include <netinet/in.h>
>> +#include <netinet/in_kdtrace.h>
>> #include <netinet/ip6.h>
>> #include <netinet/ip.h>
>> #include <netinet/ip_var.h>
>> @@ -281,22 +282,64 @@ do_bpf_strip_and_compress(struct tcpcb *tp, struct lro_ctrl *lc,
>> case LRO_TYPE_IPV4_TCP:
>> tcp_hdr_offset -= sizeof(*le->outer.ip4);
>> m->m_pkthdr.lro_etype = ETHERTYPE_IP;
>> + IP_PROBE(receive, NULL, NULL, le->outer.ip4, lc->ifp,
>> +    le->outer.ip4, NULL);
>> break;
>> case LRO_TYPE_IPV6_TCP:
>> tcp_hdr_offset -= sizeof(*le->outer.ip6);
>> m->m_pkthdr.lro_etype = ETHERTYPE_IPV6;
>> + IP_PROBE(receive, NULL, NULL, le->outer.ip6, lc->ifp,
>> +    NULL, le->outer.ip6);
>> break;
>> default:
>> goto compressed;
>> }
>> break;
>> case LRO_TYPE_IPV4_TCP:
>> + switch (le->outer.data.lro_type) {
>> + case LRO_TYPE_IPV4_UDP:
>> + IP_PROBE(receive, NULL, NULL, le->outer.ip4, lc->ifp,
>> +    le->outer.ip4, NULL);
>> + UDP_PROBE(receive, NULL, NULL, le->outer.ip4, NULL,
>> +    le->outer.udp);
>> + break;
>> + case LRO_TYPE_IPV6_UDP:
>> + IP_PROBE(receive, NULL, NULL, le->outer.ip6, lc->ifp,
>> +    NULL, le->outer.ip6);
>> + UDP_PROBE(receive, NULL, NULL, le->outer.ip6, NULL,
>> +    le->outer.udp);
>> + break;
>> + default:
>> + __assert_unreachable();
>> + break;
>> + }
>> tcp_hdr_offset -= sizeof(*le->outer.ip4);
>> m->m_pkthdr.lro_etype = ETHERTYPE_IP;
>> + IP_PROBE(receive, NULL, NULL, le->inner.ip4, NULL,
>> +    le->inner.ip4, NULL);
>> break;
>> case LRO_TYPE_IPV6_TCP:
>> + switch (le->outer.data.lro_type) {
>> + case LRO_TYPE_IPV4_UDP:
>> + IP_PROBE(receive, NULL, NULL, le->outer.ip4, lc->ifp,
>> +    le->outer.ip4, NULL);
>> + UDP_PROBE(receive, NULL, NULL, le->outer.ip4, NULL,
>> +    le->outer.udp);
>> + break;
>> + case LRO_TYPE_IPV6_UDP:
>> + IP_PROBE(receive, NULL, NULL, le->outer.ip6, lc->ifp,
>> +    NULL, le->outer.ip6);
>> + UDP_PROBE(receive, NULL, NULL, le->outer.ip6, NULL,
>> +    le->outer.udp);
>> + break;
>> + default:
>> + __assert_unreachable();
>> + break;
>> + }
>> tcp_hdr_offset -= sizeof(*le->outer.ip6);
>> m->m_pkthdr.lro_etype = ETHERTYPE_IPV6;
>> + IP_PROBE(receive, NULL, NULL, le->inner.ip6, NULL, NULL,
>> +    le->inner.ip6);
>> break;
>> default:
>> goto compressed;
>> @@ -313,6 +356,7 @@ do_bpf_strip_and_compress(struct tcpcb *tp, struct lro_ctrl *lc,
>> 
>> th->th_sum = 0; /* TCP checksum is valid. */
>> tcp_fields_to_host(th);
>> + TCP_PROBE5(receive, NULL, tp, m, tp, th);
>> 
>> /* Check if ACK can be compressed */
>> can_compress = tcp_lro_ack_valid(m, th, &ts_ptr, &other_opts);
> 
> Best regards,
> Zhenlei
>