J'ai toujours utilisé ce qui suit et regardé 'Thread(s) per core:'.
hostname:~ # lscpu
Architecture: x86_64
CPU(s): 24
Thread(s) per core: 2 <-- here
Core(s) per socket: 6
CPU socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 44
Stepping: 2
CPU MHz: 1596.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 12288K
Notez cependant que cette technique échouera si un processeur logique a été désactivé avec un simple
echo 0 > /sys/devices/system/cpu/cpuX/online
Notes ajoutées le 8 juillet 2014 : Comme l'a souligné Riccardo Murri, ma réponse ci-dessous indique uniquement si le processeur déclare prendre en charge l'hyperthreading. Généralement, *nix O/S sont configurés pour activer l'hyperthreading s'il est pris en charge. Cependant, pour vérifier cela par programmation, voir par exemple la réponse de Nils !
---- Réponse originale du 25 mars 2012 :
Vous êtes en effet sur la bonne voie :) avec
dmidecode -t processor | grep HTT
Sous Linux, je cherche généralement juste "ht" sur la ligne "flags" de /proc/cpuinfo
. Voir par exemple
grep '^flags\b' /proc/cpuinfo | tail -1
ou si vous souhaitez inclure le "ht" dans le motif
grep -o '^flags\b.*: .*\bht\b' /proc/cpuinfo | tail -1
(\b
correspond aux limites du mot et permet d'éviter les faux positifs dans les cas où "ht" fait partie d'un autre indicateur.)
Si le nombre de processeurs logiques est le double du nombre de cœurs, vous avez HT. Utilisez le script suivant pour décoder /proc/cpuinfo :
#!/bin/sh
CPUFILE=/proc/cpuinfo
test -f $CPUFILE || exit 1
NUMPHY=`grep "physical id" $CPUFILE | sort -u | wc -l`
NUMLOG=`grep "processor" $CPUFILE | wc -l`
if [ $NUMPHY -eq 1 ]
then
echo This system has one physical CPU,
else
echo This system has $NUMPHY physical CPUs,
fi
if [ $NUMLOG -gt 1 ]
then
echo and $NUMLOG logical CPUs.
NUMCORE=`grep "core id" $CPUFILE | sort -u | wc -l`
if [ $NUMCORE -gt 1 ]
then
echo For every physical CPU there are $NUMCORE cores.
fi
else
echo and one logical CPU.
fi
echo -n The CPU is a `grep "model name" $CPUFILE | sort -u | cut -d : -f 2-`
echo " with`grep "cache size" $CPUFILE | sort -u | cut -d : -f 2-` cache"