Je me demande simplement comment savoir en bash combien de cœurs de processeur un utilisateur utilise actuellement sur un serveur Linux?
Je soumets une bonne quantité de travaux d'arrière-plan au serveur, je voudrais donc écrire un script bash pour vérifier avant de soumettre un travail si les travaux (processus) en cours soumis par moi sont trop nombreux, car je dois laisser d'autres les utilisateurs ont suffisamment de cœurs à utiliser pour leur travail. Je voudrais savoir quelle commande bash peut me dire combien de cœurs mes tâches utilisent actuellement.
Merci et salutations!
Je ne sais pas si cela aide, mais vous pouvez utiliser l'
mpstat
utilitaire pour obtenir une ventilation de l'utilisation du processeur par processeur individuel (ou cœur). Par exemple:Dans cet exemple, vous pouvez voir que CPU
0
,1
et6
font plus de travail que le reste d'entre eux. Parfois, vous verrez qu'un seul processeur est proche (ou à) de 100% tandis que d'autres sont à zéro. Cela peut être un indicateur d'un programme (ou d'une partie d'un programme) qui est monothread et ne peut utiliser qu'un seul processeur à la fois.Pour installer
mpstat
sur un système Fedora, RHEL ou CentOS, utilisezyum install sysstat
.la source
# aptitude search mpstat #
.aptitude search systat
place.sysstat
sur Debian et sur Ubuntu . Je m'attendrais à ce que la plupart des distributions dérivées de Debian utilisent le même nom de paquet. Sur les distributions dérivées de Debian, commencez parapt-cache search --full mpstat
.À moins qu'ils ne soient explicitement configurés pour ne pas (c'est-à-dire épingler un processus à un processeur spécifique), tous les cœurs peuvent être supposés être utilisés à tout moment. Le planificateur allouera les processus au prochain noyau disponible. Par exemple, "System Monitor" (une partie de GNOME) montre ma charge presque la même sur les 4 cœurs de ma machine.
la source
Vous verrez donc ici des réponses qui vous diront comment vos cœurs sont utilisés.
CEPENDANT - cela ne vous rend pas vraiment service. Vous avez fait une supposition de base qui ne tient tout simplement pas - que vos travaux auront tendance à se regrouper sur un sous-ensemble des cœurs.
Au lieu de cela, vos tâches seront réparties sur tous les cœurs, à moins que vous n'implémentiez quelque chose qui les maintienne "parqués" d'une manière ou d'une autre. (Remarque: je ne recommande pas cela; je dis simplement "à moins que")
Voici une stratégie alternative: Identifiez pour votre système particulier quel est le niveau de CHARGE lorsque vous pensez qu'il est "acceptable" pour que d'autres utilisateurs ajoutent plus de tâches. Ensuite, créez quelque chose qui ne soumet une nouvelle tâche en arrière-plan que lorsque le niveau de charge est inférieur à cette limite.
De cette façon, la solution sera indépendante du nombre de cœurs, plus portable, plus flexible et plus facile à "peaufiner" également.
la source
Si vous voulez le faire pour qu'il fonctionne sur Linux et OS X, vous pouvez faire:
la source
Vous pouvez obtenir une estimation approximative en exécutant
top
, en appuyant sur 'U
' et en spécifiant votre nom d'utilisateur, puis en additionnant l'utilisation du processeur de vos premiers processus.la source
top
peut s'exécuter en mode batch avec le commutateur -b. Combinez-le avec le commutateur -n pour obtenir le nombre d'itérations dont vous avez besoin.top
sortie, soit Google pour voir si quelqu'un l'a déjà fait. Cependant, je ne suis pas convaincu que cela en vaille la peine car je pense que j'obtiendrai des sorties différentes pour chaque exécution, étant donné la vitesse à laquelle le changement de contexte se produit. Le chargement du système n'est-il pas un indicateur suffisamment bon? Il vous indique efficacement le nombre de cœurs virtuels requis pour gérer la file d'attente de processus (processus en attente sur le processeur).