On Thu, 27 Jul 2023 at 19:16, ‍小太 <nos...@kota.moe> wrote:
>
> On Thu, 27 Jul 2023 at 11:25, Xiaoyao Li <xiaoyao...@intel.com> wrote:
> >
> > On 7/24/2023 2:59 AM, 小太 wrote:
> > > When QEMU is started with `-smp D,sockets=1,dies=D,cores=1,threads=1` 
> > > (that
> > > is, 1 socket with D dies but each die contains just a single thread), both
> > > Linux and Windows guests incorrectly interprets the system as having D
> > > sockets with 1 die each
> > >
> > > Ultimately this is caused by various CPUID leaves not being die-aware in
> > > their "threads per socket" calculations, so this patch fixes that
> > >
> > > These changes are referenced to the AMD PPR for Family 19h Model 01h 
> > > (Milan)
> > > and Family 17h Model 01h (Naples) manuals:
> > >   - CPUID_Fn00000001_EBX[23:16]: Number of threads in the processor
> > >                                  (Core::X86::Cpuid::SizeId[NC] + 1)
> > >   - CPUID_Fn0000000B_EBX_x01[15:0]: Number of logical cores in processor
> > >                                     socket (not present until Rome)
> > >   - CPUID_Fn80000001_ECX[1]: Multi core product
> > >                              (Core::X86::Cpuid::SizeId[NC] != 0)
> > >   - CPUID_Fn80000008_ECX[7:0]: The number of threads in the package - 1
> > >                                (Core::X86::Cpuid::SizeId[NC])
> > >
> > > Note there are two remaining occurences that I didn't touch:
> > >   - CPUID_Fn8000001E_ECX[10:8]: Always 0 (1 node per processor) for Milan.
> > >                                 But for Naples, it can also be 2 or 4 
> > > nodes
> > >                                 where each node is defined as one or two
> > >                                 CCXes (CCD?). But Milan also has multiple
> > >                                 CCXes, so clearly the definition of a 
> > > node is
> > >                                 different from model to model, so I've 
> > > left
> > >                                 it untouched. (QEMU seems to use the 
> > > Naples
> > >                                 definition)
> > >   - MSR_CORE_THREAD_COUNT: This MSR doesn't exist on Milan or Naples
> >
> > Is this patch specific to AMD CPU type? what's situation for Intel CPU?
>
> I don't have a MCM Intel CPU to confirm against, but according to "Intel
> Architectures Software Developer’s Manual":
>  - 01h EBX[23:16]: Maximum number of addressable IDs for logical processors in
>                    this physical package
>  - 0Bh EBX[15:0]: The number of logical processors across all instances of 
> this
>                   domain within the next higher-scoped domain. Note: The 0Bh
>                   leaf caps at the "core" domain, so Intel prefers using the 
> 1Fh
>                   leaf instead which supports modules/tiles/dies/sockets. But
>                   AMD doesn't support the 1Fh leaf yet
>  - 80000001h ECX[1]: Reserved
>  - 80000008h ECX: Reserved = 0
>  - 8000001Eh: Unsupported
>  - MSR_CORE_THREAD_COUNT[31:16]: The number of processor cores that are
>                                  currently enabled in the physical package
>
> So the changes seem compatible with Intel, though MSR_CORE_THREAD_COUNT should
> be updated to support dies as well. But in the absence of a MCM Intel CPU to
> test with, I don't feel comfortable making that change

Friendly ping on this patch
(patchew link: 
https://patchew.org/QEMU/20230723185909.441455-1-nos...@kota.moe/)

Reply via email to