Re: Query is over 2x slower with jit=on
Amit Khandekar <amitdkhan.pg@gmail.com>
From: Amit Khandekar <amitdkhan.pg@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: Andreas Joseph Krogh <andreas@visena.com>,
Robert Haas <robertmhaas@gmail.com>, Alvaro Herrera <alvherre@2ndquadrant.com>,
"Jonathan S. Katz" <jkatz@postgresql.org>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-09-10T10:12:55Z
Lists: pgsql-hackers
Attachments
- jit_instr_account_workers.patch (application/octet-stream) patch
On 22 August 2018 at 22:21, Andres Freund <andres@anarazel.de> wrote: > On 2018-08-22 18:39:18 +0200, Andreas Joseph Krogh wrote: >> Just to be clear; The query really runs slower (wall-clock time), it's not >> just the timing. > > I bet it's not actually running slower, it "just" takes longer to start > up due to the JITing in each worker. I suspect what we should do is to > multiple the cost limits by the number of workers, to model that. But > without the fixed instrumentation that's harder to see... Attached is a patch that accumulates the per-worker jit counters into the leader process. Similar to SharedExecutorInstrumentation, I added another shared memory segment SharedJitInstrumenation, which is used to accumulate each of the workers' jit instrumentation into the leader's. Earlier I was thinking we can have a common SharedExecutorInstrumentation structure that will have both instrumentions, one usual instrumentation, and the other jit instrumentation. But then thought that fields in SharedExecutorInstrumentation are mostly not relevant to JitInstrumentation. So kept a separate segment in the shared memory. It may happen that the jit context does not get created at the backend because there was no jit compile done, but at the workers it got created. In that case, before retrieving the jit data from the workers, the estate->es_jit needs to be allocated at the backend. For that, I had to have a new function jit_create_context(), and for that a new jit provider callback function create_context(). I used the exsiting llvm_create_context() for this callback function. JitContext now has those counters in a separate JitInstrumentation structure, so that the same structure can be shared by SharedJitInstrumentation and JitContext. ----------------- I think we better show per-worker jit info also. The current patch does not show that. I think it would be easy to continue on the patch to show per-worker info also. Under the Gather node, we can show per-worker jit counters. I think this would be useful too, besides the cumulative figures in the leader process. Comments ? -- Thanks, -Amit Khandekar EnterpriseDB Corporation The Postgres Database Company
Commits
-
Fix issues around EXPLAIN with JIT.
- e97c4d967ba5 11.0 landed
- c03c1449c092 12.0 landed
-
Collect JIT instrumentation from workers.
- e63441c3f5ca 11.0 landed
- 33001fd7a707 12.0 landed
-
Make EXPLAIN output for JIT compilation more dense.
- 6859bd2632d8 11.0 landed
- 52050ad8ebec 12.0 landed
-
Save/restore SPI's global variables in SPI_connect() and SPI_finish().
- 825f10fbda7a 11.0 cited
-
Rationalize handling of single and double quotes in bootstrap data.
- 55d26ff638f0 11.0 cited