Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc?

From: Andres Freund <andres(at)anarazel(dot)de>
To: Lukas Fittl <lukas(at)fittl(dot)com>
Cc: John Naylor <johncnaylorls(at)gmail(dot)com>, Jakub Wartak <jakub(dot)wartak(at)enterprisedb(dot)com>, Hannu Krosing <hannuk(at)google(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, vignesh C <vignesh21(at)gmail(dot)com>, Michael Paquier <michael(at)paquier(dot)xyz>, Ibrar Ahmed <ibrar(dot)ahmad(at)gmail(dot)com>, Maciek Sakrejda <m(dot)sakrejda(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, David Geier <geidav(dot)pg(at)gmail(dot)com>
Subject: Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc?
Date: 2026-04-07 21:18:53
Message-ID: cuc74mdyyougmnvei4voqe4tzvotubgaibpdvs4limanpxnhve@vx4uzmvnz7ix
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 2026-04-07 11:24:20 -0700, Lukas Fittl wrote:
> > I've pushed 0001, 0002, 0003.
>
> Yay! Thank you for pushing :)
>
> And thank you everyone on this thread for countless reviews, and to
> David for writing some essential parts of this earlier.

Seconded!

> > There's one minor documentation issue in 0004 that I wanted to look at before
> > pushing (and I need to switch to something else for a bit). The rephrasing
> > gets rid of
> >
> > - [...] , with the worst case somewhere between 32768 and
> > - 65535 nanoseconds. In the second block, we can see that typical loop
> > - time is 16 nanoseconds, and the readings appear to have full nanosecond
> > - precision.
> >
> > I don't mind loosing the first sentence, but the second one might be useful to
> > somebody?
>
> Hm, yeah, you're right. What if we word like this:
>
> <para>
> The example results below show system clock timing where 99.99% of loops
> took between 16 and 63 nanoseconds. In the second block, we can see that
> the typical loop time is 40 nanoseconds, and the readings appear to have
> full nanosecond precision. Following the system clock results, the
> <acronym>TSC</acronym> clock source results are shown. The
> <command>RDTSCP</command> instruction shows most loops completing in
> 20&ndash;30 nanoseconds, while the <command>RDTSC</command> instruction
> is the fastest with an average loop time of 20 nanoseconds. In this
> example the <acronym>TSC</acronym> clock source will be used by default,
> but can be disabled by setting <varname>timing_clock_source</varname> to
> <literal>system</literal>.
> </para>

Works.

Before pushing I vaccilated a bit about whether to replace the track_io_timing
reference in

+ On platforms that support the <acronym>TSC</acronym> clock source,
+ additional output sections are shown for the <command>RDTSCP</command>
+ instruction (used for general timing needs, such as
+ <varname>track_io_timing</varname>) and the <command>RDTSC</command>
+ instruction (used for <command>EXPLAIN ANALYZE</command>). At the end

given it's one of the more likely cases to be converted to the fast
timestamping. But in a decision I may live to regret, I deferred coming up
with a good way to phrase the difference between "per node timing" and
"overall query duration".

Pushed.

Yay!

Took only 6 years :)

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2026-04-07 21:21:19 Re: pg_plan_advice
Previous Message Andres Freund 2026-04-07 21:01:43 Re: Unfortunate pushing down of expressions below sort