Erstens: Holen Sie Ihr CPU-Layout von / proc / cpuinfo, das ungefähr so aussieht (dies ist auf einem 2-Sockel, 6-Kern, die Liste ist abgeschnitten):
> cat /proc/cpuinfo |grep -P 'processor|physical id|core id' processor : 0 physical id : 1 core id : 0 processor : 1 physical id : 0 core id : 0 processor : 2 physical id : 1 core id : 1 processor : 3 physical id : 0 core id : 1
Physical-ID wird Ihr Sockel sein. Beachten Sie in meinem Fall, dass die Core-ID zwischen Sockeln wechselt.
Verwenden Sie 'schedtool', um die Affinität einer Gruppe auf eine physische ID festzulegen. In meinem Fall würde ich also, da die Gleichen und die Chancen auf separaten physischen CPU (Sockets) liegen, Folgendes verwenden:
schedtool -a 0,2,4,6,8,10 -e run_group1 & schedtool -a 1,3,5,7,9,11 -e run_group2 &
Dabei startet run_group1 alle Threads, die Sie auf einem Core möchten, und run_group2 startet die anderen. (Sehen Sie sich 'man schedtool' an (weitere Optionen finden Sie in Abschnitt 8. Ich habe beide in den Hintergrund gestellt, sodass beide Gruppen gleichzeitig laufen sollten.)
Möglicherweise müssen Sie root sein, um die Affinität festzulegen - nicht sicher.
Kann das Ihr Q lösen oder habe ich etwas falsch verstanden?