From: | David Rowley <david(dot)rowley(at)2ndquadrant(dot)com> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: An unlikely() experiment |
Date: | 2017-10-30 10:56:20 |
Message-ID: | CAKJS1f8O4y0=mv57CE=abWV8BcCFfXVfW7koOrbHx8j4m0q=+w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 30 October 2017 at 22:44, Andres Freund <andres(at)anarazel(dot)de> wrote:
> On 2017-10-30 22:39:01 +1300, David Rowley wrote:
>> Today I was thinking, to get around that issue, we might be able to
>> generate another thin wrapper around elog_start() and mark that as
>> __attribute__((cold)) and fudge the macro a bit to call that function
>> instead if it can detect a compile time const level >= ERROR. I've not
>> looked at the code again to remind myself if that would be possible.
>
> Yes, that's what I was thinking too. Add a elog_fatal() wrapping
> elog_finish(), and move the if (__builtin_constant_p(elevel)) branch a
> bit earlier, and that should work. Similar with errstart_fatal() for
> ereport().
This may have been too good to be true. I can't seem to get it to work
and I think it's because the function is inside the do{}while(0) and
the if (__builtin_constant_p(elevel) && (elevel) >= ERROR) branch,
which appears to mean that:
"The paths leading to call of cold functions within code are marked as
unlikely by the branch prediction mechanism" [1]
is not the path that the macro is in in the calling function, like we
might have hoped.
I can get the assembly to change if I put an unlikely() around the
condition or if I go and vandalize the macro to become:
#define elog(elevel, ...) \
elog_start_error(__FILE__, __LINE__, PG_FUNCNAME_MACRO)
[1] https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Function-Attributes.html
--
David Rowley http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Oleg Bartunov | 2017-10-30 11:05:43 | Re: How to implement a SP-GiST index as a extension module? |
Previous Message | Michael Paquier | 2017-10-30 10:54:24 | Re: pow support for pgbench |