Re: effect of JIT tuple deform?
От | Pierre Ducroquet |
---|---|
Тема | Re: effect of JIT tuple deform? |
Дата | |
Msg-id | 26396168.i4JYKgJa0U@peanuts2 обсуждение исходный текст |
Ответ на | Re: effect of JIT tuple deform? (Pavel Stehule <pavel.stehule@gmail.com>) |
Список | pgsql-hackers |
On Wednesday, June 27, 2018 5:38:31 PM CEST Pavel Stehule wrote: > 2018-06-27 17:19 GMT+02:00 Tomas Vondra <tomas.vondra@2ndquadrant.com>: > > On 06/26/2018 09:25 PM, Pavel Stehule wrote: > >> Hi > >> > >> ... > >> > >> So I am able to see effect of jit_tuple_deforming, and very well, but > >> only if optimization is active. When optimization is not active then > >> jit_tuple_deforming does slowdown. > >> > >> So maybe a usage of jit_tuple_deforming can be conditioned by > >> jit_optimization? > > > > Can you share the test case and some detail about the hardware and > > PostgreSQL configuration? > > I did very simple test > > > 0. > > master branch without asserts, shared buffer to 1GB > tested on Lenovo T520 8GB RAM 8CPU, i7 > Fedora 28, gcc CFLAGS="-ggdb -Og -g3 -fno-omit-frame-pointer" --with-llvm > > 1. > > select 'create table wt(' || string_agg(format('%I int', 'c' || i),',') || > ')' from generate_series(1,100) g(i) \gexec > > > 2. > > begin; > select 'insert into wt values(' || (select > string_agg((random()*10000)::int::text,',') from generate_series(1,j - j + > 100) g(i)) || ')' from generate_series(1,1000000) gg(j) \gexec > insert into wt select * from wt; > commit; > > 3. > > set max_paralel_workers to 0; -- the effect of JIT will be more visible > > analyze wt; > \timing > > select sum(c99) from wt; > > I tested some combination of: > > jit: off on > jit_inline_above_cost: 0, 10000000000000 > jit_optimize_above_cost: 0, 10000000000000 > jit_tuple_deforming: on, off > > > My primitive tests shows nice possitive effect of jit_tuple_deforming if > jit optimization is active. When jit optimization is not active, then > jit_tuple_deforming did slowdown in my test. > > So there is range of costs between 100000 and 500000 where > jit_tuple_deforming didn't work well (without optimization) > > I am limmited by small memory of my notebook - when I created table larger > than 3GB, then I got IO waits on my crypted disc, and any effect of JIT was > eliminated. > > Regards > > Pavel Hi I have studied this case a bit, and I think too that there is something wrong here. Right now, jit_optimize is a -O3. It's really expensive, and triggering it here is not the right solution. In the attached patch, I force a -O1 for tuple deforming. With your test case, on my computer, the results are : - no jit : 850ms - jit with tuple deforming without optimizations : 1650 ms (1.5ms spent optimizing) - jit without tuple deforming : 820ms (0.2ms) - jit with tuple deforming with optimization (-O3) : 770ms (105ms) - jit with tuple deforming with patch (-O1) : 725ms (54ms) I will look at the generated code for tuple deforming, but I think we should pre-optimize the LLVM bytecode if we do not want to involve the LLVM optimization passes. Regards Pierre
Вложения
В списке pgsql-hackers по дате отправления: