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