Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc? - Mailing list pgsql-hackers
From | Andres Freund |
---|---|
Subject | Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc? |
Date | |
Msg-id | 20230121190303.7xjiwdg3gvb62lu3@awork3.anarazel.de Whole thread Raw |
In response to | Re: Reduce timing overhead of EXPLAIN ANALYZE using rdtsc? (Andres Freund <andres@anarazel.de>) |
List | pgsql-hackers |
Hi, On 2023-01-20 21:31:57 -0800, Andres Freund wrote: > On 2023-01-20 20:16:13 -0800, Andres Freund wrote: > > I'm planning to push most of my changes soon, had hoped to get to it a bit > > sooner, but ... > > I pushed the int64-ification commits. There's an odd compilation failure on AIX. https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=hoverfly&dt=2023-01-21%2007%3A01%3A42 /opt/IBM/xlc/16.1.0/bin/xlc_r -D_LARGE_FILES=1 -DRANDOMIZE_ALLOCATED_MEMORY -qnoansialias -g -O2 -qmaxmem=33554432 -qsuppress=1500-010:1506-995-qsuppress=1506-010:1506-416:1506-450:1506-480:1506-481:1506-492:1506-944:1506-1264 -qinfo=all:nocnd:noeff:noext:nogot:noini:noord:nopar:noppc:norea:nouni:nouse-qinfo=nounset -qvisibility=hidden -I. -I. -I/opt/freeware/include/python3.5m-I../../../src/include -I/home/nm/sw/nopath/icu58.3-64/include -I/home/nm/sw/nopath/libxml2-64/include/libxml2 -I/home/nm/sw/nopath/uuid-64/include -I/home/nm/sw/nopath/openldap-64/include-I/home/nm/sw/nopath/icu58.3-64/include -I/home/nm/sw/nopath/libxml2-64/include -c -o plpy_cursorobject.o plpy_cursorobject.c "../../../src/include/portability/instr_time.h", line 116.9: 1506-304 (I) No function prototype given for "clock_gettime". "../../../src/include/portability/instr_time.h", line 116.23: 1506-045 (S) Undeclared identifier CLOCK_REALTIME. <builtin>: recipe for target 'plpy_cursorobject.o' failed but files including instr_time.h *do* build successfully, e.g. instrument.c: /opt/IBM/xlc/16.1.0/bin/xlc_r -D_LARGE_FILES=1 -DRANDOMIZE_ALLOCATED_MEMORY -qnoansialias -g -O2 -qmaxmem=33554432 -qsuppress=1500-010:1506-995-qsuppress=1506-010:1506-416:1506-450:1506-480:1506-481:1506-492:1506-944:1506-1264 -qinfo=all:nocnd:noeff:noext:nogot:noini:noord:nopar:noppc:norea:nouni:nouse-qinfo=nounset -I../../../src/include -I/home/nm/sw/nopath/icu58.3-64/include -I/home/nm/sw/nopath/libxml2-64/include/libxml2 -I/home/nm/sw/nopath/uuid-64/include-I/home/nm/sw/nopath/openldap-64/include -I/home/nm/sw/nopath/icu58.3-64/include -I/home/nm/sw/nopath/libxml2-64/include -c -o instrument.o instrument.c Before the change the clock_gettime() call was in a macro and thus could be referenced even without a prior declaration, as long as places using INSTR_TIME_SET_CURRENT() had all the necessary includes and defines. Argh: There's nice bit in plpython.h: /* * Include order should be: postgres.h, other postgres headers, plpython.h, * other plpython headers. (In practice, other plpython headers will also * include this file, so that they can compile standalone.) */ #ifndef POSTGRES_H #error postgres.h must be included before plpython.h #endif /* * Undefine some things that get (re)defined in the Python headers. They aren't * used by the PL/Python code, and all PostgreSQL headers should be included * earlier, so this should be pretty safe. */ #undef _POSIX_C_SOURCE #undef _XOPEN_SOURCE the relevant stuff in time.h is indeed guarded by #if _XOPEN_SOURCE>=500 I don't think the plpython actually code follows the rule about including all postgres headers earlier. plpy_typeio.h: #include "access/htup.h" #include "fmgr.h" #include "plpython.h" #include "utils/typcache.h" plpy_curserobject.c: #include "access/xact.h" #include "catalog/pg_type.h" #include "mb/pg_wchar.h" #include "plpy_cursorobject.h" #include "plpy_elog.h" #include "plpy_main.h" #include "plpy_planobject.h" #include "plpy_procedure.h" #include "plpy_resultobject.h" #include "plpy_spi.h" #include "plpython.h" #include "utils/memutils.h" It strikes me as a uh, not good idea to undefine _POSIX_C_SOURCE, _XOPEN_SOURCE. The include order aspect was perhaps feasible when there just was plpython.c, but with the split into many different C files and many headers, it seems hard to maintain. There's a lot of violations afaics. The undefines were added in a11cf433413, the split in 147c2482542. Greetings, Andres Freund
pgsql-hackers by date: