tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: assertion "lp_max >= core_max" failed
On Sun, Sep 22, 2024 at 01:08:21PM -0000, Michael van Elst wrote:
> cmeerw%cmeerw.org@localhost (Christof Meerwald) writes:
>
> >Turns out in my case the CPUID_HTT flag is not set (so lp_max = 1),
> >but the maximum number of cores per package is set to 16 - 1, so
> >core_max = 16.
>
> That's a confusing number, the chip has 14 cores and 28 threads.
> If HTT is disabled, that would still be only 14 threads. So
> I guess, the VM software fakes these values.
Some of it is definitely faked, but I am not sure what the real
meaning of these is anyway.
BTW, this particular VM has 2 CPU cores assigned to it.
The one real Intel CPU I currently have access to is a "Intel(R)
Pentium(R) CPU N3540" - here the cpuid results would set lp_max=16 and
core_max=8, although the CPU only has 4 cores/threads.
It seems to me that most VMs set the CPUID_HTT to false.
Anyway, another Intel-based VM I have access to has CPUID_HTT false and
maximum IDs for cores in pkg = 0x0 (0)
so it would have lp_max=1 and core_max=1, but also has 2 CPU cores
assigned.
> >but we don't check for that condition in the Intel case - should we?
> >Adding that case for Intel seems to fix it for me, e.g.
>
> > /* Check for leaf 4 support. */
> > if (ci->ci_max_cpuid >= 4 &&
> > (ci->ci_feat_val[0] & CPUID_HTT) != 0) {
> > /* Maximum number of Cores per package (eax[31:26]). */
> > x86_cpuid2(4, 0, descs);
> > core_max = __SHIFTOUT(descs[0], CPUID_DCP_CORE_P_PKG)
> > + 1;
> > } else {
> > core_max = 1;
> > }
>
> Wouldn't that tell that we only have 1 core / 1 thread ?
I am not sure - I am currently running NetBSD with that change and it
has 2 CPU cores assigned and the 2 cores show up in /proc/cpuinfo and
in dmesg:
[ 1.000004] cpu0 at mainbus0 apid 0
[ 1.000004] cpu0: Use lfence to serialize rdtsc
[ 1.000004] cpu0: Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz, id 0x406f1
[ 1.000004] cpu0: node 0, package 0, core 0, smt 0
[ 1.000004] cpu1 at mainbus0 apid 1
[ 1.000004] cpu1: Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz, id 0x406f1
[ 1.000004] cpu1: node 0, package 1, core 0, smt 0
> Maybe instead of failing when lp_max < core_max, we should just
> gracefully handle this case as lp_max == core_max.
That was actually my initial attempt (which also worked), but then I
saw that the AMD code checked for CPUID_HTT, so thought maybe the
Intel code should do the same?
But now I am thinking that maybe for CPUID_HTT false, both AMD and
Intel should essentially set lp_max to core_max (instead of setting
core_max to 1).
Christof
--
https://cmeerw.org sip:cmeerw at cmeerw.org
mailto:cmeerw at cmeerw.org xmpp:cmeerw at cmeerw.org
Home |
Main Index |
Thread Index |
Old Index