Re: In PG12, query with float calculations is slower than PG11 - Mailing list pgsql-hackers

From Amit Langote
Subject Re: In PG12, query with float calculations is slower than PG11
Date
Msg-id CA+HiwqHzWXUVudG5VCwq_iq8PUhr5yGRNhcoL3JieFfVOhoTMw@mail.gmail.com
Whole thread Raw
In response to Re: In PG12, query with float calculations is slower than PG11  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
On Sat, Feb 8, 2020 at 3:13 AM Andres Freund <andres@anarazel.de> wrote:
> On 2020-02-07 17:17:21 +0900, Amit Langote wrote:
> > I did some tests using two relatively recent compilers: gcc 8 and
> > clang-7 and here are the results:
>
> Hm, these very much look like they've been done in an unoptimized build?
>
> >     40.62%  postgres  postgres           [.] ExecInterpExpr
> >      9.74%  postgres  postgres           [.] float8_accum
> >      6.12%  postgres  libc-2.17.so       [.] __isinf
> >      5.96%  postgres  postgres           [.] float8mul
> >      5.33%  postgres  postgres           [.] dsqrt
> >      3.90%  postgres  postgres           [.] ftod
> >      3.53%  postgres  postgres           [.] Float8GetDatum
> >      2.34%  postgres  postgres           [.] DatumGetFloat8
> >      2.15%  postgres  postgres           [.] AggCheckCallContext
> >      2.03%  postgres  postgres           [.] slot_deform_tuple
> >      1.95%  postgres  libm-2.17.so       [.] __sqrt
> >      1.19%  postgres  postgres           [.] check_float8_array
>
> > HEAD
> >
> > latency average = 549.071 ms
> >
> >     31.74%  postgres  postgres           [.] ExecInterpExpr
> >     11.02%  postgres  libc-2.17.so       [.] __isinf
> >     10.58%  postgres  postgres           [.] float8_accum
> >      4.84%  postgres  postgres           [.] check_float8_val
> >      4.66%  postgres  postgres           [.] dsqrt
> >      3.91%  postgres  postgres           [.] float8mul
> >      3.56%  postgres  postgres           [.] ftod
> >      3.26%  postgres  postgres           [.] Float8GetDatum
> >      2.91%  postgres  postgres           [.] float8_mul
> >      2.30%  postgres  postgres           [.] DatumGetFloat8
> >      2.19%  postgres  postgres           [.] slot_deform_heap_tuple
> >      1.81%  postgres  postgres           [.] AggCheckCallContext
> >      1.31%  postgres  libm-2.17.so       [.] __sqrt
> >      1.25%  postgres  postgres           [.] check_float8_array
>
> Because DatumGetFloat8, Float8GetDatum, etc aren't functions that
> normally stay separate.

Okay, fair.

Here are numbers after compiling with -O3:

gcc 8
=====

HEAD

latency average = 350.187 ms

    34.67%  postgres  postgres           [.] ExecInterpExpr
    20.94%  postgres  libc-2.17.so       [.] __isinf
    10.74%  postgres  postgres           [.] float8_accum
     8.22%  postgres  postgres           [.] dsqrt
     6.63%  postgres  postgres           [.] float8mul
     3.45%  postgres  postgres           [.] ftod
     2.32%  postgres  postgres           [.] tts_buffer_heap_getsomeattrs

HEAD + reverse-if-condition patch

latency average = 346.710 ms

    34.48%  postgres  postgres           [.] ExecInterpExpr
    21.00%  postgres  libc-2.17.so       [.] __isinf
    12.26%  postgres  postgres           [.] float8_accum
     8.31%  postgres  postgres           [.] dsqrt
     6.32%  postgres  postgres           [.] float8mul
     3.23%  postgres  postgres           [.] ftod
     2.25%  postgres  postgres           [.] tts_buffer_heap_getsomeattrs

HEAD + revert-to-macro patch

latency average = 297.493 ms

    39.25%  postgres  postgres           [.] ExecInterpExpr
    14.44%  postgres  postgres           [.] float8_accum
    11.02%  postgres  libc-2.17.so       [.] __isinf
     8.21%  postgres  postgres           [.] dsqrt
     5.55%  postgres  postgres           [.] float8mul
     4.15%  postgres  postgres           [.] ftod
     2.78%  postgres  postgres           [.] tts_buffer_heap_getsomeattrs

11.6

latency average = 290.301 ms

    42.78%  postgres  postgres            [.] ExecInterpExpr
    12.27%  postgres  postgres            [.] float8_accum
    12.12%  postgres  libc-2.17.so        [.] __isinf
     8.96%  postgres  postgres            [.] dsqrt
     5.77%  postgres  postgres            [.] float8mul
     3.94%  postgres  postgres            [.] ftod
     2.61%  postgres  postgres            [.] AggCheckCallContext


clang-7
=======

HEAD

latency average = 246.278 ms

    44.47%  postgres  postgres           [.] ExecInterpExpr
    14.56%  postgres  postgres           [.] float8_accum
     7.25%  postgres  postgres           [.] float8mul
     7.22%  postgres  postgres           [.] dsqrt
     5.40%  postgres  postgres           [.] ftod
     4.09%  postgres  postgres           [.] tts_buffer_heap_getsomeattrs
     2.20%  postgres  postgres           [.] check_float8_val

HEAD + reverse-if-condition patch

latency average = 240.212 ms

    45.49%  postgres  postgres           [.] ExecInterpExpr
    13.69%  postgres  postgres           [.] float8_accum
     8.32%  postgres  postgres           [.] dsqrt
     5.28%  postgres  postgres           [.] ftod
     5.19%  postgres  postgres           [.] float8mul
     3.68%  postgres  postgres           [.] tts_buffer_heap_getsomeattrs
     2.90%  postgres  postgres           [.] float8_mul

HEAD + revert-to-macro patch

latency average = 240.620 ms

    44.04%  postgres  postgres           [.] ExecInterpExpr
    13.72%  postgres  postgres           [.] float8_accum
     9.26%  postgres  postgres           [.] dsqrt
     5.30%  postgres  postgres           [.] ftod
     4.66%  postgres  postgres           [.] float8mul
     3.53%  postgres  postgres           [.] tts_buffer_heap_getsomeattrs
     3.39%  postgres  postgres           [.] float8_mul

11.6

latency average = 237.045 ms

    46.85%  postgres  postgres            [.] ExecInterpExpr
    11.39%  postgres  postgres            [.] float8_accum
     8.02%  postgres  postgres            [.] dsqrt
     7.29%  postgres  postgres            [.] slot_deform_tuple
     6.04%  postgres  postgres            [.] float8mul
     5.49%  postgres  postgres            [.] ftod

PG 12 is worse than PG 11 when compiled with gcc.

Thanks,
Amit



pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: Identifying user-created objects
Next
From: Masahiko Sawada
Date:
Subject: Re: Identifying user-created objects