Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc?
Lukas Fittl <lukas@fittl.com>
Hi, Some minor follow up things worth noting: (1) I discussed with Andres off-list today if there would be a problem with TSC instructions being disabled for user mode, since there is technically a way to restrict them to kernel mode only. In my testing this won't be a practical problem on Linux, since vDSO already directly calls RDTSCP, and so if you disallow TSC through "prctl(PR_SET_TSC, PR_TSC_SIGSEGV)" pg_test_timing does crash - but it crashes in the clock_gettime call, i.e. would do so even without any direct TSC use in the picture. Presumably you could change the Linux clocksource to avoid that. I also did some testing with containers that use seccomp profiles (e.g. Docker), and there are no issues that I can found beyond what would have already been a problem before. If this was a practical problem, we could consider moving the "pg_initialize_timing_tsc" call in pg_set_timing_clock_source to be inside the switch cases (like Andres suggested upthread, but did not change in the commit to be clear), that way a user could start Postgres with timing_clock_source=system and not have any RDTSC(P) instructions run at all. (2) The pg_test_timing documentation has an existing link to this wiki page: https://wiki.postgresql.org/wiki/Pg_test_timing -- it seems that page does talk about certain things that are not covered in the main documentation, but I'm not really sure why that can't be in the main docs. Do we want to keep maintaining that wiki page? (maybe we should just remove that link, and move anything we consider critical to the main docs?) (3) I will move the patch to add ARM support to a new thread sometime before the PG20 branch opens, so we can discuss that further. With that, I've marked the commitfest entry as committed. Thanks, Lukas -- Lukas Fittl
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
pg_test_timing: Show additional TSC clock source debug info
- 5ba34f6dc838 19 (unreleased) landed
-
instrumentation: Avoid CPUID 0x15/0x16 for Hypervisor TSC frequency
- 7fc36c5db550 19 (unreleased) landed
-
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
-
Check for __cpuidex and __get_cpuid_count separately
- effaa464afd3 19 (unreleased) landed
-
pg_test_timing: Reduce per-loop overhead
- 82c0cb4e672d 19 (unreleased) landed
-
Refactor handling of x86 CPUID instructions
- be6a7494d2e3 19 (unreleased) landed
-
instrumentation: Drop INSTR_TIME_SET_CURRENT_LAZY macro
- 9d6294c09ed0 19 (unreleased) landed
-
Rename pg_crc32c_sse42_choose.c for general purpose
- b9278871f991 19 (unreleased) cited
-
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