Je souhaitais connaître le nombre de cœurs de mon système. J'ai donc cherché la même question dans Google. J'ai des commandes telles que la lscpu
commande. Lorsque j'ai essayé cette commande, cela m'a donné le résultat suivant:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 1998.000
BogoMIPS: 5302.48
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
NUMA node0 CPU(s): 0-3
En particulier, cette sortie montre:
- CPU (s): 4
- Noyau par prise: 4
- Famille de CPU: 6
Lequel de ceux-ci indique les cœurs d'un système Linux?
Existe-t-il une autre commande permettant de connaître le nombre de cœurs, ou est-ce que je suppose que c'est complètement faux?
Réponses:
Vous devez examiner les sockets et les cœurs par socket. Dans ce cas, vous avez 1 CPU physique (socket) qui a 4 cœurs (cœurs par socket).
la source
nproc
je récupère 4. En utilisantcat /proc/cpuinfo
je reçois 4, et donc il semble que cette réponse est fausse, du moins pour ma situation.Pour obtenir une image complète, vous devez connaître le nombre de threads par noyau, de cœurs par socket et de sockets . Si vous multipliez ces nombres, vous obtiendrez le nombre de processeurs de votre système.
Les processeurs correspondent à ce que vous voyez lorsque vous exécutez
htop
(ils ne correspondent pas à des processeurs physiques).Voici un exemple tiré d'un ordinateur de bureau:
Et un serveur:
La sortie de
nproc
correspond au nombre de processeurs à partir delscpu
. Pour la machine de bureau ci-dessus, cela devrait correspondre aux 8 CPU (s) signalé (s) parlscpu
:La sortie de
/proc/cpuinfo
doit correspondre à ces informations, par exemple sur le système de bureau ci-dessus, nous pouvons voir qu'il y a 8 processeurs (CPU) et 4 cœurs (identificateurs principaux 0-3):Le
cpu cores
rapporté par/proc/cpuinfo
correspond à celuiCore(s) per socket
rapporté parlscpu
. Pour la machine de bureau ci-dessus, cela doit correspondre aux 4 cœurs par socket rapportés par lscpu:Pour répondre spécifiquement à votre question, vous indiquez le nombre de cœurs que vous avez en multipliant le nombre de cœurs que vous avez par socket par le nombre de sockets que vous avez.
Pour les exemples de systèmes ci-dessus, le bureau a 4 cœurs:
Alors que le serveur a 16:
Un autre utilitaire utile est la
dmidecode
sortie des informations par socket. Dans le cas du système de serveur répertorié ci-dessus, nous nous attendons à voir 8 cœurs par socket et 16 threads par socket:La
lscpu
commande contient un certain nombre d’options utiles que vous voudrez peut-être extraire, par exemple:Voir
man lscpu
pour plus de détails.En résumé:
la source
lscpu --all --extended
serait un ajout utile mais je n'ai plus accès à ces machines particulières.lscpu --all --parse=CORE,SOCKET | grep -Ev "^#" | sort -u | wc -l
Socket(s) * Core(s) per socket
. Compte tenu de ce que je viens de dire, je suppose que ceecho Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))
serait mieux pour que les gens puissent voir exactement ce qui est en train de se multiplier ...Vous pouvez obtenir cette information par
nproc(1)
commandeIl ne nécessite pas de privilèges root.
la source
Pour que la réponse ne soit pas source de confusion, vous devez comprendre quelques concepts simples d'architecture informatique:
Il existe différents types d'instructions. La logique de décision à l'intérieur d'une CPU envoie les différentes instructions à différentes unités matérielles . Par exemple, les instructions arithmétiques sont en réalité exécutées par une ALU (unité arithmétique / logique), tandis que les instructions qui chargent / stockent à partir de la mémoire sont exécutées par une sorte d' unité de mémoire .
Un noyau fait référence à un ensemble de matériel d’exécution (c’est-à-dire que chaque noyau a une ALU, une unité de mémoire, etc.).
Vous pouvez avoir plusieurs processeurs partageant un même cœur - on parle alors d’hyperthreading.
Un socket est l’emplacement physique de la carte mère dans lequel une puce est insérée. Cette puce a un certain nombre de cœurs.
Exemples:
Exemple du PO:
Un autre exemple:
Deux sockets physiques, chacun contenant une puce avec 4 cœurs physiques, soit un total de 8 cœurs. Deux threads peuvent donner des instructions à chaque core (cette machine est hyperthreading), ce qui signifie qu'il doit y avoir deux processeurs connectés à chaque core, soit un total de 8 * 2 = 16 CPU
La première machine peut exécuter avec précision quatre instructions à un moment donné, selon la période. La deuxième machine peut exécuter entre 8 et 16 instructions à un moment donné: elle ne sera exécutée que lorsque chaque paire de CPU exécute différents types d'instructions et peut donc partager un cœur sans attendre.
la source
Vous pouvez également utiliser la commande
cat /proc/cpuinfo
qui générera un bloc de données pour chaque cœur. Chaque morceau commence par cette information:Les cœurs sont numérotés à partir de 0. Ainsi, si le dernier bloc indique
processor : 3
comme dans ce cas, votre machine dispose de 4 cœurs.la source
grep -c ^processor /proc/cpuinfo
(getconf fait partie de la glibc)
la source
getconf _NPROCESSORS_CONF
vous obtient le nombre de processeurs configurés. Vous pouvez également obtenir la valeur de ces deux macros dans un code source C, en utilisant lasysconf()
fonction. Tapezman sysconf
pour plus d'informations.la source
t 4
rôle de dmidecode? Comment les nombres et les lignes activées se multiplient-ils? Votre exemple montre-t-il 2 cœurs, ou 6, 12, ou 24, ou un autre nombre?4
isprocessor
, voir linux.die.net/man/8/dmidecode . Mais utiliser4
comme argument est une mauvaise pratique.bash: dmidecode: command not found
C'est tout ce dont vous avez besoin. Il s’agit du nombre de cœurs en ligne, que l’hyperthreading soit activé ou non.
Un autre moyen facile.
la source
ls -d /sys/devices/system/cpu/cpu* | wc -l
montré 49 parce qu’il existe un répertoirecpuidle
parmi lescpuN
répertoires.J'ai trouvé ça:
la source
Je veux juste ajouter quelques informations à la réponse de @htaccess.
Dans CentOS 6.x, dmidecode ne génère pas d’informations sur le nombre de cœurs / fils, et considère en réalité "CPU" comme "CPU" ou "Core" dans lscpu, et non "socket".
la source
La famille du processeur n’est pas pertinente ici.
Dans votre cas, vous avez un total de 4 noyaux complets.
Ce qui peut aussi être important, c'est "Fil (s) par noyau". Mais vous en avez 1, donc pas dans votre cas.
la source
Cores = Cores per socket X Sockets
, voir la description dans ma réponse.Un moyen simple de déterminer le nombre de processeurs consiste à exécuter les commandes ci-dessous:
la source