Netdev List
 help / color / mirror / Atom feed
From: David Woodhouse <dwmw2@infradead.org>
To: Rodolfo Giometti <giometti@enneenne.com>,
	Miroslav Lichvar <mlichvar@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>,
	Andrew Lunn	 <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet	 <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Paolo Abeni	 <pabeni@redhat.com>,
	John Stultz <jstultz@google.com>,
	Thomas Gleixner	 <tglx@kernel.org>,
	Stephen Boyd <sboyd@kernel.org>,
	 linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	Alexander Gordeev	 <agordeev@linux.ibm.com>
Subject: Re: [PATCH v4 3/4] pps: Always use ktime_get_snapshot_id() for pps_get_ts()
Date: Fri, 02 Oct 2026 13:29:45 +0100	[thread overview]
Message-ID: <777d19602ed1868abbd3d3ef3a4e78a8688d4a17.camel@infradead.org> (raw)
In-Reply-To: <24e8134b35cc8be26606d7472295cdb43ea6b38a.camel@infradead.org>

[-- Attachment #1: Type: text/plain, Size: 3471 bytes --]

On Fri, 2026-10-02 at 10:07 +0100, David Woodhouse wrote:
> 
> I've modified the spin code to take the shape I outlined in email last
> night, just capturing the *counter* bracketing the GPIO read and then
> converting it to 'time' later. I'll have results in a few hours.

That one got to 5 hours so I harvested it. I accidentally ran it
tickless but that doesn't really matter because all of the tickless
accounting issues are basically resolved anyway *and* the poll involves
waking up just before the top of every second to spin anyway, so it
*isn't* idle when the pulses come in.

 • https://david.woodhou.se/ntptest-r64/spin1-tickless-1hz/

It doesn't make a lot of difference to the overall statistics. The
outliers are down, from ±1100 to ±800 ns (negative because if we sync
to a late one, then a subsequent pulse appears "early"). I think that
improvement is because of the timekeeper seqcount retry which will bite
*either* ktime_get_real_ns() or ktime_get_snapshot_id(), and which is
gone in my 'spin1' version which takes it all out of the critical path.

    ┌────────────────────────────┬─────┬──────┬──────┬──────┬─────┐
    │ capture method             │ p50 │  p95 │  p99 │  max │   σ │
    ├────────────────────────────┼─────┼──────┼──────┼──────┼─────┤
    │ pps-gpio (IRQ)             │  84 │ 1206 │ 4013 │ 4889 │ 688 │
    │ polling, stamp after edge  │ 206 │  536 │  665 │ 1106 │ 286 │
    │ polling, bracketed counter │ 206 │  545 │  647 │  811 │ 286 │
    │ entry.S counter capture    │  46 │  109 │  135 │  206 │  58 │
    └────────────────────────────┴─────┴──────┴──────┴──────┴─────┘

I think the remaining jitter is largely due to the time it takes, in
the "tight" polling loop, to call gpio_read(). That's twice what I
estimated — it's 600ns. I'm running a quick test of reading the MMIO
directly in the loop... even that is still about 400ns on this
hardware, which isn't going to move the needle very much either.

The interrupt path — and capturing the counter in entry.S — remains the
winner by far. I'm going to do a run of that in a *live* system. My
existing test runs were targeting the tickless behaviour and
deliberately wanted the system to be as idle as possible, but activity
which causes interrupts to be disabled could push the entry.S hack back
down the leaderboard.

But that ends up being all about the *outliers*, and we already said we
need to do a better job of filtering those. With proper filtering, the
occasional pulse being rejected because we had interrupts disabled
shouldn't *matter*.

FWIW my gpio-spin-on-MMIO running now also seems to show a significant
correlation on outliers. For those samples where the half-delta between
the counter before and after the read is two cycles, the p50 phase
offset is 80ns, while when it's three cycles, the p50 is 175ns. We
could just throw *all* of the samples with a wider bracket away (72 of
112 samples, in the abortive 2-minute run before I fixed something and
restarted it). We're better off without them.


[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 6179 bytes --]

  reply	other threads:[~2026-10-02 12:29 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-29 20:56 [PATCH v4 0/4] Add ntp_error to clock snapshot, enable NTP_PPS on tickless kernel David Woodhouse
2026-08-29 20:56 ` [PATCH v4 1/4] timekeeping: Apply extrapolated ntp_error to clock snapshots David Woodhouse
2026-08-29 20:57 ` [PATCH v4 2/4] pps: Drop the !NO_HZ_COMMON dependency from NTP_PPS David Woodhouse
2026-09-01 15:35   ` Rodolfo Giometti
2026-09-02  0:13     ` David Woodhouse
2026-09-28 13:37     ` David Woodhouse
2026-09-28 16:41       ` Rodolfo Giometti
2026-09-28 19:28         ` David Woodhouse
2026-09-29  6:33           ` Rodolfo Giometti
2026-09-29  9:32             ` David Woodhouse
2026-09-29 11:48               ` Rodolfo Giometti
2026-09-29 12:02                 ` David Woodhouse
2026-09-30  1:28                 ` David Woodhouse
2026-09-30 12:57                   ` Rodolfo Giometti
2026-09-30 10:37                 ` David Woodhouse
2026-09-30 12:57                   ` Rodolfo Giometti
2026-09-30 14:05                     ` David Woodhouse
2026-09-30 18:24                       ` David Woodhouse
2026-10-01  8:20                         ` Rodolfo Giometti
2026-10-01  9:08                           ` David Woodhouse
2026-08-29 20:57 ` [PATCH v4 3/4] pps: Always use ktime_get_snapshot_id() for pps_get_ts() David Woodhouse
2026-09-01 15:35   ` Rodolfo Giometti
2026-09-01 23:56     ` David Woodhouse
2026-09-26 20:38     ` David Woodhouse
2026-09-28  7:58       ` Rodolfo Giometti
2026-09-28 12:59         ` David Woodhouse
2026-09-28 16:41           ` Rodolfo Giometti
2026-10-01 13:14         ` Miroslav Lichvar
2026-10-01 15:38           ` David Woodhouse
2026-10-02  7:04           ` Rodolfo Giometti
2026-10-02  9:07             ` David Woodhouse
2026-10-02 12:29               ` David Woodhouse [this message]
2026-10-02 13:44                 ` David Woodhouse
2026-10-03 11:29                   ` David Woodhouse
2026-10-05  9:16                   ` Miroslav Lichvar
2026-08-29 20:57 ` [PATCH v4 4/4] [DO NOT MERGE] ptp: ptp_vmclock: Add simulated 1PPS support David Woodhouse
2026-09-01 15:35 ` [PATCH v4 0/4] Add ntp_error to clock snapshot, enable NTP_PPS on tickless kernel Rodolfo Giometti
2026-09-01 23:37   ` David Woodhouse

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=777d19602ed1868abbd3d3ef3a4e78a8688d4a17.camel@infradead.org \
    --to=dwmw2@infradead.org \
    --cc=agordeev@linux.ibm.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=giometti@enneenne.com \
    --cc=jstultz@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlichvar@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=richardcochran@gmail.com \
    --cc=sboyd@kernel.org \
    --cc=tglx@kernel.org \
    /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