[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4] i386/cpu: fixup number of addressable IDs for logical pro
From: |
Zhao Liu |
Subject: |
Re: [PATCH v4] i386/cpu: fixup number of addressable IDs for logical processors in the physical package |
Date: |
Tue, 8 Oct 2024 10:31:08 +0800 |
On Mon, Oct 07, 2024 at 02:33:39PM +0200, Igor Mammedov wrote:
> Date: Mon, 7 Oct 2024 14:33:39 +0200
> From: Igor Mammedov <imammedo@redhat.com>
> Subject: Re: [PATCH v4] i386/cpu: fixup number of addressable IDs for
> logical processors in the physical package
> X-Mailer: Claws Mail 4.3.0 (GTK 3.24.43; x86_64-redhat-linux-gnu)
>
> On Mon, 7 Oct 2024 16:13:44 +0800
> Chuang Xu <xuchuangxclwt@bytedance.com> wrote:
>
> > When QEMU is started with:
> > -cpu host,migratable=on,host-cache-info=on,l3-cache=off
> > -smp 180,sockets=2,dies=1,cores=45,threads=2
> >
> > Try to execute "cpuid -1 -l 1 -r" in guest, we'll obtain a value of 90 for
> > CPUID.01H.EBX[23:16], while the expected value is 128. And Try to
> > execute "cpuid -1 -l 4 -r" in guest, we'll obtain a value of 63 for
> > CPUID.04H.EAX[31:26] as expected.
> >
> > As (1+CPUID.04H.EAX[31:26]) round up to the nearest power-of-2 integer,
> > we'd beter round up CPUID.01H.EBX[23:16] to the nearest power-of-2
> > integer too. Otherwise we may encounter unexpected results in guest.
> >
> > For example, when QEMU is started with CLI above and xtopology is disabled,
> > guest kernel 5.15.120 uses CPUID.01H.EBX[23:16]/(1+CPUID.04H.EAX[31:26]) to
> > calculate threads-per-core in detect_ht(). Then guest will get "90/(1+63)=1"
> > as the result, even though theads-per-core should actually be 2.
> >
> > So let us round up CPUID.01H.EBX[23:16] to the nearest power-of-2 integer
> > to solve the unexpected result.
> >
> > In addition, we introduce max_thread_number_in_package() instead of
> > using pow2ceil() to be compatible with smp and hybrid.
>
> though I'm still worried that we can't use pow2ceil() to match spec closer.
> Probably we are doing something wrong if bit shift works while pow2ceil()
> as described in spec doesn't.
The addressable ID is the (whole or partial) initial APIC ID, so the bit
shift operation on APIC ID is mathematically equivalent to the pow2ceil()
on the addressable ID as well. I’ll keep a close eye on this. :-)
> Acked-by: Igor Mammedov <imammedo@redhat.com>