J'ai accès à certaines machines xeon pour vérifier les performances. Je veux savoir quelle architecture ils utilisent comme Haswell, Sandybridge, Ivybridge. Existe-t-il une commande pour le savoir?
C'est un peu une solution de contournement bon marché mais vous pouvez obtenir ces informations de gcc! Je vais vous expliquer: gcc est capable d'optimiser les binaires pour chaque sous-archivage avec l'option -march. De plus, il est capable de détecter le vôtre et d'optimiser automatiquement pour votre machine avec -march = native En supposant donc, il vous suffit d'appeler gcc avec march = native et de lui demander quels drapeaux il utiliserait: en bref
gcc -march=native -Q --help=target|grep march
pour moi ça donne
-march= bdver1
mais mon pc fonctionne avec un processeur buldozer AMD
cat /sys/devices/cpu/caps/pmu_name
haswell
Vous ne pouvez probablement pas car ce sont des noms commerciaux pour la vente commerciale, pas le nom "technique".
Cependant, vous pouvez obtenir ce dont vous avez besoin sur dmidecode, puis visiter http://ark.intel.com (pour votre processeur Xeon) pour déterminer la famille commerciale.
[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
À partir de cette sortie, je pouvais visiter le site Web arche d'Intel et rechercher le processeur 3770, ce qui me dirait que j'ai une puce Ivy Bridge.
Remarque: Ce script ne fonctionne plus. L'URL de recherche d'Intel a changé.
Vous trouverez ci-dessous un script bash qui trouve automatiquement le nom de code d'architecture de votre processeur à l'aide de /proc/cpuinfo
et https://ark.intel.com/ . Pour fonctionner, vous devez avoir pup installé.
En exécutant le code sur mon ordinateur, j'obtiens le résultat suivant:
$ ./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"
Sur le cloud, aucune des réponses ci-dessus ne fonctionne pour moi. J'ai un nom de modèle de "CPU Intel (R) Xeon (R) @ 2.00GHz", dmidecode me dit que Google a fait les processeurs, et cetera.
/ proc/cpuinfo "famille cpu" et "modèle" aident pas mal. Ils sont uniques pour presque toutes les combinaisons et peuvent être consultés sur https://en.wikichip.org/wiki/intel/cpuid . Cependant, le modèle 85 de la famille 6 est à la fois un puits de lumière et un lac en cascade.
Vous avez tenté de corriger le script que @Tyilo avait publié plus tôt. La version mise à jour est ci-dessous.
#!/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"
En exécutant le script mis à jour sur mon serveur, j'obtiens le résultat suivant:
$ ./intel_codename
Processor name: E3-1225 v5
Skylake
Pas du tout un expert. Je viens d'apprendre à utiliser curl et chiot au cours de la dernière heure. Je ne l'ai pas testé sur d'autres sauf ma propre machine.
pdate: A fait quelques tests supplémentaires. Le script devrait fonctionner pour Xeon Famille de processeur. Cependant, il se casse (montrant Aucun résultat trouvé) si la requête de base de données Intel Ark renvoie plusieurs résultats. Par exemple pour Xeon Platinum 8260, il renverra 8260 et toutes ses variantes telles que 8260M. De plus, si le nom (numérotation du processeur) est utilisé dans d'autres produits ou champs de données clés, plusieurs résultats seront renvoyés par la requête et le script ne trouvera pas le résultat. Il casse également pour les processeurs de la version 0, tels que le Xeon E5-2690 0.
Pour la famille de processeurs Intel Core (i7, i5, etc.), vous devez remplacer la commande sed par la commande d'origine par @Tyilo, voir ci-dessous.
name=$(sed 's/.*\s\(\S*\) CPU.*/\1/' <<<"$modelname")
Encore une fois, si la requête renvoie plusieurs résultats. Ce script simple ne sera pas en mesure d'analyser correctement et donne Aucun résultat trouvé.
Je travaille actuellement sur un serveur. Mon script fonctionne sur au moins des serveurs plus récents. Faire la différence entre les serveurs skylake et cascade lake n'est pas joli ... il utilise le champ 'proc model'/proc/cpuinfo pour taquiner skylake vs cascade lake.
#!/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"
Cela ne gère pas le processeur client ... mais il devrait être relativement simple de prendre les informations du processeur client de WikiChip et d'élargir la liste.