Re: pgsql: Improve performance of SendRowDescriptionMessage.

Noah Misch <noah@leadboat.com>

From: Noah Misch <noah@leadboat.com>
To: Andres Freund <andres@anarazel.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-committers@postgresql.org
Date: 2017-10-13T02:35:36Z
Lists: pgsql-hackers
On Thu, Oct 12, 2017 at 04:08:44PM -0700, Andres Freund wrote:
> So we've two animals (hornet, sungazer) that are:
> #define SIZEOF_SIZE_T 8
> #define WORDS_BIGENDIAN 1
> #define restrict __restrict
> 
> one compiled with xlc that fails and one with gcc that succeeds. I'm
> hesitant to reach for that, but I wonder if there's a compiler
> bug. Alternatively there could be some undefined behaviour here that
> only triggers on xlc 64bit, but I'm not quite seeing it.
> 
> Noah, any chance you could force restrict to off on that animal?

I can confirm it allows "make check" to pass.  Specifically, I did this
against commit 91d5f1a:

--- src/include/pg_config.h~    2017-10-12 18:11:33.000000000 -0700
+++ src/include/pg_config.h     2017-10-12 18:22:34.000000000 -0700
@@ -929 +929 @@
- #define pg_restrict __restrict
+ #define pg_restrict
@@ -934 +934 @@
- #define restrict __restrict
+ #define restrict

I have no reason to believe this is specific to hornet's installation, so I
recommend against altering hornet's configuration.  It's too likely that the
next xlc user will need to do the same thing.  I don't see the problem with
xlc 13.1.3, though.

> Otherwise I can push a platform fix that disables it.

This sounds reasonable.

nm


Commits

  1. Force "restrict" not to be used when compiling with xlc.

  2. Rely on sizeof(typename) rather than sizeof(variable) in pqformat.h.

  3. Use C99 restrict via pg_restrict, rather than restrict directly.

  4. Improve performance of SendRowDescriptionMessage.

  5. Partially flatten struct tupleDesc so that it can be used in DSM.

  6. Remove useless duplicate inclusions of system header files.