jak znaleźć rodzinę architektury Intel z linii poleceń

28

Mam dostęp do niektórych maszyn Xeon do sprawdzania wydajności. Chcę dowiedzieć się, jakiej architektury używają, takich jak Haswell, Sandybridge, Ivybridge. Czy istnieje polecenie, aby się tego dowiedzieć?

ciekawy inżynier
źródło
2
/proc/cpuinfowłaściwie podaje nazwę modelu Intel (R) blah blah blah GHz, powinieneś google go bezpośrednio.
Arthur2e5
Poprosiłem o rodzinę architektury
ciekawy inżynier
1
Nie sądzę, że „rodzina architektury” jest zgłaszana, to tylko nazwy handlowe. Dostajesz nazwę modelu /proc/cpuinfo, myślę, że to od Ciebie zależy, czy przełożysz ją na odpowiednie nazwisko.
Gilles „SO- przestań być zły”
@Ijustwanttocode Musisz użyć jakiejś tabeli, aby wyszukać te nazwy handlowe.
Arthur2e5

Odpowiedzi:

45

To trochę tanie obejście, ale możesz uzyskać te informacje z gcc! Wyjaśnię: gcc jest w stanie zoptymalizować pliki binarne dla każdego subarcha z opcją -march. Co więcej, jest w stanie wykryć twój i automatycznie zoptymalizować dla twojego komputera z -march = native Zakładając, że po prostu musisz wywołać gcc z march = native i zapytać go, jakich flag użyłby: w skrócie

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

dla mnie to daje

-march=                               bdver1

ale mój komputer działa z procesorem amd buldozer

Nefant
źródło
twoje rozwiązanie odpowiada na pytanie. Mi to pasuje.
AJN
To nie działa dla mnie, ponieważ zwraca broadwellzamiast kabylake. Jest tak prawdopodobnie dlatego, że moja wersja gcc nie rozróżnia tych dwóch rodzin podczas generowania zestawu.
Tyilo
gcc8 może identyfikować skylake jako taki, podczas gdy gcc5 identyfikuje się jako broadwell.
Eric,
8

Prawdopodobnie nie możesz, ponieważ są to nazwy marketingowe do sprzedaży komercyjnej, a nie nazwa „techniczna”.

Możesz jednak uzyskać potrzebne informacje z dmidecode, a następnie odwiedzić stronę http://ark.intel.com (dla swojego procesora Xeon), aby ustalić rodzinę komercyjną.

[root@mediasrv ~]# 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

Z tego wyjścia mogłem odwiedzić stronę Arka Intela i poszukać procesora 3770, który powiedziałby mi, że mam układ Ivy Bridge.

Jason Harris
źródło
1
Aby zrobić to automatycznie za pomocą skryptu, użyłbym dmidecode lub / proc / cpuinfo i połączyłbym go z grep lub awk lub perl i wersją do wydrukowania listy procesorów xeon na wikipedii, którą otrzymałeś z curl lub wget: en.wikipedia.org/ w /…
erik
5

Poniżej znajduje się skrypt bash, który automatycznie znajduje nazwę kodową architektury twojego procesora za pomocą /proc/cpuinfoi https://ark.intel.com/ . Do pracy wymaga zainstalowania szczenięcia .

Po uruchomieniu kodu na moim komputerze otrzymuję następujący wynik:

$ ./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"
Tyilo
źródło
Działa i robi to, co sugerował @erik!
Panayotis
5

Te dane są przechowywane w PMU_NAME, wystarczy wpisać:

cat /sys/devices/cpu/caps/pmu_name
haswell
wuseman
źródło