Re: Linux likely() unlikely() for PostgreSQL

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: Linux likely() unlikely() for PostgreSQL
Дата
Msg-id 20240704203616.nlmj6q27cmrjaabn@alap3.anarazel.de
обсуждение исходный текст
Ответ на Re: Linux likely() unlikely() for PostgreSQL  (Matthias van de Meent <boekewurm+postgres@gmail.com>)
Список pgsql-hackers
Hi,

On 2024-06-30 16:47:02 +0200, Matthias van de Meent wrote:
> While hooks are generally not installed by default, I would advise
> against marking the hooks as unlikely, as that would unfairly penalize
> the performance of extensions that do utilise this hook (or hooks in
> general when applied to all hooks).

I don't think this could be fairly described as penalizing use of the hooks.
likely()/unlikely() isn't the same as __attribute__((cold)).

See https://godbolt.org/z/qdnz65ez8 - only the version using
__attribute__((cold)) gets some code put into a separate section.


What's the possible argument for saying that the generated code should be
optimized for the presence of hooks?


Note that I'm not saying that we ought to use likely() here (nor the
opposite), just that this argument for not doing so doesn't seem to hold
water.


> If this code is hot enough, then CPU branch prediction will likely
> correctly predict this branch correctly after a small amount of time
> (as hook null-ness is generally approximately constant for the
> duration of a backend lifetime);

IMO that's not quite right. The branch predictor has a limited
capacity. Because postgres executes a lot of code it frequently executes
"outer" code without benefit of the branch predictor, just due to the amount
of code that was executed - even if the outer code matters for performance. In
which case the static branch prediction can matter (i.e. backward branches are
assumed to be taken, forward branches not).


> while if this code is cold, the benefit is not worth the additional binary
> size overhead of the out-of-lined code section.

There wouldn't be any such overhead, afaict.

Greetings,

Andres Freund



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

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: Cleanup: PGProc->links doesn't need to be the first field anymore
Следующее
От: Andres Freund
Дата:
Сообщение: Re: Pluggable cumulative statistics