Re: JIT compiling with LLVM v12.2

From: Andres Freund <andres(at)anarazel(dot)de>
To: Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>
Cc: Stephen Frost <sfrost(at)snowman(dot)net>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: JIT compiling with LLVM v12.2
Date: 2018-03-21 21:21:01
Message-ID: 20180321212101.zivk3wqqqc67fq22@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 2018-03-22 10:09:23 +1300, Thomas Munro wrote:
> > FWIW, a 32bit chroot, on a 64bit kernel works:
> >
> > 2018-03-21 20:57:56.576 UTC [3708] DEBUG: successfully loaded LLVM in current session
> > 2018-03-21 20:57:56.577 UTC [3708] DEBUG: JIT detected CPU "skylake", with features "+sse2,+cx16,-tbm,-avx512ifma,-avx512dq,-fma4,+prfchw,+bmi2,+xsavec,+fsgsbase,+popcnt,+aes,-pcommit,+xsaves,-avx512er,-clwb,-avx512f,-pku,+smap,+mmx,-xop,+rdseed,+hle,-sse4a,-avx512bw,+clflushopt,+xsave,-avx512vl,+invpcid,-avx512cd,+avx,+rtm,+fma,+bmi,-mwaitx,+rdrnd,+sse4.1,+sse4.2,+avx2,+sse,+lzcnt,+pclmul,-prefetchwt1,+f16c,+ssse3,+sgx,+cmov,-avx512vbmi,+movbe,+xsaveopt,-sha,+adx,-avx512pf,+sse3"
> > 2018-03-21 20:57:56.579 UTC [3708] DEBUG: time to inline: 0.000s, opt: 0.000s, emit: 0.002s
> >
> > that's debian testing though.
>
> Hmm. So now I'm doing this:

I've now reproduced this. It actually only fails for *some*
queries, a good number works. Investigating.

As a random aside, our costing is fairly ridiculous here:
┌──────────────────────────────────────────────────────────────────────────────┐
│ QUERY PLAN │
├──────────────────────────────────────────────────────────────────────────────┤
│ Sort (cost=1088314.21..1103119.40 rows=5922075 width=34) │
│ Sort Key: booltbl1.f1, booltbl2.f1 │
│ -> Nested Loop (cost=0.00..118524.73 rows=5922075 width=34) │
│ Join Filter: ((booltbl2.f1 = booltbl1.f1) OR booltbl1.f1) │
│ -> Seq Scan on booltbl1 (cost=0.00..38.10 rows=2810 width=1) │
│ -> Materialize (cost=0.00..52.15 rows=2810 width=1) │
│ -> Seq Scan on booltbl2 (cost=0.00..38.10 rows=2810 width=1) │
│ JIT: │
│ Functions: 6 │
│ Inlining: true │
│ Optimization: true │
└──────────────────────────────────────────────────────────────────────────────┘

> I wonder what I'm doing wrong... what you're doing is very similar,
> right? It's a 32 bit user land on a 64 bit kernel whereas mine is a
> 32 bit user land on a 32 bit kernel (on a 64 bit CPU).

I think it's I that did something wrong not you. And the architecture
thing is a non-issue, because we're taking the target triple from the
right place. I think it's a separate issue. Notably the generated code
is apparently corrupt, when reading in the generated bitcode:

$ opt-6.0 -O3 -S < /tmp/data/6814.1.bc|less
opt-6.0: <stdin>: error: Invalid record (Producer: 'LLVM6.0.0' Reader: 'LLVM 6.0.0')

I suspect there's a 32bit vs 64bit confusion in the expression code
somewhere, might've accidentally used a 64bit type for Datum somewhere
or such. Will compile an LLVM with assertions enabled, to figure this
out (which verifies this kinda thing).

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Geoghegan 2018-03-21 21:29:40 Re: found xmin from before relfrozenxid on pg_catalog.pg_authid
Previous Message Bossart, Nathan 2018-03-21 21:14:32 Re: [HACKERS] pg_upgrade to clusters with a different WAL segment size