On Wed, Feb 23, 2022 at 2:43 AM Palmer Dabbelt <palmer@xxxxxxxxxxx> wrote: > > On Tue, 01 Feb 2022 07:05:24 PST (-0800), guoren@xxxxxxxxxx wrote: > > From: Guo Ren <guoren@xxxxxxxxxxxxxxxxx> > > > > Currently, most 64-bit architectures (x86, parisc, powerpc, arm64, > > s390, mips, sparc) have supported COMPAT mode. But they all have > > history issues and can't use standard linux unistd.h. RISC-V would > > be first standard __SYSCALL_COMPAT user of include/uapi/asm-generic > > /unistd.h. > > TBH, I'd always sort of hoped we wouldn't have to do this: it's a lot of > ABI surface to keep around for a use case I'm not really sure is ever > going to get any traction (it's not like we have legacy 32-bit > userspaces floating around, the 32-bit userspace is newer than the > 64-bit userspace). The low-end embedded market isn't usually that newsworthy, but the machines ship in huge quantities, and they all run 32-bit user space for good reasons: The cheapest Linux systems at the moment use a low-end MIPS or Arm core with a single DDR2 (32MB to 128MB) or DDR3 (128MB to 512MB) memory chip that for now is a bit cheaper than a larger LP-DDR4 (256MB+). The smaller configurations will go away over time as they get outpriced by systems with LP-DDR4, but a 32-bit system with 256MB will keep beating a 64-bit-only system with 512MB on price, and will run most workloads better than a 64-bit system with the same amount of RAM. On the Arm side, I hope that these systems will migrate to Armv8 based designs (Cortex-A53/A35 or newer) running 64-bit kernel with 32-bit user space to replace the currently dominant but aging 32-bit Cortex-A7 cores. As you say, RISC-V is at a disadvantage here because there is no existing 32-bit ecosystem, but it may take a chunk of that market anyway based on licensing cost. Between doing this using pure 32-bit cores or on mixed 32/64-bit cores, I found Guo Ren's explanation very sensible, it lets you use the same chip both as a low-end embedded version with SiP memory, or using an external DDR3/LPDDR4 chip with enough capacity to run a generic 64-bit distro. > My assumption is that users who actually wanted the > memory savings (likely a very small number) would be better served with > rv64/ilp32, as that'll allow the larger registers that the hardware > supports. From some earlier discussions it looks like rv64/ilp32 isn't > going to be allowed, though, so this seems like the only way to go. Right, between rv32 user space and a hypothetical rv64-ilp32 target, I think it's clear that the former is better because it means introducing only one fringe ABI rather than two incompatible ones with minor performance differences. Arnd