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 по дате отправления: