Indiquer le kernel Linux * non * pour utiliser certains processeurs

J'essaye de faire quelques benchmarks sur une machine multicore et j'aimerais dire au kernel Linux d'éviter simplement certains kernelx sauf si explicitement dit de les utiliser.

L'idée est que je pourrais mettre de côté une poignée de cœurs (la machine possède 6 cœurs physiques) pour l'étalonnage et utiliser un masque cpu pour ne permettre que des process de reference sur les cœurs donnés.

Est-ce faisable?

Vous pouvez isoler quelques cœurs de l'ordonnancement du kernel en utilisant le paramètre isolcpus . Ajoutez ce paramètre à votre file grub.conf et redémarrez pour prendre effet. Vous findez plus d'informations et d'exemples sur http://nairobi-embedded.org/cpu_affinity.html#the-isolcpus-kernel-parameter

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

Le syscall pertinent est sched_setaffinity (2) , mais vous devriez l'utiliser via pthread_set_affinity_np (3) si vous voulez coder vos benchmarks pour cela.

La command associée est taskset (1) et vous pouvez l'utiliser sur les commands que vous voulez comparer (ou sur votre shell).

Si possible, veillez à ce que la machine ne soit pas beaucoup chargée par d'autres tâches non liées à l'indice de reference.

Vous pouvez également utiliser un hyperviseur comme Xen et démarrer votre système Linux en tant que operating system invité pour cet hyperviseur. Ensuite, configurez xen pour n'utiliser que quelques coeurs de processeurs restreints (je ne connais pas les détails exacts, vous devez le savoir). Sur les dissortingbutions Debian (et connexes), vous pouvez installer des packages comme xen-linux-system-amd64 , xen-hypervisor-amd64 , xen-utils etc xen-linux-system-4.0.0-1-amd64 , xen-utils-4.5 etc …).

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

Bien sûr, il est préférable, lors de l'parsing comparative de certains programmes – sur un PC Linux de bureau – de prendre soin d'éviter de nombreux process en cours d'exécution (utilisez ps auxw , pstree -p , top pour les find). Au less, fermer et quitter la plupart des applications interactives (browser comme firefox, email, éditeur, IDE comme Eclipse) et ne garder qu'un petit nombre de terminaux à comparer. Vous pouvez même effectuer un benchmark en mode batch (en utilisant batch ou at pour exécuter les benchmarks) pendant que vous n'êtes pas encore connecté (donc pas de sessions GUI à la Gnome ou KDE ou Xfce , etc … en cours d'exécution).