pgsql: llvmjit: Use explicit LLVMContextRef for inlining

Поиск
Список
Период
Сортировка
От Daniel Gustafsson
Тема pgsql: llvmjit: Use explicit LLVMContextRef for inlining
Дата
Msg-id E1r3wSk-005s3g-JI@gemulon.postgresql.org
обсуждение исходный текст
Ответы Re: pgsql: llvmjit: Use explicit LLVMContextRef for inlining  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-committers
llvmjit: Use explicit LLVMContextRef for inlining

When performing inlining LLVM unfortunately "leaks" types (the
types survive and are usable, but a new round of inlining will
recreate new structurally equivalent types). This accumulation
will over time amount to a memory leak which for some queries
can be large enough to trigger the OOM process killer.

To avoid accumulation of types, all IR related data is stored
in an LLVMContextRef which is dropped and recreated in order
to release all types.  Dropping and recreating incurs overhead,
so it will be done only after 100 queries. This is a heuristic
which might be revisited, but until we can get the size of the
context from LLVM we are flying a bit blind.

This issue has been reported several times, there may be more
references to it in the archives on top of the threads linked
below.

This is a backpatch of 9dce22033d5 to all supported branches.

Reported-By: Justin Pryzby <pryzby@telsasoft.com>
Reported-By: Kurt Roeckx <kurt@roeckx.be>
Reported-By: Jaime Casanova <jcasanov@systemguards.com.ec>
Reported-By: Lauri Laanmets <pcspets@gmail.com>
Author: Andres Freund and Daniel Gustafsson
Discussion: https://postgr.es/m/7acc8678-df5f-4923-9cf6-e843131ae89d@www.fastmail.com
Discussion: https://postgr.es/m/20201218235607.GC30237@telsasoft.com
Discussion: https://postgr.es/m/CAPH-tTxLf44s3CvUUtQpkDr1D8Hxqc2NGDzGXS1ODsfiJ6WSqA@mail.gmail.com
Backpatch-through: v12

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/3b991f81c45720515144b928bb8d1f03577628f1

Modified Files
--------------
src/backend/jit/llvm/llvmjit.c          | 141 ++++++++++++++++++++++++++++----
src/backend/jit/llvm/llvmjit_deform.c   |  77 ++++++++---------
src/backend/jit/llvm/llvmjit_expr.c     |  72 ++++++++--------
src/backend/jit/llvm/llvmjit_inline.cpp |  33 +++++---
src/include/jit/llvmjit.h               |   8 ++
src/include/jit/llvmjit_emit.h          |  30 ++++---
6 files changed, 252 insertions(+), 109 deletions(-)


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

Предыдущее
От: Daniel Gustafsson
Дата:
Сообщение: pgsql: Register llvm_shutdown using on_proc_exit, not before_shmem_exit
Следующее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: pgcrypto: Allow tests to pass in OpenSSL FIPS mode