it-swarm.com.de

So finden Sie die Intel-Architekturfamilie über die Befehlszeile heraus

Ich erhalte Zugriff auf einige xeon-Computer, um die Leistung zu überprüfen. Ich möchte herausfinden, welche Architektur sie verwenden, wie Haswell, Sandybridge, Ivybridge. Gibt es einen Befehl, um dies herauszufinden?

36

Es ist ein bisschen eine billige Problemumgehung, aber Sie könnten diese Informationen von gcc erhalten! Ich erkläre: gcc kann mit der Option -march Binärdateien für jeden Unterarchiv optimieren. Darüber hinaus ist es in der Lage, Ihre zu erkennen und automatisch mit -march = native für Ihre Maschine zu optimieren. Angenommen, Sie müssen nur gcc mit march = native aufrufen und fragen, welche Flags es verwenden würde: kurz gesagt

gcc -march=native -Q --help=target|grep march

für mich gibt es

-march=                               bdver1

aber mein PC läuft mit einem AMD Buldozer Prozessor

51
Nephanth

Diese Daten werden in PMU_NAME gespeichert. Geben Sie einfach Folgendes ein:

cat /sys/devices/cpu/caps/pmu_name
haswell
18
wuseman

Sie können wahrscheinlich nicht, weil dies Marketingnamen für den kommerziellen Verkauf sind, nicht der "technische" Name.

Sie können jedoch das, was Sie benötigen, von dmidecode erhalten und dann http://ark.intel.com (für Ihren Xeon-Prozessor) besuchen, um die kommerzielle Familie zu bestimmen.

[[email protected] ~]# dmidecode|grep -i intel
        Socket Designation: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
        Manufacturer: Intel
        Version: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

Von dieser Ausgabe aus konnte ich Intels Arche-Website besuchen und nach der 3770-CPU suchen, die mir sagen würde, dass ich einen Ivy Bridge-Chip habe.

9
Jason Harris

Hinweis: Dieses Skript funktioniert nicht mehr. Die Such-URL von Intel hat sich geändert.

Unten finden Sie ein Bash-Skript, das mithilfe von /proc/cpuinfo Und https://ark.intel.com/ automatisch den Namen des Architekturcodes für Ihre CPU ermittelt. Um zu arbeiten, muss pup installiert sein.

Wenn ich den Code auf meinem Computer ausführe, erhalte ich das folgende Ergebnis:

$ ./intel_codename
Processor name: i7-7700HQ
Kaby Lake

#!/bin/bash

set -euo pipefail

