646 votes

Obtenir le nombre de processeurs/coeurs sous Linux

J’ai ce script, mais je ne sais pas comment obtenir le dernier élément dans l’imprimé :

Le dernier élément devrait être le nombre de processeurs, moins 1.

775voto

unbeli Points 9573
<pre><code></code><p>ou tout simplement</p><pre><code></code></pre><p><code></code></p></pre>

771voto

uckelman Points 7228

Traite le contenu de `` est inutilement baroque. Utilisation de nproc qui fait partie de coreutils, il devrait être disponible sur la plupart des Linux installe.

Sur ma machine 8-core :

306voto

epicbrew Points 1473

Le `` commande fournit encore une autre façon d’obtenir un nombre de CPU :

L’avantage de cela au cours de certaines des autres approches est que getconf a été autour depuis longtemps. Quelques-unes des anciennes machines linux je dois faire du développement sur n’est pas le ou les commandes disponibles, mais ils ont `` . Tel que mentionné dans les commentaires il est aussi assez portable tel qu’il fonctionne aussi sous Mac OS x aussi bien.

131voto

mklement0 Points 12597

Préface: Le problème avec l' /proc/cpuinfo-en fonction des réponses , c'est qu'ils analyser l'information qui a été destinés à l'homme de la consommation et donc utilise pas stable en format conçu pour la machine d'analyse - le format de sortie peut varier au sein de plates-formes et les conditions d'exécution; l'aide d' lscpu -p sur Linux (et sysctl sur OSX) contourne le problème.


Voici une solution qui fonctionne sur Linux et OSX.
bash extraits de code pour déterminer le nombre d' - en-ligne - logique ou physique Processeurs sont fournis; voir les commentaires pour plus de détails.

Utilise lscpu pour Linux, et sysctl pour OSX.

La terminologie note: CPU qui désigne la plus petite unité de traitement, tel que vu par l'OS. Non-la technologie hyper-threading cœurs de chaque correspondent à 1 CPU, alors que l'hyper-threading carottes contiennent plus de 1 (typiquement: 2) - logique - CPU.
Linux utilise la taxonomie, en commençant par la plus petite unité: CPU < core < socket < livre < nœud, chaque niveau comprenant 1 ou plusieurs instances du niveau inférieur suivant.
Ma connaissance est peu fragile ici - ne laissez-moi savoir si je me trompe. Personne ne sait ce qu'est un "livre" est dans ce contexte?

# OSX:             Use `sysctl -n hw.*cpu_max`, which returns the values of 
#                  interest directly.
#                  CAVEAT: Using the "_max" key suffixes means that the *maximum*
#                          available number of CPUs is reported, whereas the
#                          current power-management mode could make *fewer* CPUs 
#                          available; dropping the "_max" suffix would report the
#                          number of *currently* available ones; see [1] below.
#
# Linux:           Parse output from `lscpu -p`, where each output line represents
#                  a distinct (logical) CPU.
#                  Note: Newer versions of `lscpu` support more flexible output
#                        formats, but we stick with the parseable legacy format 
#                        generated by `-p` to support older distros, too.
#                        `-p` reports *online* CPUs only - i.e., on hot-pluggable 
#                        systems, currently disabled (offline) CPUs are NOT
#                        reported.

# Number of LOGICAL CPUs (includes those reported by hyper-threading cores)
  # Linux: Simply count the number of (non-comment) output lines from `lscpu -p`, 
  # which tells us the number of *logical* CPUs.
logicalCpuCount=$([[ $(uname) = 'Darwin' ]] && 
                       sysctl -n hw.logicalcpu_max || 
                       lscpu -p | egrep -v '^#' | wc -l)

# Number of PHYSICAL CPUs (cores).
  # Linux: The 2nd column contains the core ID, with each core ID having 1 or
  #        - in the case of hyperthreading - more logical CPUs.
  #        Counting the *unique* cores across lines tells us the
  #        number of *physical* CPUs (cores).
physicalCpuCount=$([[ $(uname) = 'Darwin' ]] && 
                       sysctl -n hw.physicalcpu_max ||
                       lscpu -p | egrep -v '^#' | sort -u -t, -k 2,4 | wc -l)

Notez que BSD systèmes dérivés autres que OSX - par exemple, FreeBSD seule l' hw.ncpu - clé pour sysctl, ce qui OSX a déconseillé; je suis dans le flou sur ce qui de la de nouvelles clés hw.npu correspond à: hw.(logical|physical)cpu_[max].

Coup de chapeau à @teambob pour l'aidant à corriger la physique-CPU-nombre lscpu commande.

Mise en garde: lscpu -p sortie ne comprend PAS un "livre" dans la colonne ( man page mentions "livres" comme une entité entre le connecteur et le nœud dans la hiérarchie taxonomique). Si les "livres" sont en jeu, sur un système Linux (quelqu'un sait quand et comment?), la physique-CPU-comte commande peut sous-rapport (ce qui est fondée sur l'hypothèse qu' lscpu rapports des Identifiants qui sont des non-unique à travers de niveau supérieur entités; par exemple: 2 différents cœurs de 2 sockets différents pourraient avoir le même IDENTIFIANT).

[1] https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/sysctlbyname.3.html

12voto

lunixbochs Points 7475

Cela a fonctionné pour moi. ``vous permet de récupérer uniquement la dernière X lignes.

Si vous avez l’hyperthreading, cela devrait fonctionner pour saisir le nombre de cœurs physiques .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X