[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z6UIqPt+Rkpo5E+M@boxer>
Date: Thu, 6 Feb 2025 20:08:24 +0100
From: Maciej Fijalkowski <maciej.fijalkowski@...el.com>
To: Song Yoong Siang <yoong.siang.song@...el.com>
CC: "David S . Miller" <davem@...emloft.net>, Eric Dumazet
<edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni
<pabeni@...hat.com>, Simon Horman <horms@...nel.org>, Willem de Bruijn
<willemb@...gle.com>, Florian Bezdeka <florian.bezdeka@...mens.com>, "Donald
Hunter" <donald.hunter@...il.com>, Jonathan Corbet <corbet@....net>, "Bjorn
Topel" <bjorn@...nel.org>, Magnus Karlsson <magnus.karlsson@...el.com>,
Jonathan Lemon <jonathan.lemon@...il.com>, Andrew Lunn
<andrew+netdev@...n.ch>, Alexei Starovoitov <ast@...nel.org>, Daniel Borkmann
<daniel@...earbox.net>, Jesper Dangaard Brouer <hawk@...nel.org>, "John
Fastabend" <john.fastabend@...il.com>, Joe Damato <jdamato@...tly.com>,
Stanislav Fomichev <sdf@...ichev.me>, Xuan Zhuo <xuanzhuo@...ux.alibaba.com>,
Mina Almasry <almasrymina@...gle.com>, Daniel Jurgens <danielj@...dia.com>,
Andrii Nakryiko <andrii@...nel.org>, Eduard Zingerman <eddyz87@...il.com>,
Mykola Lysenko <mykolal@...com>, Martin KaFai Lau <martin.lau@...ux.dev>,
Song Liu <song@...nel.org>, Yonghong Song <yonghong.song@...ux.dev>, KP Singh
<kpsingh@...nel.org>, Hao Luo <haoluo@...gle.com>, Jiri Olsa
<jolsa@...nel.org>, Shuah Khan <shuah@...nel.org>, Alexandre Torgue
<alexandre.torgue@...s.st.com>, Jose Abreu <joabreu@...opsys.com>, "Maxime
Coquelin" <mcoquelin.stm32@...il.com>, Tony Nguyen
<anthony.l.nguyen@...el.com>, Przemek Kitszel <przemyslaw.kitszel@...el.com>,
Faizal Rahim <faizal.abdul.rahim@...ux.intel.com>, Choong Yong Liang
<yong.liang.choong@...ux.intel.com>, Bouska Zdenek
<zdenek.bouska@...mens.com>, <netdev@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <linux-doc@...r.kernel.org>,
<bpf@...r.kernel.org>, <linux-kselftest@...r.kernel.org>,
<linux-stm32@...md-mailman.stormreply.com>,
<linux-arm-kernel@...ts.infradead.org>, <intel-wired-lan@...ts.osuosl.org>,
<xdp-hints@...-project.net>
Subject: Re: [PATCH bpf-next v9 3/5] net: stmmac: Add launch time support to
XDP ZC
On Thu, Feb 06, 2025 at 02:04:06PM +0800, Song Yoong Siang wrote:
> Enable launch time (Time-Based Scheduling) support for XDP zero copy via
> the XDP Tx metadata framework.
>
> This patch has been tested with tools/testing/selftests/bpf/xdp_hw_metadata
> on Intel Tiger Lake platform. Below are the test steps and result.
>
> Test 1: Send a single packet with the launch time set to 1 s in the future.
>
> Test steps:
> 1. On the DUT, start the xdp_hw_metadata selftest application:
> $ sudo ./xdp_hw_metadata enp0s30f4 -l 1000000000 -L 1
>
> 2. On the Link Partner, send a UDP packet with VLAN priority 1 to port 9091
> of the DUT.
>
> Result:
> When the launch time is set to 1 s in the future, the delta between the
> launch time and the transmit hardware timestamp is 16.963 us, as shown in
> printout of the xdp_hw_metadata application below.
> 0x55b5864717a8: rx_desc[4]->addr=88100 addr=88100 comp_addr=88100 EoP
> No rx_hash, err=-95
> HW RX-time: 1734579065767717328 (sec:1734579065.7677)
> delta to User RX-time sec:0.0004 (375.624 usec)
> XDP RX-time: 1734579065768004454 (sec:1734579065.7680)
> delta to User RX-time sec:0.0001 (88.498 usec)
> No rx_vlan_tci or rx_vlan_proto, err=-95
> 0x55b5864717a8: ping-pong with csum=5619 (want 0000)
> csum_start=34 csum_offset=6
> HW RX-time: 1734579065767717328 (sec:1734579065.7677)
> delta to HW Launch-time sec:1.0000 (1000000.000 usec)
> 0x55b5864717a8: complete tx idx=4 addr=4018
> HW Launch-time: 1734579066767717328 (sec:1734579066.7677)
> delta to HW TX-complete-time sec:0.0000 (16.963 usec)
> HW TX-complete-time: 1734579066767734291 (sec:1734579066.7677)
> delta to User TX-complete-time sec:0.0001
> (130.408 usec)
> XDP RX-time: 1734579065768004454 (sec:1734579065.7680)
> delta to User TX-complete-time sec:0.9999
> (999860.245 usec)
> HW RX-time: 1734579065767717328 (sec:1734579065.7677)
> delta to HW TX-complete-time sec:1.0000 (1000016.963 usec)
> 0x55b5864717a8: complete rx idx=132 addr=88100
>
> Test 2: Send 1000 packets with a 10 ms interval and the launch time set to
> 500 us in the future.
>
> Test steps:
> 1. On the DUT, start the xdp_hw_metadata selftest application:
> $ sudo chrt -f 99 ./xdp_hw_metadata enp0s30f4 -l 500000 -L 1 > \
> /dev/shm/result.log
>
> 2. On the Link Partner, send 1000 UDP packets with a 10 ms interval and
> VLAN priority 1 to port 9091 of the DUT.
>
> Result:
> When the launch time is set to 500 us in the future, the average delta
> between the launch time and the transmit hardware timestamp is 13.854 us,
> as shown in the analysis of /dev/shm/result.log below. The XDP launch time
> works correctly in sending 1000 packets continuously.
> Min delta: 08.410 us
> Avr delta: 13.854 us
> Max delta: 17.076 us
> Total packets forwarded: 1000
>
> Reviewed-by: Choong Yong Liang <yong.liang.choong@...ux.intel.com>
> Signed-off-by: Song Yoong Siang <yoong.siang.song@...el.com>
Sorry haven't looked here in previous review approaches :/
> ---
> drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 ++
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 13 +++++++++++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> index f05cae103d83..925d8b97a42b 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
> @@ -106,6 +106,8 @@ struct stmmac_metadata_request {
> struct stmmac_priv *priv;
> struct dma_desc *tx_desc;
> bool *set_ic;
> + struct dma_edesc *edesc;
> + int tbs;
wanted to comment you're introducing holes here but set_ic is a ptr:)
> };
>
> struct stmmac_xsk_tx_complete {
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index d04543e5697b..5e5d24924ce7 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -2514,9 +2514,20 @@ static u64 stmmac_xsk_fill_timestamp(void *_priv)
> return 0;
> }
>
> +static void stmmac_xsk_request_launch_time(u64 launch_time, void *_priv)
> +{
> + struct stmmac_metadata_request *meta_req = _priv;
> + struct timespec64 ts = ns_to_timespec64(launch_time);
nit: Apply reverse christmas tree rule here (order the variable
definitions from longest to shortest), but it's not a showstopper I
guess...
> +
> + if (meta_req->tbs & STMMAC_TBS_EN)
> + stmmac_set_desc_tbs(meta_req->priv, meta_req->edesc, ts.tv_sec,
> + ts.tv_nsec);
> +}
> +
> static const struct xsk_tx_metadata_ops stmmac_xsk_tx_metadata_ops = {
> .tmo_request_timestamp = stmmac_xsk_request_timestamp,
> .tmo_fill_timestamp = stmmac_xsk_fill_timestamp,
> + .tmo_request_launch_time = stmmac_xsk_request_launch_time,
> };
>
> static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
> @@ -2600,6 +2611,8 @@ static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
> meta_req.priv = priv;
> meta_req.tx_desc = tx_desc;
> meta_req.set_ic = &set_ic;
> + meta_req.tbs = tx_q->tbs;
> + meta_req.edesc = &tx_q->dma_entx[entry];
> xsk_tx_metadata_request(meta, &stmmac_xsk_tx_metadata_ops,
> &meta_req);
> if (set_ic) {
> --
> 2.34.1
>
Powered by blists - more mailing lists