Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 Mar 2024 17:57:40 +0800
From:      Zhenlei Huang <zlei@FreeBSD.org>
To:        Michael Tuexen <tuexen@freebsd.org>
Cc:        "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@FreeBSD.org>
Subject:   Re: git: 96ad640178ea - main - TCP LRO: add dtrace probe points
Message-ID:  <62073048-DC1D-4A40-8325-701022E9A356@FreeBSD.org>
In-Reply-To: <202403080925.4289P2E4079996@gitrepo.freebsd.org>
References:  <202403080925.4289P2E4079996@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help


> On Mar 8, 2024, at 5:25 PM, Michael Tuexen <tuexen@freebsd.org> wrote:
>=20
> The branch main has been updated by tuexen:
>=20
> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3D96ad640178ea0a8a9d1772687659dce5=
be18fbd9
>=20
> 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
>=20
>    TCP LRO: add dtrace probe points
>=20
>    Add the IP, UDP, and TCP receive static probes to the code path,
>    which avoids if_input.
>=20
>    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.

>    Sponsored by:           Netflix, Inc.
>    Differential Revision:  https://reviews.freebsd.org/D43727
> ---
> sys/netinet/tcp_lro_hpts.c | 44 =
++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>=20
> 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>
>=20
> #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 -=3D sizeof(*le->outer.ip4);
> 			m->m_pkthdr.lro_etype =3D 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 -=3D sizeof(*le->outer.ip6);
> 			m->m_pkthdr.lro_etype =3D 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 -=3D sizeof(*le->outer.ip4);
> 		m->m_pkthdr.lro_etype =3D 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 -=3D sizeof(*le->outer.ip6);
> 		m->m_pkthdr.lro_etype =3D 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,
>=20
> 	th->th_sum =3D 0;		/* TCP checksum is valid. */
> 	tcp_fields_to_host(th);
> +	TCP_PROBE5(receive, NULL, tp, m, tp, th);
>=20
> 	/* Check if ACK can be compressed */
> 	can_compress =3D tcp_lro_ack_valid(m, th, &ts_ptr, &other_opts);

Best regards,
Zhenlei




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?62073048-DC1D-4A40-8325-701022E9A356>