One more problem with JIT
От | Konstantin Knizhnik |
---|---|
Тема | One more problem with JIT |
Дата | |
Msg-id | b0900d21-594a-57a7-d345-9f8e3987e068@garret.ru обсуждение исходный текст |
Список | pgsql-hackers |
Hi hackers, I am using pg_embedding extension for Postgres which implements HNSW index (some kind of ANN search). Search query looks something like this: SELECT _id FROM documents ORDER BY openai <=> ARRAY[0.024466066, -0.011110042, -0.0012917554,... , -0.008700027] LIMIT 1; I do not put all query here because vector contains 1536 elements. The query plans is straightforward: Limit (cost=4007500.00..4007502.06 rows=1 width=33) -> Index Scan using pgembedding_hnsw_idx on documents (cost=4007500.00..6064544.00 rows=1000000 width=33) Order By: (openai <=> '{0.024466066,-0.011110042,-0.0012917554,-0.025349319,-0.017500998,0.015570462,-0.015835438,-0.0067442562,0.0015977388,-0.034... Planning Time: 1.276 ms JIT: Functions: 5 Options: Inlining true, Optimization true, Expressions true, Deforming true Timing: Generation 0.289 ms, Inlining 3.752 ms, Optimization 34.502 ms, Emission 19.078 ms, Total 57.621 ms Execution Time: 70.850 ms without JIT: Planning Time: 0.472 ms Execution Time: 13.300 ms The problem is that JIT slowdown execution of this query 4x times: with default setting it is 70 msec, with jit=off - 13 msec. I wonder why do we ever try to use JIT for index scan, especially for user defined index where no function can be inlined? Why not to restrict JIT just to seqscan plan? But the way in this particular case enable_seqscan=off... May be it is naive suggestions, but 5x slowdown doesn't seems like right behavior in any case. Profile of query execution is the following: - 78.52% 0.00% postgres postgres [.] standard_ExecutorRun - 78.52% standard_ExecutorRun - 55.38% 0000561dc27c89dc - 55.38% 0000561dc27c89dc 0x7fc3a58dd731 - llvm_get_function + 37.66% LLVMRunPassManager + 14.99% LLVMOrcLLJITLookup + 0.91% llvm_inline 0.90% llvm::PassManagerBuilder::populateModulePassManager + 0.79% LLVMRunFunctionPassManager - 22.79% 0000561dc27c89dc - ExecScan - 22.76% 0000561dc27c89dc index_getnext_tid - hnsw_gettuple - 22.76% hnsw_search - 22.72% searchKnn + 22.29% searchBaseLayer Version of Postgres: Ubuntu 15.3-1.pgdg22.04+1)
В списке pgsql-hackers по дате отправления: