linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Arnd Bergmann <arnd@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org,
	"Ahmed S . Darwish" <darwi@linutronix.de>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ard Biesheuvel <ardb@kernel.org>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	John Ogness <john.ogness@linutronix.de>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 13/15] x86/cpu: Make CONFIG_X86_CX8 unconditional
Date: Mon, 28 Apr 2025 11:16:24 +0200	[thread overview]
Message-ID: <aA9HaA2u-tdVA2ET@gmail.com> (raw)
In-Reply-To: <b97650f6-b541-4496-b84d-862fc7fd711b@app.fastmail.com>


* Arnd Bergmann <arnd@kernel.org> wrote:

> >   M486
> >   M486SX
> >   M586
> >   M586MMX         # NEW
> >   M586TSC         # NEW
> >   MCYRIXIII       # NEW
> >   MELAN
> >   MGEODEGX1       # NEW
> >   MK6             # NEW
> >   MWINCHIP3D
> >   MWINCHIPC6
> 
> This would also mean dropping support for the pre-2015 Intel Quark
> and DM&P Vortex86DX/DX2/MX/EX that never had a custom CONFIG_Mxxxx
> option but are still relevant to some degree.
> I think that would be a mistake. 

Yeah, agreed, and especially with the <asm/bitops.h> CMOV complication 
removed per Linus's patch, we could actually remove CONFIG_X86_CMOV, as 
nothing uses it anymore:

  starship:~/mingo.tip.git> git grep X86_CMOV
  arch/x86/Kconfig.cpu:config X86_CMOV
  arch/x86/Kconfig.cpufeatures:   depends on X86_CMOV

The CMOV dependency comes in through compiler options only: 

  arch/x86/Makefile_32.cpu:cflags-$(CONFIG_M586TSC)	+= -march=i586
  arch/x86/Makefile_32.cpu:cflags-$(CONFIG_M586MMX)	+= -march=pentium-mmx
  arch/x86/Makefile_32.cpu:cflags-$(CONFIG_MCYRIXIII)	+= $(call cc-option,-march=c3,-march=i486) $(align)
  arch/x86/Makefile_32.cpu:cflags-$(CONFIG_MGEODEGX1)	+= -march=pentium-mmx
  arch/x86/Makefile_32.cpu:cflags-$(CONFIG_MGEODE_LX)	+= $(call cc-option,-march=geode,-march=pentium-mmx)

These build options will, indirectly, not include CMOV in the kernel 
image, while i686 and higher march options will.

(BTW., we should probably remove the -march=i486 fallback for 
MCYRIXIII, our minimum CC version is beyond that already I believe.)

Anyway, the current plan is to not drop common-i586, only the removal 
of what's in the -v1 series:

   M486
   M486SX
   M586
   MELAN
   MWINCHIP3D
   MWINCHIPC6

> Here are some alternatives I like better than dropping i586:
> 
> a) keep my patch with an new bool option to pick between
>    i586 and i686 targets, by any name.
> 
> b) always build with -march=i586 and leave only the -mtune
>    flags; see if anyone cares enough to even benchmark
>    and pick one of the other options if they can show
>    a meaningful regression over -march=i686 -mtune=

That's actually a good idea IMO. I looked at the code generation with 
current compilers and it turns out that M686 is *substantially* worse 
in code generation than M586, as apparently the extra CMOV instructions 
bloat up the generated code:

      text	   data	    bss	    dec	    hex	filename
  15427023	7601010	1744896	24772929	17a0141	vmlinux.M586
  16578295	7598826	1744896	25922017	18b89e1	vmlinux.M686

 - +7.5% increase in text size (5.6% according to bloatometer),
 - +2% increase in instruction count,
 - while number of branches increases by +1.3%.

But it's not about CMOV: I checked about a dozen functions that end up 
using CMOV, and the 'conditional' part of CMOV does seem to reduce 
branches for those functions by a minor degree and ends up reducing 
their size as well. So CMOV helps, a bit.

The substantial code bloat comes from some other aspect of GCC's 
march=i686 flag ... I bet it's primarily inlining: there's a 0.7% 
reduction in number of calls done.

I have a hard time believing that this kind of bloat and complexity 
helps performance to *any* degree.

I really didn't remember how bad it was, until I re-measured it.

CMOV is likely a drop in the ocean compared to this kind of text bloat. 
And yeah, it doesn't really matter that i686 class CPUs have larger 
caches, the kernel is dominantly cache-cold code execution, inlining 
driven bloat almost never helps performance.

> c) keep the outcome of your v1 series, dropping only
>    pre-i586 support, and leave my patch out. No change here,
>    so at least no regression potential.

Yeah, so this is roughly the current plan, with perhaps light touchups 
on top to make it easier to configure, and to remove residual legacies.

