Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc?
David Geier <geidav.pg@gmail.com>
From: David Geier <geidav.pg@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: Lukas Fittl <lukas@fittl.com>, Pavel Stehule <pavel.stehule@gmail.com>,
Tomas Vondra <tomas.vondra@enterprisedb.com>, vignesh C
<vignesh21@gmail.com>, Michael Paquier <michael@paquier.xyz>,
Ibrar Ahmed <ibrar.ahmad@gmail.com>, Maciek Sakrejda <m.sakrejda@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-11-19T07:25:58Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
pg_test_timing: Also test RDTSC[P] timing, report time source, TSC frequency
- 16fca4825483 19 (unreleased) landed
-
Allow retrieving x86 TSC frequency/flags from CPUID
- bcb2cf41f964 19 (unreleased) landed
-
instrumentation: Standardize ticks to nanosecond conversion method
- 0022622c93d9 19 (unreleased) landed
-
instrumentation: Use Time-Stamp Counter on x86-64 to lower overhead
- 294520c44487 19 (unreleased) landed
-
Zero initialize uses of instr_time about to trigger compiler warnings
- 25b2aba0c3a5 16.0 landed
-
instr_time: Represent time as an int64 on all platforms
- 03023a2664f8 16.0 landed
-
Add 250c8ee07ed to git-blame-ignore-revs
- ff23b592ad66 16.0 cited
On 22.10.2025 15:32, Andres Freund wrote: > Hi, > > On 2025-09-01 12:36:24 +0200, David Geier wrote: >>> Open questions I have: >>> - Could we rely on checking whether the TSC timesource is invariant (via >>> CPUID), instead of relying on Linux choosing it as a clocksource? >> >> Why do you want to do that? Are you concerned that Linux might pick a >> different clock source even though invariant TSC is available? > > Not sure about Lukas, but I'm slightly concerned about making this a linux > specific mechanism unnecessarily. > Considering [1], Lukas seems to share my concerns that building or own has the risk of missing cases. > >> We could code our own check but looking at the Linux kernel code, this >> is a bit more involved if we want to do it completely right. They check >> e.g. if the TSC is also synchronized across different CPUs, which is not >> the case if they're on different chassis (see unsynchronized_tsc() -> >> apic_is_clustered_box()). > > I think Linux has higher fidelity requirements than our instrumentation usage > - with linux an inaccurate clock would lead to broken timers, wrong wall clock > etc, whereas for us it's just a skewed instrumentation result. That's true. As long as we use the RDTSCP basd code only in places where it doesn't affect "correctness" it's not the end of the world if they're skewed. I'll give it a try to code our own detection mechanism and will share findings here. Then we can make a call based on the learnings. -- David Geier [1] https://www.postgresql.org/message-id/CAP53Pky-BN0Ui%2BA9no3TsU%3DGoMTFpxYSWYtp_LVaDH%3Dy69BxNg%40mail.gmail.com