pgsql: Improve compiler code layout in elog/ereport ERROR calls

Поиск
Список
Период
Сортировка
От David Rowley
Тема pgsql: Improve compiler code layout in elog/ereport ERROR calls
Дата
Msg-id E1khKtU-0006Eh-QH@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Improve compiler code layout in elog/ereport ERROR calls

Here we use a bit of preprocessor trickery to coax supporting compilers
into laying out their generated code so that the code that's in the same
branch as elog(ERROR)/ereport(ERROR) calls is moved away from the hot
path.  Effectively, this reduces the size of the hot code meaning that it
can sit on fewer cache lines.

Performance improvements of between 10-15% have been seen on highly CPU
bound workloads using pgbench's TPC-b benchmark.

What's achieved here is very similar to putting the error condition inside
an unlikely() macro. For example;

if (unlikely(x < 0))
    elog(ERROR, "invalid x value");

now there's no need to make use of unlikely() here as the common macro
used by elog and ereport will now see that elevel is >= ERROR and make use
of a pg_attribute_cold marked version of errstart().

When elevel < ERROR or if it cannot be determined to be constant, the
original behavior is maintained.

Author: David Rowley
Reviewed-by: Andres Freund, Peter Eisentraut
Discussion: https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/913ec71d682e99852cc188a7edbdccd02d42b4b3

Modified Files
--------------
src/backend/utils/error/elog.c | 13 +++++++++++++
src/include/utils/elog.h       | 14 +++++++++++++-
2 files changed, 26 insertions(+), 1 deletion(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Define pg_attribute_cold and pg_attribute_hot macros
Следующее
От: David Rowley
Дата:
Сообщение: pgsql: Fix unportable usage of __has_attribute