mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Steffen Trumtrar <s.trumtrar@pengutronix.de>
To: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
	"David S. Miller" <davem@davemloft.net>,
	"Jakub Kicinski" <kuba@kernel.org>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Richard Cochran" <richardcochran@gmail.com>,
	"Andrew Lunn" <andrew+netdev@lunn.ch>,
	"Eugenio Pérez" <eperezma@redhat.com>,
	"Jason Wang" <jasowangio@gmail.com>,
	"Alexei Starovoitov" <ast@kernel.org>,
	"Daniel Borkmann" <daniel@iogearbox.net>,
	"Jesper Dangaard Brouer" <hawk@kernel.org>,
	"John Fastabend" <john.fastabend@gmail.com>,
	"Stanislav Fomichev" <sdf@fomichev.me>,
	"Eric Dumazet" <edumazet@kernel.org>,
	virtualization@lists.linux.dev, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, bpf@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH RFC v4 0/6] virtio-net: add receive timestamp support
Date: Tue, 10 Nov 2026 12:47:17 +0100	[thread overview]
Message-ID: <874ido29iy.fsf@pengutronix.de> (raw)
In-Reply-To: <willemdebruijn.kernel.1d6388f036c46@gmail.com>


Hi Willem,

On 2026-11-01 at 09:57 -05, Willem de Bruijn <willemdebruijn.kernel@gmail.com> wrote:

> Steffen Trumtrar wrote:
> > This series picks up Willem de Bruijn's work on a virtio-net receive
> > timestamp. The device puts the time of arrival (TAI, ns) into the
> > virtio-net header so the guest can use it for PTP and RTT estimation
> > without taking the timestamp itself after the host-to-guest latency.
> > 
> > The series is an RFC. I am mostly interested in feedback on the
> > approach and on the wire format:
> 
> At a high level +1 from me.

Thanks!

> 
> Some comments inline.
> > 
> >  - The timestamp is a new field at the end of virtio_net_common_hdr
> >    after outer_nh_offset and ipsec, offset 32 (see virtio spec),
> >    negotiated with VIRTIO_NET_F_RX_TSTAMP (bit 49). Header size now 40
> >    bytes.
> >    Willem noted on v3 that virtio_net_common_hdr was not meant to be
> >    extended this way; I kept it as the simplest approach, but a
> >    separate struct for the timestamp header is an option.
> >  - Timestamping is enabled at runtime with SIOCSHWTSTAMP; all
> >    supported rx filters behave the same for now.
> >  - XDP programs can read the timestamp with
> >    bpf_xdp_metadata_rx_timestamp().
> >  - vhost-net passes the feature through; the timestamp itself is
> >    written by tun. The tun patch is only meant as a reference
> >    implementation for the device side.
> >  - The timestamp is in TAI.
> 
> Is this a requirement? It is common for PHCs to be synced to TAI,
> but not 100% the case. Does virtio need to specify this.
>

No, I don't think it has to be TAI. TAI is only what the tun reference
implementation does (ktime_get_clocktai_ns()). What the guest really
needs is to know which clock the timestamp comes from, so it can compare
it with something.

One idea for the spec change: don't fix the time base in virtio-net at
all, only say the timestamp is in nanoseconds of some device clock, and
let the device tell the driver which clock that is. virtio_rtc already
has clock ids with a type (UTC, TAI, monotonic, ...), and the Linux
driver registers a PHC for each of them (with VIRTIO_RTC_PTP).
virtio-net could carry the virtio_rtc clock id in its config space, and
the driver reports the index of that PHC in get_ts_info. That would also
fix the phc_index == -1 problem you pointed out in 2/6.

What I don't like about it: virtio-net then depends on a second device
being there, and with more than one virtio_rtc device the clock id alone
is not enough to find the right one. Without virtio_rtc the driver would
not offer hardware timestamps at all.

The alternative is a PHC in virtio-net itself (gettime over the control
vq), which is a lot more spec for one timestamp field.