if [[ $# == 0 ]]; then
    modelname=$(cat /proc/cpuinfo | grep 'model name' | head -1)
    if ! grep Intel <<<"$modelname" > /dev/null; then
        echo "You don't seem to have an Intel processor" >&2
        exit 1
    fi

    name=$(sed 's/.*\s\(\S*\) CPU.*/\1/' <<<"$modelname")
    echo "Processor name: $name" >&2
else
    name=$1
fi

links=($(curl --silent "https://ark.intel.com/search?q=$name" | pup '.result-title a attr{href}'))

results=${#links[@]}
if [[ $results == 0 ]]; then
    echo "No results found" >&2
    exit 1
fi

link=${links[0]}
if [[ $results != 1 ]]; then
    echo "Warning: $results results found" >&2
    echo "Using: $link" >&2
fi

url="https://ark.intel.com$link"
codename=$(curl --silent "$url" | pup '.CodeNameText .value text{}' | xargs | sed 's/Products formerly //')

echo "$codename"
7
Tyilo

In der Cloud funktioniert keine der oben genannten Antworten für mich. Ich habe den Modellnamen "Intel (R) Xeon (R) CPU bei 2,00 GHz". Dmidecode sagt mir, dass Google die Prozessoren usw. hergestellt hat.

/ proc/cpuinfo "CPU-Familie" und "Modell" helfen ziemlich viel. Sie sind für fast alle Kombinationen einzigartig und können unter https://en.wikichip.org/wiki/intel/cpuid nachgeschlagen werden. Das Modell 85 der Familie 6 ist jedoch sowohl ein Skylake- als auch ein Cascade-See.

1
Bryan Larsen

Es wurde versucht, das zuvor von @Tyilo veröffentlichte Skript zu reparieren. Die aktualisierte Version ist unten.

#!/bin/bash

set -euo pipefail

if [[ $# == 0 ]]; then
    modelname=$(cat /proc/cpuinfo | grep 'model name' | head -1)
    if ! grep Intel <<<"$modelname" > /dev/null; then
        echo "You don't seem to have an Intel processor" >&2
        exit 1
    fi

    name=$(sed 's/.*CPU\s\(.*\)\s\(@\).*/\1/' <<<"$modelname")
    echo "Processor name: $name" >&2
    name=${name// /'%20'}
else
    name=$1
fi

links=($(curl --silent "https://ark.intel.com/content/www/us/en/ark/search.html?_charset_=UTF-8&q=$name" | pup '#FormRedirectUrl attr{value}'))

results=${#links[@]}
if [[ $results == 0 ]]; then
    echo "No results found" >&2
    exit 1
fi

link=${links[0]}
if [[ $results != 1 ]]; then
    echo "Warning: $results results found" >&2
    echo "Using: $link" >&2
fi

url="https://ark.intel.com$link"
codename=$(curl --silent "$url" | pup 'span[data-key="CodeNameText"] text{}' | xargs | sed 's/Products formerly //')

echo "$codename"

Wenn ich das aktualisierte Skript auf meinem Server ausführe, erhalte ich das folgende Ergebnis:

$ ./intel_codename 
Processor name: E3-1225 v5
Skylake

Überhaupt kein Experte. Ich habe gerade in der letzten Stunde gelernt, wie man Locken und Welpen benutzt. Ich habe es nur an meiner eigenen Maschine getestet.

pdate : Weitere Tests durchgeführt. Das Skript sollte für Xeon Prozessorfamilie funktionieren. Es wird jedoch unterbrochen (es werden keine Ergebnisse gefunden), wenn die Intel Ark-Datenbankabfrage mehrere Ergebnisse zurückgibt. Für Xeon Platinum 8260 wird beispielsweise 8260 und alle seine Varianten wie 8260M zurückgegeben. Wenn der Name (Prozessornummerierung) zufällig in anderen Produkten oder Schlüsseldatenfeldern verwendet wird, werden mehrere Ergebnisse von der Abfrage zurückgegeben und das Skript findet das Ergebnis nicht. Es funktioniert auch für Prozessoren der Version 0, z. B. Xeon E5-2690 0.

Für Intel Core Prozessorfamilie (i7, i5 usw.) müssen Sie den Befehl sed durch den ursprünglichen Befehl von @Tyilo ersetzen (siehe unten).

name=$(sed 's/.*\s\(\S*\) CPU.*/\1/' <<<"$modelname")

Wiederum, wenn die Abfrage mehrere Ergebnisse zurückgibt. Dieses einfache Skript kann nicht korrekt analysiert werden und liefert keine Ergebnisse.

0
Gyp Sud

Ich arbeite derzeit im Serverland. Mein Skript funktioniert auf mindestens neueren Servern. Die Unterscheidung zwischen Skylake- und Cascade Lake-Servern ist nicht besonders hübsch. Es wird das Feld/proc/cpuinfo 'Modellname' verwendet, um Skylake gegen Cascade Lake herauszufiltern.

#!/bin/bash
# cascade lake 2nd gen stuff from https://www.intel.com/content/www/us/en/products/docs/processors/xeon/2nd-gen-xeon-scalable-spec-update.html
# 2nd gen xeon scalable cpus: cascade lake sku is 82xx, 62xx, 52xx, 42xx 32xx W-32xx  from https://www.intel.com/content/www/us/en/products/docs/processors/xeon/2nd-gen-xeon-scalable-spec-update.html
# skylake 1st gen stuff from https://www.intel.com/content/www/us/en/processors/xeon/scalable/xeon-scalable-spec-update.html
# 1st gen xeon scalable cpus: 81xx, 61xx, 51xx, 81xxT, 61xxT 81xxF, 61xxF, 51xx, 41xx, 31xx, 51xxT 41xxT, 51xx7, 
CPU_NAME=`cat /proc/cpuinfo | awk '
  function decode_fam_mod(vndor, fam, mod, mod_nm) {
    if (vndor == "GenuineIntel") {
      # cpuid tables from https://en.wikichip.org/wiki/intel/cpuid
      dcd[1,1]="Ice Lake";              dcd[1,2] ="Family 6 Model 108";
      dcd[2,1]="Ice Lake";              dcd[2,2] ="Family 6 Model 106";
      dcd[3,1]="Cascade Lake/Skylake";  dcd[3,2] ="Family 6 Model 85"; # 06_55h  Intel always does the hex fam_model
      dcd[4,1]="Broadwell";             dcd[4,2] ="Family 6 Model 79"; # 06_4fh
      dcd[5,1]="Broadwell";             dcd[5,2] ="Family 6 Model 86"; # 06_56h
      dcd[6,1]="Haswell";               dcd[6,2] ="Family 6 Model 63"; # 06_3fh
      dcd[7,1]="Ivy Bridge";            dcd[7,2] ="Family 6 Model 62";
      dcd[8,1]="Sandy Bridge";          dcd[8,2] ="Family 6 Model 45"; # 06_2dh
      dcd[9,1]="Westmere";              dcd[9,2] ="Family 6 Model 44";
      dcd[10,1]="EX";                   dcd[10,2]="Family 6 Model 47";
      dcd[11,1]="Nehalem";              dcd[11,2]="Family 6 Model 46";
      dcd[12,1]="Lynnfield";            dcd[12,2]="Family 6 Model 30";
      dcd[13,1]="Bloomfield, EP, WS";   dcd[13,2]="Family 6 Model 26";
      dcd[14,1]="Penryn";               dcd[14,2]="Family 6 Model 29";
      dcd[15,1]="Harpertown, QC, Wolfdale, Yorkfield";  dcd[15,2]="Family 6 Model 23";
      str = "Family " fam " Model " mod;
      #printf("str= %s\n", str);
      res=" ";
      for(k=1;k <=15;k++) { if (dcd[k,2] == str) {res=dcd[k,1];break;}}
      if (k == 3) {
        # so Cooper Lake/Cascade Lake/SkyLake)
        if (match(mod_nm, / [86543]2[0-9][0-9]/) > 0) { res="Cascade Lake";} else
        if (match(mod_nm, / [86543]1[0-9][0-9]/) > 0) { res="Skylake";}
      }
      return res;
    }
  }
  /^vendor_id/ {
    vndr=$(NF);
  }
  /^cpu family/ {
    fam=$(NF);
  }
  /^model/ {
    if ($2 == ":") {
      mod=$(NF);
    }
  }
  /^model name/ {
#model name : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
    n=split($0, arr, ":");
    mod_nm = arr[2];
    #printf("vndr= %s, fam= %s, mod= %s, mod_nm= %s\n", vndr, fam, mod, mod_nm);
    cpu_name=decode_fam_mod(vndr, fam, mod, mod_nm);
    printf("%s\n", cpu_name);
    exit;
  }
'`
echo "cpu uarch= $CPU_NAME"

Dies behandelt den Client-CPU nicht ... aber es sollte relativ einfach sein, die Client-CPU-Informationen von WikiChip zu übernehmen und die Liste zu erweitern.

0
patinnc