Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc?

From: John Naylor <johncnaylorls(at)gmail(dot)com>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: David Geier <geidav(dot)pg(at)gmail(dot)com>, Lukas Fittl <lukas(at)fittl(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>
Subject: Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc?
Date: 2026-02-24 02:01:51
Message-ID: CANWCAZaO87jB8ZGzQZv4tppZOA-WOeW8aCiwvbkTgmx5k+SRYw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Feb 24, 2026 at 5:28 AM Andres Freund <andres(at)anarazel(dot)de> wrote:
> On 2026-02-23 16:24:57 +0100, David Geier wrote:
> > The code wasn't compiling properly on Windows because __x86_64__ is not
> > defined in Visual C++. I've changed the code to use
> >
> > #if defined(__x86_64__) || defined(_M_X64)
>
> Independently of this patchset I wonder if it'd be worth introducing a
> PG_ARCH_X64 or such, to avoid this kind of thing.

+1

I've already borrowed USE_SSE2 for this meaning in commit b9278871f,
but that's conflating two different things and I'd actually prefer the
above, plus one that includes 32-bit as well.

+static bool
+is_rdtscp_available()
+{
+ uint32 r[4] = {0, 0, 0, 0};
+
+#if defined(HAVE__GET_CPUID)
+ if (!__get_cpuid(0x80000001, &r[0], &r[1], &r[2], &r[3]))
+ return false;
+#elif defined(HAVE__CPUID)
+ __cpuid(r, 0x80000001);
+#else
+#error cpuid instruction not available
+#endif
+
+ return (r[3] & (1 << 27)) != 0;
+}

I'm hoping to centralize CPU-specific checks like the above:

https://www.postgresql.org/message-id/CANWCAZbKQ2im1r4ztcyfqNh_6gaJzyewabExYrkACNvMNyqxog%40mail.gmail.com

is_rdtscp_available() is an easy thing to delegate to my patch, but I
agree it would be easier if that was abstracted a bit more so that a
different leaf can be passed each time. The latter could also be used
to simplify the frequency and hypervisor stuff as well.

--
John Naylor
Amazon Web Services

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Nitin Motiani 2026-02-24 02:06:45 Re: [PATCH] Support reading large objects with pg_read_all_data
Previous Message Michael Paquier 2026-02-24 01:56:16 Re: Flush some statistics within running transactions