From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mail.toke.dk (Postfix) with ESMTPS id 52D389CFAB8 for ; Wed, 14 Dec 2022 11:47:37 +0100 (CET) Authentication-Results: mail.toke.dk; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=MCL8PpdE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671014856; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=tq0uOhmR/YyxDupH3FaZfNhyG/8fUl3WkRNheJkDueg=; b=MCL8PpdEUkUaeCgKJ+M/O1uiQ69nqYU/rHQfIQ12dOgpzPq1hC+m0Qxu4UjepdcR26Faqz UmqE3SEETiGyBvkbOOg+F39K/A7kj9I2Spssv8vt41JAj8a6jca8eyvQJ/eS2y9JXwbQFb NlcGVo1NViQ5DaN6o0FcO77z+3rGKUg= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-601-OzDxRytcNfGKgqpCUXbZIA-1; Wed, 14 Dec 2022 05:47:34 -0500 X-MC-Unique: OzDxRytcNfGKgqpCUXbZIA-1 Received: by mail-ej1-f69.google.com with SMTP id sa20-20020a1709076d1400b007bbe8699c2eso11028859ejc.6 for ; Wed, 14 Dec 2022 02:47:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tq0uOhmR/YyxDupH3FaZfNhyG/8fUl3WkRNheJkDueg=; b=kbo/VVHYgVXL5+CJgSYAvmgPtLk7TeNNpZ8PGVvGTldPKZBRTB9OhglkmrUAoXcJ3p 64uUsqiYBDAtlufPWcc4kXyT6n29byLtWhiShjsiOQ2TzH6F3m4ntOdS9B1N4Je5++EY MugEPZuA12rLzBfA9DyXuYwUZFq9B5Mc/uBW7mEFLS3ey91FYAaMoPXG8LeMx6gi0VIg 5h2BfiUnRs6MDxV/b1uGBK+FwuzL8puaSYZsCOFAtQRGjvv71M3mnQVqPiW15sGiIQ2N yKdFATCZn4cmtjHdpjaogbfu3aLU8Vx/j1ljwvEn3cjgDHl2bYknHBx2M7y4p8/+YItR +z+A== X-Gm-Message-State: ANoB5pmLSgFIeRZAybA0jZRAGVKsWSZoj86xVkR85tJ7mZ0MMEYpKy7o 6QO3kKLPJWijgPk1tl7Te6+fpzQyxWPeG26LfUB8lt8C9m5b9GJ/VG9UEKNKpbBBKgrun/i/6aC j37i6roosTqaJ+LYIUv5a X-Received: by 2002:a17:907:80c3:b0:7c4:e7b0:8491 with SMTP id io3-20020a17090780c300b007c4e7b08491mr1973091ejc.61.1671014853527; Wed, 14 Dec 2022 02:47:33 -0800 (PST) X-Google-Smtp-Source: AA0mqf6yplUS16GxCoprCiNnKQhgP9VpvZb2eTXqgrAj7pyRHF8auUYMLU4DFRl0/+4ebMd/4k9WDg== X-Received: by 2002:a17:907:80c3:b0:7c4:e7b0:8491 with SMTP id io3-20020a17090780c300b007c4e7b08491mr1973061ejc.61.1671014853245; Wed, 14 Dec 2022 02:47:33 -0800 (PST) Received: from alrua-x1.borgediget.toke.dk ([45.145.92.2]) by smtp.gmail.com with ESMTPSA id v2-20020a170906292200b007c09d37eac7sm5603837ejd.216.2022.12.14.02.47.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 02:47:32 -0800 (PST) Received: by alrua-x1.borgediget.toke.dk (Postfix, from userid 1000) id A428582F541; Wed, 14 Dec 2022 11:47:31 +0100 (CET) From: Toke =?utf-8?Q?H=C3=B8iland-J=C3=B8rgensen?= To: Jesper Dangaard Brouer , Stanislav Fomichev , Jesper Dangaard Brouer In-Reply-To: <4bac619d-8767-1364-1924-78c05b1ecf88@redhat.com> References: <20221213023605.737383-1-sdf@google.com> <20221213023605.737383-9-sdf@google.com> <7ca8ac2c-7c07-a52f-ec17-d1ba86fa45ab@redhat.com> <4bac619d-8767-1364-1924-78c05b1ecf88@redhat.com> X-Clacks-Overhead: GNU Terry Pratchett Date: Wed, 14 Dec 2022 11:47:31 +0100 Message-ID: <87a63qgt30.fsf@toke.dk> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain Message-ID-Hash: FU7S5D7YTYHCFCT226LCI74CFKS2FOI7 X-Message-ID-Hash: FU7S5D7YTYHCFCT226LCI74CFKS2FOI7 X-MailFrom: toke@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: brouer@redhat.com, bpf@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, haoluo@google.com, jolsa@kernel.org, David Ahern , Jakub Kicinski , Willem de Bruijn , Anatoly Burakov , Alexander Lobakin , Magnus Karlsson , Maryam Tahhan , xdp-hints@xdp-project.net, netdev@vger.kernel.org X-Mailman-Version: 3.3.7 Precedence: list Subject: [xdp-hints] Re: [PATCH bpf-next v4 08/15] veth: Support RX XDP metadata List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Jesper Dangaard Brouer writes: > On 13/12/2022 21.42, Stanislav Fomichev wrote: >> On Tue, Dec 13, 2022 at 7:55 AM Jesper Dangaard Brouer >> wrote: >>> >>> >>> On 13/12/2022 03.35, Stanislav Fomichev wrote: >>>> The goal is to enable end-to-end testing of the metadata for AF_XDP. >>>> >>>> Cc: John Fastabend >>>> Cc: David Ahern >>>> Cc: Martin KaFai Lau >>>> Cc: Jakub Kicinski >>>> Cc: Willem de Bruijn >>>> Cc: Jesper Dangaard Brouer >>>> Cc: Anatoly Burakov >>>> Cc: Alexander Lobakin >>>> Cc: Magnus Karlsson >>>> Cc: Maryam Tahhan >>>> Cc: xdp-hints@xdp-project.net >>>> Cc: netdev@vger.kernel.org >>>> Signed-off-by: Stanislav Fomichev >>>> --- >>>> drivers/net/veth.c | 24 ++++++++++++++++++++++++ >>>> 1 file changed, 24 insertions(+) >>>> >>>> diff --git a/drivers/net/veth.c b/drivers/net/veth.c >>>> index 04ffd8cb2945..d5491e7a2798 100644 >>>> --- a/drivers/net/veth.c >>>> +++ b/drivers/net/veth.c >>>> @@ -118,6 +118,7 @@ static struct { >>>> >>>> struct veth_xdp_buff { >>>> struct xdp_buff xdp; >>>> + struct sk_buff *skb; >>>> }; >>>> >>>> static int veth_get_link_ksettings(struct net_device *dev, >>>> @@ -602,6 +603,7 @@ static struct xdp_frame *veth_xdp_rcv_one(struct veth_rq *rq, >>>> >>>> xdp_convert_frame_to_buff(frame, xdp); >>>> xdp->rxq = &rq->xdp_rxq; >>>> + vxbuf.skb = NULL; >>>> >>>> act = bpf_prog_run_xdp(xdp_prog, xdp); >>>> >>>> @@ -823,6 +825,7 @@ static struct sk_buff *veth_xdp_rcv_skb(struct veth_rq *rq, >>>> __skb_push(skb, skb->data - skb_mac_header(skb)); >>>> if (veth_convert_skb_to_xdp_buff(rq, xdp, &skb)) >>>> goto drop; >>>> + vxbuf.skb = skb; >>>> >>>> orig_data = xdp->data; >>>> orig_data_end = xdp->data_end; >>>> @@ -1601,6 +1604,21 @@ static int veth_xdp(struct net_device *dev, struct netdev_bpf *xdp) >>>> } >>>> } >>>> >>>> +static int veth_xdp_rx_timestamp(const struct xdp_md *ctx, u64 *timestamp) >>>> +{ >>>> + *timestamp = ktime_get_mono_fast_ns(); >>> >>> This should be reading the hardware timestamp in the SKB. >>> >>> Details: This hardware timestamp in the SKB is located in >>> skb_shared_info area, which is also available for xdp_frame (currently >>> used for multi-buffer purposes). Thus, when adding xdp-hints "store" >>> functionality, it would be natural to store the HW TS in the same place. >>> Making the veth skb/xdp_frame code paths able to share code. >> >> Does something like the following look acceptable as well? >> >> *timestamp = skb_hwtstamps(_ctx->skb)->hwtstamp; >> if (!*timestamp) >> *timestamp = ktime_get_mono_fast_ns(); /* sw fallback */ >> > > How can the BPF programmer tell the difference between getting hardware > or software timestamp? > > This will get really confusing when someone implements a tcpdump feature > (like/extend xdpdump) and some packets (e.g. PTP packets) have HW > timestamps and some don't. The time sequence in the pcap will be strange. > >> Because I'd like to be able to test this path in the selftests. As >> long as I get some number from veth_xdp_rx_timestamp, I can test it. >> No amount of SOF_TIMESTAMPING_{SOFTWARE,RX_SOFTWARE,RAW_HARDWARE} >> triggers non-zero hwtstamp for xsk receive path. Any suggestions? >> > > You could implement the "store" operation I mentioned before. > For testing you can store an arbitrary value in the timestamp and check > it later by reading it back. > > I can see you have changed the API to send down a pointer. Thus, a > simple flag could implement the writing the provided timestamp. > > Regarding flags for reading the timestamp. Should we be able to specify > what clock type we are asking for? > Have you notice that tcpdump can ask for different types of > timestamps[1]. e.g. for hardware timestamps it is either > 'adapter_unsynced' or 'adaptor'. (See semantic in [1]) > > # tcpdump -ni eth1 -j adapter_unsynced --time-stamp-precision=nano I don't think it makes sense for XDP to *ask* for a specific timestamp (any individual packet probably only has one, right?). But we could add a way to query which type of timestamp is available, either as a second argument to the same function, or as a separate one. Same thing for the hash, BTW (skb_set_hash() also takes a type argument). I guess the easiest would be to just add a second parameter to both getter functions for the type, but maybe there's a performance argument for having it be a separate kfunc (at least for timestamp)? -Toke