Dire au noyau Linux * de ne pas * utiliser certains processeurs

8

J'essaie d'exécuter des tests de performance sur une machine multicœur et je voudrais dire au noyau Linux d'éviter simplement certains cœurs, sauf indication explicite de les utiliser.

L'idée est que je pourrais mettre de côté une poignée de cœurs (la machine a 6 cœurs physiques) pour l'analyse comparative et utiliser le masque cpu pour autoriser uniquement des processus de référence sur les cœurs donnés.

Est-ce faisable?

Lajos Nagy
la source
Quels sont les benchmarks réels que vous souhaitez exécuter?
Basile Starynkevitch

Réponses:

5

Vous pouvez isoler certains cœurs de processeur de la planification du noyau en utilisant le isolcpusparamètre. Ajoutez ce paramètre à votre grub.conf et redémarrez pour prendre effet.

VenkatC
la source
2
Le lien est mort. Il serait peut-être préférable d'inclure un exemple directement dans la réponse.
pchaigno
4

Vous voulez une affinité processeur (ou affinité CPU ).

L'appel système pertinent est sched_setaffinity (2) , mais vous devez l'utiliser via pthread_set_affinity_np (3) si vous souhaitez coder vos benchmarks pour cela.

La commande associée est tasket (1) et vous pouvez l'utiliser sur les commandes que vous souhaitez comparer (ou sur votre shell).

Si possible, veillez à ce que la machine ne soit pas beaucoup chargée par d'autres tâches sans rapport avec le benchmark.

Vous pouvez également utiliser un hyperviseur comme Xen et démarrer votre Linux en tant que système d'exploitation invité pour cet hyperviseur. Configurez ensuite xenpour utiliser uniquement un ensemble restreint de cœurs de processeur (je ne connais pas les détails exacts, vous devez le savoir). Sur les distributions Debian (et connexes), vous pouvez installer des paquets comme xen-linux-system-amd64, xen-hypervisor-amd64, xen-utilsetc (j'utilise sur Debian / Sid xen-hypervisor-4.5-amd64, xen-linux-system-4.0.0-1-amd64, xen-utils-4.5 etc ...).

Il pourrait y avoir un moyen de configurer (peut-être au moment de la compilation du noyau, ou en passant des arguments spécifiques au noyau via le chargeur Grub) votre noyau Linux pour restreindre le nombre de cœurs utilisables.

Bien sûr, il est préférable, lorsque l' analyse comparative certains -eg programme sur un ordinateur de bureau Linux PC-, pour prendre soin d'éviter d' avoir de nombreux processus en cours d' exécution de l' extérieur (utilisation ps auxw, pstree -p, toppour trouver ces). Au moins, fermez et quittez la plupart des applications interactives (navigateur comme Firefox, e-mail, éditeur, IDE comme Eclipse) et ne gardez qu'un petit nombre de terminaux à comparer. Vous pouvez même comparer en mode batch (en utilisant batchou atpour exécuter les tests) alors que vous n'êtes même pas connecté (donc ne pas avoir de sessions GUI à la Gnome ou KDE ou Xfce , etc ... en cours d'exécution).

Basile Starynkevitch
la source
Il n'est pas suffisant de définir l'affinité des tâches comme référence. Vous devez également éloigner les autres tâches. Ce que fait votre suggestion d'hyperviseur, mais d'une manière très lourde.
Gilles 'SO- arrête d'être méchant'
@Gilles: pourquoi est-il nécessaire de tenir à l'écart d'autres tâches à des fins d'analyse comparative? En pratique, lors de l'analyse comparative, le PC est souvent assez inactif ... Pour un serveur coûteux, les choses sont différentes!
Basile Starynkevitch
Par exemple, parce que vous comparez sur votre ordinateur de bureau qui dépense également des ressources sur Firefox, Eclipse et d'autres tâches très exigeantes.
Gilles 'SO- arrête d'être méchant'
Sur votre propre ordinateur de bureau, vous pouvez très facilement arrêter les tâches les plus consommatrices (par exemple, fermer et quitter Firefox et Eclipse) tout en comparant les performances. Vous pouvez même exécuter les tests de performance en mode batch (en utilisant atou batch) lorsque vous n'êtes pas connecté (donc ne lancez aucune session consommatrice).
Basile Starynkevitch