Pour commencer, j'utilise Debian Wheezy avec le noyau 3.2 sur un chipset AMD64. Ma machine possède deux cœurs Xeon E5-2690. J'ai configuré les paramètres de démarrage afin que tous les cœurs d'un processeur soient dédiés à un seul processus. Pour ce faire, j'ai défini isolcpus = 8,9,10,11,12,13,14,15 dans grub.
Jusqu'ici tout va bien. Maintenant, disons que je veux utiliser les CPU isolés pour une commande donnée, pour être simple, je vais simplement utiliser une boucle infinie simple:
$ taskset -c 8-15 bash -c 'tandis que true; faire écho bonjour> / dev / null; terminé' &
Jusqu'ici tout va bien, top montre que le noyau 8 tourne jusqu'à près de 100% d'utilisation. Supposons maintenant que je lance à nouveau cette commande:
$ taskset -c 8-15 bash -c 'tandis que true; faire écho bonjour> / dev / null; terminé' &
Maintenant, le haut montre que les cœurs 9-15 restent inactifs et que les deux processus partagent le noyau 8. Si je fais cela à la place:
$ taskset -c 8 bash -c 'tandis que true; faire écho bonjour> / dev / null; terminé' &
$ taskset -c 9 bash -c 'true; faire écho bonjour> / dev / null; terminé' &
Les cœurs 8 et 9 obtiennent chacun une utilisation à 100% comme ils le devraient. Cela ne s'applique qu'à isolcpus car le même ensemble de tâches avec les cœurs 1 à 7 répartit correctement les processus sur les cœurs concernés. De plus, "tasket -p" montre que le masque d'affinité pour les processus 8-15 est correctement défini. Il semble que l'ordonnanceur du noyau refuse d'utiliser autre chose que le noyau le plus bas spécifié sur un masque d'affinité isolcpus.
Maintenant, normalement, ce ne serait pas un gros problème avec mes exemples ci-dessus, spécifiez simplement des cœurs individuels pour chaque processus. Cependant, je veux exécuter une application hautement multithread sur le processeur dédié. Je veux spécifier l'ensemble de base et faire en sorte que le pool de threads utilise automatiquement, sans avoir à réinitialiser individuellement l'affinité du processeur pour chaque thread individuel qui est généré.
Quelqu'un a-t-il une idée de comment obtenir le planificateur pour me donner plus d'un cœur de l'ensemble isolcpu?