BenchmarkDotNet icon indicating copy to clipboard operation
BenchmarkDotNet copied to clipboard

Processor model is not detected on Azure arm64

Open EgorBo opened this issue 1 year ago • 2 comments

When I run any benchmark on Azure ARM64, it reports

BenchmarkDotNet v0.13.12, Ubuntu 22.04.4 LTS (Jammy Jellyfish)
Unknown processor

E.g. https://github.com/dotnet/runtime/pull/102705#issuecomment-2132450520

cat /proc/cpuinfo (which BDN uses) outputs:

$ cat /proc/cpuinfo
processor       : 0
BogoMIPS        : 50.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x3
CPU part        : 0xd0c
CPU revision    : 1

processor       : 1
BogoMIPS        : 50.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x3
CPU part        : 0xd0c
CPU revision    : 1
...

and lscpu is:

$ lscpu
Architecture:           aarch64
  CPU op-mode(s):       32-bit, 64-bit
  Byte Order:           Little Endian
CPU(s):                 16
  On-line CPU(s) list:  0-15
Vendor ID:              ARM
  Model name:           Neoverse-N1
    Model:              1
    Thread(s) per core: 1
    Core(s) per socket: 16
    Socket(s):          1
    Stepping:           r3p1
    BogoMIPS:           50.00
    Flags:              fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp

So at least Neoverse-N1, 16 cores would be better than Unknown processor.

From my understanding, on Azure we have

  1. Neoverse-N1 (Ampere Altra)
  2. Neoverse-N2 (Cobalt 100) (e.g. this is how it's recognized in LLVM)

I'll try to implement it myself if nobody grabs it 🙂

EgorBo avatar May 27 '24 00:05 EgorBo

I'll try to implement it myself if nobody grabs it

I am afraid that others might not be able to test this particular case easily. Should I just assign you? ;)

adamsitnik avatar May 27 '24 16:05 adamsitnik

I'll try to implement it myself if nobody grabs it

I am afraid that others might not be able to test this particular case easily. Should I just assign you? ;)

Sure, please do 🙂

EgorBo avatar May 27 '24 16:05 EgorBo

@EgorBo should be fixed now. Could you please try 0.14.1-nightly.20240826.175 and check if it correctly detects Neoverse-N1?

AndreyAkinshin avatar Aug 26 '24 11:08 AndreyAkinshin

@EgorBo should be fixed now. Could you please try 0.14.1-nightly.20240826.175 and check if it correctly detects Neoverse-N1?

Just checked:

// * Summary *

BenchmarkDotNet v0.14.1-nightly.20240826.175, Ubuntu 24.04 LTS (Noble Numbat)
Neoverse-N1, 16 physical cores
.NET SDK 9.0.100-preview.7.24407.12
  [Host]     : .NET 9.0.0 (9.0.24.40507), Arm64 RyuJIT AdvSIMD
  Job-FPTMIV : .NET 10.0.0 (42.42.42.42424), Arm64 RyuJIT AdvSIMD

Thanks!! Will check on N2 later as well

EgorBo avatar Aug 26 '24 12:08 EgorBo

Today I learned that the lscpu output repsects the system language[^1][^2]. Thus, the current parsing logic will fail to detect Model name on systems with non-English locale. One more fix with language-invariant lscpu call is coming.

[^1]: Linux: Set language to default for console or scripts (2015-09-17) by Nerd Admin [^2]: nicolargo/glances#2616: "Raspberry PI - CPU info is not correct"

AndreyAkinshin avatar Aug 26 '24 16:08 AndreyAkinshin

@EgorBo, 0.14.1-nightly.20240826.177 contains the language-invariant fix.

AndreyAkinshin avatar Aug 26 '24 17:08 AndreyAkinshin