désactivation des cœurs de processeur sur le processeur quad core sous linux

14

Je souhaite désactiver 3 cœurs de processeur et exécuter mon processeur sur un seul cœur. Je commande utilisé: maxcpus=1. Mais après cela, j'ai exécuté cette commande ls /sys/devices/system/cpu. Ça se voit encore cpu0,cpu1,cpu2,cpu3.

J'ai essayé aussi: echo 0 > /sys/devices/system/cpu3/onlinemais je reçois l'erreur suivante: no such file or directory.

user3818847
la source
On ne sait pas où vous mettez la maxcpus=1 commande ? Avez-vous mis cette chaîne grub.cfgcomme option de démarrage? (Veuillez mettre à jour votre question au lieu de répondre dans les commentaires).
Anthon
J'utilise la carte freescale IMx6 sabreauto sur linux OS.J'ai exécuté la commande sur un émulateur de terminal "gtkterm"
user3818847
Avec cette commande echo 0> / sys / devices / system / cpu3 / online, je peux voir l'arrêt de cpu3. Maintenant, ce que je veux savoir, est-ce que je devrais redémarrer le système pour que les changements
prennent
AFAIK, vous devez spécifier maxcpus = 1 comme paramètre du noyau (c'est-à-dire lorsque vous êtes dans grub). Modifiez '/ etc / defaults / grub' pour l'ajouter aux paramètres du noyau, exécutez 'update-grub' et redémarrez. Cela rendra les choses persistantes, c'est-à-dire avec un seul processeur au démarrage de Linux.
Anthon
2
@ user3818847 quelle distribution utilisez-vous? La modification des paramètres de démarrage (à passer maxcpus=1) varie selon la distribution. De plus, le /syschemin que vous avez est tout simplement le mauvais, le bon chemin est /sys/devices/system/cpu/cpu3/online.
Patrick

Réponses:

28

Comme Patrick l'a indiqué dans un commentaire , vous vous êtes /systrompé de chemin .

echo 0 > /sys/devices/system/cpu/cpu3/online

Si vous souhaitez désactiver tous les CPU sauf cpu0:

for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
  echo 0 >"$x"
done

La saisie maxcpus=1à l'invite du shell n'a aucun effet. Plus précisément, il définit la variable maxcpussur la valeur 1de ce shell, ce qui n'a aucun autre effet. Vous pouvez définir le nombre de CPU au démarrage en passant maxcpuscomme paramètre de noyau . Pour cela, vous devez changer la configuration de votre chargeur de démarrage (par exemple pour changer la ligne de commande du noyau dans U-Boot).

Gilles 'SO- arrête d'être méchant'
la source
Merci pour les suggestions. Cela a fonctionné avec la commande suggérée par vous
user3818847
C'est au moins quelque peu spécifique au noyau. J'utilise le noyau 3.6.6 et il n'y a pas de tels fichiers; vous utilisez plutôt le single /sys/devices/system/cpu/onlineet les ./offlinefichiers pour contrôler tous les cœurs.
Daniel Griscom
@Gilles - Existe-t-il un moyen de savoir combien de temps il faut pour allumer coreet éteindre un?
Chetan Arvind Patil
@ChetanArvindPatil Time it. Je pense que le temps serait dominé par l'accès à la RAM si le code impliqué n'est pas déjà dans le cache L2 et par le temps pour éteindre le cœur sinon, mais cela dépend beaucoup du CPU et du système d'exploitation.
Gilles 'SO- arrête d'être méchant'
1
@Xofo Lorsque le noyau désactive un noyau, ce noyau exécute le code du noyau, donc aucun thread n'est planifié sur ce noyau particulier à ce moment. Une fois le noyau désactivé, les threads ne sont plus planifiés sur ce noyau. Je ne sais pas ce qui se passe si l'affinité d'un thread le restreint à un ensemble de cœurs qui sont tous désactivés.
Gilles 'SO- arrête d'être méchant'
1

vous ne désactivez ou ne désactivez pas nécessairement les cœurs.

vous utiliseriez des cpusets et un ensemble de tâches

http://man7.org/linux/man-pages/man7/cpuset.7.html

Un cpuset définit une liste de CPU et de nœuds de mémoire ...

Le système de fichiers cpuset est une interface de pseudo-système de fichiers vers le mécanisme de cpuset du noyau, qui est utilisé pour contrôler le placement du processeur et le placement en mémoire des processus. Il est généralement monté sur / dev / cpuset.

Sur les systèmes avec des noyaux compilés avec un support intégré pour les cpusets, tous les processus sont attachés à un cpuset et les cpusets sont toujours présents. Si un système prend en charge les cpusets, il aura alors l'entrée nodev cpuset dans le fichier / proc / filesystems. En montant le système de fichiers cpuset (voir la section EXEMPLE ci-dessous), l'administrateur peut configurer les cpusets sur un système pour contrôler le processeur et le placement en mémoire des processus sur ce système. Par défaut, si la configuration de cpuset sur un système n'est pas modifiée ou si le système de fichiers cpuset n'est même pas monté, le mécanisme de cpuset, bien que présent, n'a aucun effet sur le comportement du système.

Les CPU d'un système comprennent toutes les unités de traitement logiques sur lesquelles un processus peut s'exécuter, y compris, le cas échéant, plusieurs cœurs de processeur dans un package et des Hyper-Threads dans un cœur de processeur. Les nœuds de mémoire incluent toutes les banques distinctes de mémoire principale; les systèmes petits et SMP ont généralement un seul nœud de mémoire qui contient toute la mémoire principale du système, tandis que les systèmes NUMA (accès à la mémoire non uniforme) ont plusieurs nœuds de mémoire.

En bref, si vous avez 1 cpu ayant 6 cœurs, vous configurez des cpusets et lancez votre processus dans un cpuset qui est configuré sur un seul cœur, par exemple le cœur n ° 3 par exemple. S'il s'agissait d'un processus parallèle, tout serait confiné à ce seul cœur de sorte que si vous lanciez 4 processus dans un cpuset donné avec un seul cœur défini, chacun des 4 processus obtiendrait 25% d'utilisation du processeur sur le cœur # 3.

À partir de cela, ce qui se passe généralement est qu'un cpuset est configuré de telle sorte que

  • dans un système à plus de 200 cœurs, par exemple, cpusetA correspond aux cœurs 0..60 où qu'ils se trouvent, cpusetB correspond aux cœurs 61..70; cpusetC correspond aux cœurs 71..80; et ainsi de suite mais un administrateur / architecte choisit de configurer.
  • cpusetA est attribué à certains utilisateurs et / ou logiciels spécifiques; cpusetB est alloué à différents utilisateurs / programmes; etc.
  • un utilisateur lance un travail (processus) qui demanderait N cœurs ... dans un cpuset donné, et maintenant ces multiples processus (parallèles) sont limités à ce cpuset donné. Et pour les N parallèles confinés à un cpuset donné, chacun de ces processus utiliserait / devrait utiliser l' affinité processeur ou l' affinité cpu afin que ces processus parallèles ne se débattent pas sur différents cœurs au sein du cpuset.

aussi: https://linux.die.net/man/1/taskset

Ron
la source