Do you think the virtio_rtc way is reasonable, or is there something
simpler I'm missing?

> >    The driver reports it as
> >    SOF_TIMESTAMPING_RAW_HARDWARE without a PTP clock (phc_index -1),
> >    so userspace cannot tell which clock it refers to and may compare
> >    it against CLOCK_REALTIME (currently off by 37s). Options I see:
> >    convert to the guest's system time in the driver (correct only if
> >    host and guest agree on the TAI offset), expose a PHC so the
> >    time base is explicit, or keep the raw TAI value and leave the
> >    conversion to userspace. Which one is preferred?
> >  - Like the existing rx_hash, the XDP timestamp callback locates the
> >    header relative to xdp->data, so it must be called before
> >    bpf_xdp_adjust_head().
> > 
> > A virtio spec change is needed as well and not yet proposed.
> > 
> > Testing: the feature needs a QEMU that knows VIRTIO_NET_F_RX_TSTAMP and
> > sets the matching vnet header size; see
> > https://github.com/strumtrar/qemu/tree/v11.0.1/virtio-rx-stamps
> > 
> > Performance: I measured the receive rate with 64 byte UDP packets in
> > a nested QEMU/KVM setup with vhost-net. The variance between runs is
> > larger than any difference between the variants (without the series,
> > series without the feature, feature negotiated, feature enabled), so
> > I cannot show a measurable cost or the absence of one. Numbers from
> > bare metal will follow with a non-RFC version.
> 
> This does not seem performance sensitive to me. And it is opt-in.
> IMHO no need for extensive testing for performance regressions.
> 

Performance measurements where requested in some of the previous
versions because of the increased header size. But now, as this is
really opt-in, I'll drop that part from the cover letter.


Steffen

-- 
Pengutronix e.K.                | Dipl.-Inform. Steffen Trumtrar |
Steuerwalder Str. 21            | https://www.pengutronix.de/    |
31137 Hildesheim, Germany       | Phone: +49-5121-206917-0       |
Amtsgericht Hildesheim, HRA 2686| Fax:   +49-5121-206917-5555    |

      reply	other threads:[~2026-11-10 11:47 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-26  8:29 Steffen Trumtrar
2026-10-26  8:29 ` [PATCH RFC v4 1/6] virtio-net: move virtio_net_common_hdr to virtio_net.h Steffen Trumtrar
2026-10-26  8:29 ` [PATCH RFC v4 2/6] virtio-net: support receive timestamp Steffen Trumtrar
2026-11-01 15:04   ` Willem de Bruijn
2026-10-26  8:29 ` [PATCH RFC v4 3/6] virtio-net: assert header sizes Steffen Trumtrar
2026-10-26  8:29 ` [PATCH RFC v4 4/6] vhost-net: support VIRTIO_NET_F_RX_TSTAMP Steffen Trumtrar
2026-10-26  8:29 ` [PATCH RFC v4 5/6] virtio-net: add XDP rx timestamp metadata Steffen Trumtrar
2026-11-01 15:12   ` Willem de Bruijn
2026-10-26  8:29 ` [PATCH RFC v4 6/6] tun: add rx timestamp to the vnet header Steffen Trumtrar
2026-11-01 14:57 ` [PATCH RFC v4 0/6] virtio-net: add receive timestamp support Willem de Bruijn
2026-11-10 11:47   ` Steffen Trumtrar [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874ido29iy.fsf@pengutronix.de \
    --to=s.trumtrar@pengutronix.de \
    --cc=andrew+netdev@lunn.ch \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@kernel.org \
    --cc=eperezma@redhat.com \
    --cc=hawk@kernel.org \
    --cc=jasowangio@gmail.com \
    --cc=john.fastabend@gmail.com \
    --cc=kuba@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=richardcochran@gmail.com \
    --cc=sdf@fomichev.me \
    --cc=virtualization@lists.linux.dev \
    --cc=willemdebruijn.kernel@gmail.com \
    --cc=xuanzhuo@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®