Thanks,

	Ingo

  parent reply	other threads:[~2025-04-28  9:16 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-25  8:41 [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs Ingo Molnar
2025-04-25  8:41 ` [PATCH 01/15] x86/cpu: Remove M486/M486SX/ELAN support Ingo Molnar
2025-04-25  8:41 ` [PATCH 02/15] x86/cpu: Remove CONFIG_MWINCHIP3D/MWINCHIPC6 Ingo Molnar
2025-04-25  8:42 ` [PATCH 03/15] x86/cpu: Remove CPU_SUP_UMC_32 support Ingo Molnar
2025-04-25  8:42 ` [PATCH 04/15] x86/cpu: Remove TSC-less CONFIG_M586 support Ingo Molnar
2025-04-25 15:09   ` H. Peter Anvin
2025-04-25  8:42 ` [PATCH 05/15] x86/cpu, x86/platform, watchdog: Remove CONFIG_X86_RDC321X support Ingo Molnar
2025-04-25  8:42 ` [PATCH 06/15] x86/cpu: Remove the CONFIG_X86_INVD_BUG quirk Ingo Molnar
2025-04-25  8:42 ` [PATCH 07/15] x86/cpu, cpufreq: Remove AMD ELAN support Ingo Molnar
2025-04-25  8:42 ` [PATCH 08/15] x86/fpu: Remove MATH_EMULATION and related glue code Ingo Molnar
2025-04-25  8:42 ` [PATCH 09/15] x86/fpu: Remove the 'no387' boot option Ingo Molnar
2025-04-25  8:42 ` [PATCH 10/15] x86/fpu: Remove the math-emu/ FPU emulation library Ingo Molnar
2025-04-25  8:42 ` [PATCH 11/15] x86/cpu: Make CONFIG_X86_TSC unconditional Ingo Molnar
2025-04-25  8:42 ` [PATCH 12/15] x86: Remove !CONFIG_X86_TSC code Ingo Molnar
2025-04-25  8:42 ` [PATCH 13/15] x86/cpu: Make CONFIG_X86_CX8 unconditional Ingo Molnar
2025-04-25 12:10   ` Arnd Bergmann
2025-04-25 15:15     ` H. Peter Anvin
2025-04-25 21:54       ` Arnd Bergmann
2025-04-27  9:25         ` Ingo Molnar
2025-04-27 17:32           ` Arnd Bergmann
2025-04-27 21:26             ` H. Peter Anvin
2025-04-28  9:16             ` Ingo Molnar [this message]
2025-04-28 11:21               ` Arnd Bergmann
2025-04-29 10:22                 ` Ingo Molnar
2025-04-29 12:10                   ` Arnd Bergmann
2025-04-27  8:15     ` Ingo Molnar
2025-04-25  8:42 ` [PATCH 14/15] x86/percpu: Remove !CONFIG_X86_CX8 methods Ingo Molnar
2025-04-25 14:05   ` Uros Bizjak
2025-04-27  7:46     ` [PATCH -v2 " Ingo Molnar
2025-04-25  8:42 ` [PATCH 15/15] x86/atomics: " Ingo Molnar
2025-04-25 13:55   ` Arnd Bergmann
2025-04-25 14:10   ` Uros Bizjak
2025-04-25 15:00     ` Brian Gerst
2025-04-27  8:23       ` Ingo Molnar
2025-04-27  8:26     ` Ingo Molnar
2025-04-27 10:31       ` Uros Bizjak
2025-05-15  8:49         ` Ingo Molnar
2025-04-25 11:13 ` [RFC PATCH 0/15] x86: Remove support for TSC-less and CX8-less CPUs Arnd Bergmann
2025-04-26  8:26 ` Pavel Machek
2025-05-05  8:53 ` Maciej W. Rozycki
2025-05-05 12:48   ` H. Peter Anvin
2025-05-05 13:04     ` Maciej W. Rozycki
2025-05-05 19:57       ` H. Peter Anvin
2025-05-05 20:54         ` Borislav Petkov
2025-05-06 13:51           ` Maciej W. Rozycki
2025-05-06 14:16             ` Borislav Petkov
2025-05-08 14:51               ` Maciej W. Rozycki
2025-05-08 20:11                 ` Borislav Petkov
2025-05-12 12:55                   ` Maciej W. Rozycki
2025-05-12 13:48                     ` Borislav Petkov
2025-05-12 17:29                       ` Maciej W. Rozycki
2025-05-13  2:00                         ` Linus Torvalds
2025-05-13  3:48                           ` H. Peter Anvin
2025-05-13  5:43                           ` John Paul Adrian Glaubitz
2025-05-13 21:55                             ` Maciej W. Rozycki
2025-05-13 22:02                               ` Linus Torvalds
2025-05-13 22:06                                 ` H. Peter Anvin
2025-05-15 16:32                                 ` Maciej W. Rozycki
2025-05-06 13:48         ` Maciej W. Rozycki
2025-05-06 13:54           ` John Paul Adrian Glaubitz
2025-05-05 15:59   ` Linus Torvalds
2025-05-06 13:53     ` Maciej W. Rozycki
2025-05-06 16:44       ` H. Peter Anvin
2025-05-06 17:11         ` Linus Torvalds
2025-05-06 17:51           ` H. Peter Anvin
2025-05-08 14:54             ` Maciej W. Rozycki
2025-05-08 14:53           ` Maciej W. Rozycki
2025-05-08 14:51         ` Maciej W. Rozycki
  -- strict thread matches above, loose matches on Subject: below --
2025-05-15  8:56 [PATCH -v2 " Ingo Molnar
2025-05-15  8:57 ` [PATCH 13/15] x86/cpu: Make CONFIG_X86_CX8 unconditional Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aA9HaA2u-tdVA2ET@gmail.com \
    --to=mingo@kernel.org \
    --cc=andrew.cooper3@citrix.com \
    --cc=ardb@kernel.org \
    --cc=arnd@kernel.org \
    --cc=bp@alien8.de \
    --cc=darwi@linutronix.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).