web-dev-qa-db-fra.com

Comment faire pour que les paramètres du noyau isolcpus fonctionnent avec Precise 12.04 AMD64?

J'ai testé ce type de matériel en essayant de réserver des processeurs dans un hôte doté de deux processeurs Intel E5645, mais je ne parviens pas à le faire fonctionner pour une raison quelconque. Les étapes que j'ai suivies:

  1. Éditez/etc/default/grub et ajoutez isolcpus = 0,1 à GRUB_CMDLINE_LINUX_DEFAULT

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=0,1"

  2. Lancer update-grub

  3. Redémarrer

Après cela, cat/proc/cmdline révèle:

BOOT_IMAGE=/boot/vmlinuz-3.2.0-26-generic root=UUID=52cfedad-40be-41b9-9f88-c282a7ae3f24 ro quiet splash isolcpus=0,1 vt.handoff=7

Testé en utilisant le stress:

apt-get install stress && stress -c 24

Surveillé en utilisant le haut et en appuyant sur 1 pour afficher les statistiques individuelles de la CPU. Jusqu'à présent, aucun processeur n'est isolé du planificateur et tous sont perturbés par le stress.

Cpu0  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu2  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu3  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu4  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu5  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu6  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu7  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu8  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu9  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu10 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu11 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu12 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu13 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu14 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu15 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu16 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu17 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu18 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu19 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu20 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu21 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu22 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu23 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa

Testé le même matériel dans CentOS 6 x86_64 et cela fonctionne comme prévu.

Recherche dans la base de données de la base de données de bogues ubuntu et linux, mais rien trouvé jusqu'à présent.

Est-ce que je suis stupide ou est-ce que je manque quelque chose? Conseils?

Merci!

Refs:

http://www.kernel.org/doc/Documentation/kernel-parameters.txt

5
rubiojr

SMT désactivé (Hyper-Threading) dans le BIOS, mise sous tension, testé à nouveau avec HT désactivé et isolcpus fonctionne comme prévu.

SMT réactivé dans le BIOS, mis sous tension, fonctionne toujours comme prévu.

Ce n’est certainement pas la meilleure réponse à laquelle on puisse s’attendre, mais cela a néanmoins fonctionné pour moi.

4
rubiojr

isolcpus est seulement isolé de l'activité de l'espace utilisateur ceratin et n'isolera pas le processeur de l'activité du noyau (watchdogs, kworkers, pile linux ...). De plus, vous ne devriez pas isoler le processeur 0 (qui a de nombreuses activités dédiées comme la découverte USB, la configuration de la minuterie acpi, la répartition wrmsr/rdmsr ... qui ont tendance à atteindre 2% avec la distribution standard où tous les pilotes sont activés par défaut)

Vous pouvez vérifier quels processus s'exécutent sur quels cœurs en affichant tous les threads triés par nombre de cœurs.

ps -aFeL | cut -c 48- | sort -n

Vous devez également vérifier et modifier les affinités dans/proc/irq/* afin de tenter de modifier les affinités des interruptions.

Vous pouvez épargner dynamiquement des processeurs et supprimer "la plupart" des tâches du noyau Linux à l'aide de l'outil cpuset.

au lieu de

taskset -c 3-7,11-15 program args

essaye ça

Sudo apt install cpuset
cset set --list
cset shield -c 3-7,11-15
cset set --list
cset shield -e program -- args  

Et puis, vous pouvez apprécier la différence

ps -aFeL | cut -c 48- | sort -n

Lors de l'exécution de ces 2 commandes

cset shield -e stress -- -c 16
stress -c 16
1
Pierre

En fait, isolcpus semble (d'après mes tests) se comporter différemment sur les processeurs AMD et Intel.

Kernel: 4.10.0-38-generic x86_64 (64 bit) sur les deux

/etc/default/grub a ajouté isolcpus=2 au GRUB_CMDLINE_LINUX_DEFAULT= line, de la même manière que l'OP. Ensuite, Sudo update-grub et redémarrez.

  • Sur le processeur Intel Core i7 double cœur avec hyperthreading, ps -eF | grep " 2 " indique que très peu de processus root sont démarrés sur Hyperthread 2 (et ils semblent tous avoir/2 après le CMD).

  • Sur les processeurs AMD quad core sans hyperthreading, de nombreux processus appartenant à la racine démarrent sur le core 2 (et la plupart n’ont pas/2 après le CMD).

Est-ce un bug qui sera probablement corrigé ou une fonctionnalité?

0
Graham