mirror of
https://github.com/kdlucas/byte-unixbench.git
synced 2025-01-10 23:40:10 +08:00
Merge pull request #106 from Zengkai163/getCpuInfo
getCpuInfo: Add support for arm64
This commit is contained in:
commit
2c29fe37ef
173
UnixBench/Run
173
UnixBench/Run
@ -58,6 +58,7 @@ use FindBin;
|
|||||||
# 2007.10.14 IS Set and report LANG. Added "grep" and "sysexec".
|
# 2007.10.14 IS Set and report LANG. Added "grep" and "sysexec".
|
||||||
# 2007.12.22 IS Tiny fixes; see README.
|
# 2007.12.22 IS Tiny fixes; see README.
|
||||||
# 2011.01.13 KDL Fix for parallel compilation.
|
# 2011.01.13 KDL Fix for parallel compilation.
|
||||||
|
# 2025.01.02 ZZK Improve getCpuInfo() function for arm64 CPUs.
|
||||||
|
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
@ -512,6 +513,115 @@ my $x86CpuFlags = {
|
|||||||
'svm' => "AMD virtualization",
|
'svm' => "AMD virtualization",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my $armCpuImplementers = {
|
||||||
|
'0x41' => "ARM",
|
||||||
|
'0x42' => "Broadcom",
|
||||||
|
'0x43' => "Cavium",
|
||||||
|
'0x46' => "FUJITSU",
|
||||||
|
'0x48' => "HiSilicon",
|
||||||
|
'0x4e' => "NVIDIA",
|
||||||
|
'0x50' => "APM",
|
||||||
|
'0x51' => "Qualcomm",
|
||||||
|
'0x61' => "Apple",
|
||||||
|
'0x6d' => "Microsoft",
|
||||||
|
'0xc0' => "Ampere",
|
||||||
|
};
|
||||||
|
|
||||||
|
my $armCpuParts = {
|
||||||
|
"ARM" => {
|
||||||
|
"0xd00" => "Foundation",
|
||||||
|
"0xd03" => "Cortex-A53",
|
||||||
|
"0xd04" => "Cortex-A35",
|
||||||
|
"0xd05" => "Cortex-A55",
|
||||||
|
"0xd07" => "Cortex-A57",
|
||||||
|
"0xd08" => "Cortex-A72",
|
||||||
|
"0xd09" => "Cortex-A73",
|
||||||
|
"0xd0a" => "Cortex-A75",
|
||||||
|
"0xd0b" => "Cortex-A76",
|
||||||
|
"0xd0c" => "Neoverse-N1",
|
||||||
|
"0xd0d" => "Cortex-A77",
|
||||||
|
"0xd0f" => "AEMv8",
|
||||||
|
"0xd40" => "Neoverse-V1",
|
||||||
|
"0xd41" => "Cortex-A78",
|
||||||
|
"0xd42" => "Cortex-A78AE",
|
||||||
|
"0xd44" => "Cortex-X1",
|
||||||
|
"0xd46" => "Cortex-A510",
|
||||||
|
"0xd47" => "Cortex-A710",
|
||||||
|
"0xd48" => "Cortex-X2",
|
||||||
|
"0xd49" => "Neoverse-N2",
|
||||||
|
"0xd4b" => "Cortex-A78C",
|
||||||
|
"0xd4c" => "Cortex-X1C",
|
||||||
|
"0xd4d" => "Cortex-A715",
|
||||||
|
"0xd4e" => "Cortex-X3",
|
||||||
|
"0xd4f" => "Neoverse-V2",
|
||||||
|
"0xd80" => "Cortex-A520",
|
||||||
|
"0xd81" => "Cortex-A720",
|
||||||
|
"0xd82" => "Cortex-X4",
|
||||||
|
"0xd84" => "Neoverse-V3",
|
||||||
|
"0xd85" => "Cortex-X925",
|
||||||
|
"0xd87" => "Cortex-A725",
|
||||||
|
"0xd8e" => "Neoverse-N3",
|
||||||
|
},
|
||||||
|
"APM" => {
|
||||||
|
"0x000" => "X-Gene",
|
||||||
|
},
|
||||||
|
"Cavium" => {
|
||||||
|
"0x0a1" => "ThunderX",
|
||||||
|
"0x0a2" => "ThunderX-81XX",
|
||||||
|
"0x0a3" => "ThunderX-83XX",
|
||||||
|
"0x0af" => "ThunderX2",
|
||||||
|
"0x0b1" => "OcteonTX2-98XX",
|
||||||
|
"0x0b2" => "OcteonTX2-96XX",
|
||||||
|
"0x0b3" => "OcteonTX2-95XX",
|
||||||
|
"0x0b4" => "OcteonTX2-95XXN",
|
||||||
|
"0x0b5" => "OcteonTX2-95XXMM",
|
||||||
|
"0x0b6" => "OcteonTX2-95XXO",
|
||||||
|
},
|
||||||
|
"Broadcom" => {
|
||||||
|
"0x100" => "Brahma-B53",
|
||||||
|
"0x516" => "Vulcan",
|
||||||
|
},
|
||||||
|
"Qualcomm" => {
|
||||||
|
"0x200" => "Kryo",
|
||||||
|
"0xc00" => "Falkor",
|
||||||
|
"0x800" => "Falkor-V1/Kryo-2XX-Gold",
|
||||||
|
"0x801" => "Kryo-2XX-Silver",
|
||||||
|
"0x803" => "Kryo-3XX-Silver",
|
||||||
|
"0x804" => "Kryo-4XX-Gold",
|
||||||
|
"0x805" => "Kryo-4XX-Silver",
|
||||||
|
},
|
||||||
|
"NVIDIA" => {
|
||||||
|
"0x003" => "Denver",
|
||||||
|
"0x004" => "Carmel",
|
||||||
|
},
|
||||||
|
"FUJITSU" => {
|
||||||
|
"0x001" => "A64FX",
|
||||||
|
},
|
||||||
|
"HiSilicon" => {
|
||||||
|
"0xd01" => "TaiShan-v110",
|
||||||
|
},
|
||||||
|
"Apple" => {
|
||||||
|
"0x022" => "Icestorm-M1",
|
||||||
|
"0x023" => "Firestorm-M1",
|
||||||
|
"0x024" => "Icestorm-M1-Pro",
|
||||||
|
"0x025" => "Firestorm-M1-Pro",
|
||||||
|
"0x028" => "Icestorm-M1-Max",
|
||||||
|
"0x029" => "Firestorm-M1-Max",
|
||||||
|
"0x032" => "Blizzard-M2",
|
||||||
|
"0x033" => "Avalanche-M2",
|
||||||
|
"0x034" => "Blizzard-M2-Pro",
|
||||||
|
"0x035" => "Avalanche-M2-Pro",
|
||||||
|
"0x038" => "Blizzard-M2-Max",
|
||||||
|
"0x039" => "Avalanche-M2-Max",
|
||||||
|
},
|
||||||
|
"Ampere" => {
|
||||||
|
"0xac3" => "Ampere-1",
|
||||||
|
"0xac4" => "Ampere-1a",
|
||||||
|
},
|
||||||
|
"Microsoft" => {
|
||||||
|
"0xd49" => "Azure-Cobalt-100",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
# UTILITIES
|
# UTILITIES
|
||||||
@ -675,6 +785,26 @@ sub mergeParams {
|
|||||||
# SYSTEM ANALYSIS
|
# SYSTEM ANALYSIS
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
|
sub parseArmCpuImplementer {
|
||||||
|
my ( $implementerIdStr ) = @_;
|
||||||
|
my $CpuImplementer = $armCpuImplementers->{$implementerIdStr};
|
||||||
|
if (defined($CpuImplementer)) {
|
||||||
|
$CpuImplementer;
|
||||||
|
} else {
|
||||||
|
"CPU implementer $implementerIdStr";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parseArmCpuPart {
|
||||||
|
my ( $implementerIdStr, $partIdStr ) = @_;
|
||||||
|
my $CpuPart = $armCpuParts->{$implementerIdStr}->{$partIdStr};
|
||||||
|
if (defined($CpuPart)) {
|
||||||
|
$CpuPart;
|
||||||
|
} else {
|
||||||
|
"CPU part $partIdStr";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Extract interesting flags from the given processor flags string and
|
# Extract interesting flags from the given processor flags string and
|
||||||
# convert them to descriptive names.
|
# convert them to descriptive names.
|
||||||
sub processCpuFlags {
|
sub processCpuFlags {
|
||||||
@ -698,25 +828,48 @@ sub processCpuFlags {
|
|||||||
# future: on systems without /proc/cpuinfo, might check for Perl modules:
|
# future: on systems without /proc/cpuinfo, might check for Perl modules:
|
||||||
# Sys::Info::Device::CPU or Sys::CpuAffinity
|
# Sys::Info::Device::CPU or Sys::CpuAffinity
|
||||||
sub getCpuInfo {
|
sub getCpuInfo {
|
||||||
|
my $mach = $^O ne "aix"
|
||||||
|
? getCmdOutput("uname -m")
|
||||||
|
: getCmdOutput("uname -p");
|
||||||
|
|
||||||
if (!("$^O" eq "darwin")) {
|
if (!("$^O" eq "darwin")) {
|
||||||
open(my $fd, "<", "/proc/cpuinfo") || return undef;
|
open(my $fd, "<", "/proc/cpuinfo") || return undef;
|
||||||
|
|
||||||
my $cpus = [ ];
|
my $cpus = [ ];
|
||||||
my $cpu = 0;
|
my $cpu = 0;
|
||||||
|
my $armCpuImplementer="";
|
||||||
while (<$fd>) {
|
while (<$fd>) {
|
||||||
chomp;
|
chomp;
|
||||||
my ( $field, $val ) = split(/[ \t]*:[ \t]*/);
|
my ( $field, $val ) = split(/[ \t]*:[ \t]*/);
|
||||||
next if (!$field || !$val);
|
next if (!$field || !$val);
|
||||||
if ($field eq "processor") {
|
if ($mach eq "aarch64") {
|
||||||
$cpu = $val;
|
if ($field eq "processor") {
|
||||||
} elsif ($field eq "model name") {
|
$cpu = $val;
|
||||||
my $model = $val;
|
} elsif ($field eq "CPU implementer") {
|
||||||
$model =~ s/ +/ /g;
|
my $model = $val;
|
||||||
$cpus->[$cpu]{'model'} = $model;
|
$model =~ s/ +/ /g;
|
||||||
} elsif ($field eq "bogomips" || $field eq "BogoMIPS") {
|
$armCpuImplementer = parseArmCpuImplementer($model);
|
||||||
$cpus->[$cpu]{'bogo'} = $val;
|
$cpus->[$cpu]{'model'} = $armCpuImplementer;
|
||||||
} elsif ($field eq "flags") {
|
} elsif ($field eq "CPU part" && $armCpuImplementer ne "") {
|
||||||
$cpus->[$cpu]{'flags'} = processCpuFlags($val);
|
my $armCpuPart = parseArmCpuPart($armCpuImplementer, $val);
|
||||||
|
$cpus->[$cpu]{'model'} = "$armCpuImplementer $armCpuPart";
|
||||||
|
} elsif ($field eq "BogoMIPS") {
|
||||||
|
$cpus->[$cpu]{'bogo'} = $val;
|
||||||
|
} elsif ($field eq "Features") {
|
||||||
|
$cpus->[$cpu]{'flags'} = "CPU Features: $val";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ($field eq "processor") {
|
||||||
|
$cpu = $val;
|
||||||
|
} elsif ($field eq "model name") {
|
||||||
|
my $model = $val;
|
||||||
|
$model =~ s/ +/ /g;
|
||||||
|
$cpus->[$cpu]{'model'} = $model;
|
||||||
|
} elsif ($field eq "bogomips" || $field eq "BogoMIPS") {
|
||||||
|
$cpus->[$cpu]{'bogo'} = $val;
|
||||||
|
} elsif ($field eq "flags") {
|
||||||
|
$cpus->[$cpu]{'flags'} = processCpuFlags($val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user