Re: Can we drop upstream Linux x32 support?

From: Rich Felker
Date: Wed Dec 12 2018 - 11:08:08 EST


On Wed, Dec 12, 2018 at 02:46:00PM +0000, Steven Newbury wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> On Wed, 2018-12-12 at 09:01 -0500, Rich Felker wrote:
> > On Wed, Dec 12, 2018 at 09:12:34AM +0000, Steven Newbury wrote:
> > > -----BEGIN PGP SIGNED MESSAGE-----
> > > Hash: SHA256
> > >
> > > First off I'd like to request: Please don't break my userspace!
> > >
> > > I have a number of systems running with x32-abi as native. They
> > > work
> > > well, I've no want or desire to upgrade their memory or CPUs to
> > > make
> > > keep them working as well as they do now. Let alone the hassle of
> > > having to redeploy with a completely different ABI.
> > >
> > >
> > > I've been working on getting as much userspace as I can working
> > > with
> > > x32 since it first became somewhat usable, I've sent patches
> > > upstream
> > > and pushed to encourage projects to write portable code. Sometimes
> > > that has meant just little tweaks to build systems, or sometimes
> > > disabling asm where I consider it isn't worth the effort of making
> > > it
> > > work. For other projects I've converted the asm or even in some
> > > cases
> > > got the JIT working, mozjs17 for example.
> > >
> > > So I'm both a user and a developer.
> > >
> > > Breaking support for x32 would be really bad for me, but if I'm the
> > > only one using it I suppose I can't really justify it being kept on
> > > that basis. I know CERN has sucessfully experimented with it over
> > > the
> > > years though, so I wouldn't be surprised if there are other users
> > > hiding out there.
> > >
> > > I can't help but wonder if it wouldn't make more sense to drop x86
> > > support from long mode than x32. AMD64 x86 support was always
> > > intended
> > > as a compatibility feature, I very much doubt there are more
> > > people
> > > out there using an x86 native userspace on a 64 bit kernel than
> > > there
> >
> > I am. The only reason I'm using a 64-bit kernel with it is to get the
> > full 4GB address space for userspace rather than just 3GB. I suspect
> > there are more users like me than like you.
> >
> You may well be right, I lack any data either way. I just find it hard
> to believe I'm, what, one of two users of x32?
>
> > Unlike x32, i386 is actually widely supported and works, and achieves
> > most of the benefits of x32, but with marginally worse performance
> > due
> x32 works, and is widely supported by the fact that the vast majority
> of free software is just a compile away. Now, there are holes, I've
> been trying to get Chromium/qtwebengine ported for the last couple of
> weeks.
>
> The performance isn't marginally worse, it's much worse, unless the
> code in question is hand optimized SIMD or is otherwise not really
> standard "IA32 ISA" anyway.

When the baseline improvement is roughly 2x (because you can double N
in make -jN), I consider 10-20% "marginal". Obviously there's a
perspective where 10-20% is huge. Have you actually observed x32 gcc
(since gcc is the example I'm using here, where it makes a big
difference) running that much faster than i386 gcc, though?

What I meant by "widely supported" is that pretty much any kernel
that's shipped can run i386 binaries. On the other hand, at least as I
understand it,lots of distros have x32 disabled because it's "not
used" or because there were a couple historic vulns exposed by having
it enabled and they just decided it wasn't worth it.

> > performance sensitive it's the right choice for shipping static
> > binaries, especially if they may be memory-hungry, since it works on
> > pretty much any box.
> >
> When it comes to power usage and latency any code that runs often is
> peformance senstitive. I can't argue about shipping i386 static
> binaries, they'll work on pretty much any *x86* box, I agree.

OK, so we're on the same page there.

> > > are native x32 users. x86 support could be implemented via KVM
> > > and/or
> > > qemu-user. There is no reason to keep the extra complexity in the
> > > kernel for what is effectively an emulation layer anyway.
> >
> > qemu-user is a non-solution. Not only does it result in being much
> > slower and using more resources than just running a 64-bit userspace
> > (defeating the purpose); it's also incapable of correctly emulating
> > lots of corner cases. I've never been able to get it to work with
> > thread cancellation, and doing so is fundamentally hard because it
> > would require heavy emulation of signals rather than passing them
> > through.
> >
> What's the purpose? Running IA32 binaries is for legacy. You don't
> run i386/IA32 binaries for the performance. You use i386 as x32 was
> intended, that's succifient for you. Great. I get the benefits I want
> from an x32 userspace with amd64 binaries and libraries where it makes
> sense as I understand does Thorsten. Are you saying this wrong,
> broken(?), and should be removed?

No, I'm not really taking a position here except that i386 (IA32)
should not be removed. I agree that x32 is useful (which a lot of
people are wrongly dismissing), but I also agree that the kernel code
for it is a mess and a maintenance burden, and I'm not sure if the
usefulness justifies that burden. I think it's really helpful to hear
from people like you who are using it why you care that it's there.

Rich