web-dev-qa-db-fra.com

utilisation multicœur, biaisée vers le cœur 2?

J'ai 4 cœurs dans mon système. Le Core 2 affiche fréquemment une utilisation à 100% dans htop. Pendant ce temps, Core 1,3,4 affiche quelque chose autour de 5% la plupart du temps.

Est-ce normal? Existe-t-il un moyen de mieux répartir la charge du Core 2 sur les autres cœurs et est-ce même souhaitable?

2
flickerfly

Ouais, ça peut être normal. Cela dépend de la gestion du système d'exploitation. Les deux grands outils pour impacter cela sont

  • ensemble de tâches qui peut déterminer quel processeur un processus peut utiliser
  • définition de affinité IRQ de vos périphériques PCI

L'affinité IRQ est facile à corriger. Faites quelques E/S, surveillez/proc/interrompt et si vous voyez tous MSI-foo sur le même CPU, distribuez-les. Vous voulez généralement entretenir les IRQ sur les "vrais cœurs" car ils sont les plus rapides. Une fois que vous avez compris cela, écrivez un script pour le valider au démarrage du système et vous avez terminé.

Les processus sont pénibles car ils peuvent migrer entre les processeurs. Pour "bien faire", vous devez vraiment configurer des groupes de contrôle pour les processus en question. Ou ... vous prenez la sortie paresseuse et créez un script wrapper pour le programme X qui appelle le jeu de tâches ... _X.

Mesurez vos performances avant et après avec une référence comme fio ou tout votre peaufinage est pour rien. Si vous ne pouvez pas mesurer vos changements, vous ne savez pas ce qu'ils valent.

Par exemple, j'ai ici un système de 24 CPU, 2 nœuds numa qui a un périphérique de stockage qui créera une interruption MSI pour chaque CPU ... puis les liera tous à CPU 0 :-p. La répartition de l'affinité IRQ sur les 12 premiers cœurs a quadruplé le débit IO enregistré par fio. Mais ce système a en réalité beaucoup de bande passante, le bureau typique ne fait pas.

Bonne chance. Le travail de performance est amusant, ... et difficile :)

2
ppetraki