Hello,
je me demandais s'il était possible, sur une machine avec 2 processeurs réels (avec en plus l'hyperthreading) de lancer une application afin qu'elle ne puisse se servir que d'un seul processeur. Je m'explique: je voudrais par exemple que apache ne puisse se servir que du #1 (ou #0 & #1 avec HT) et que mon gestionnaire de base de données ne puisse se servir que du #2 (ou #2 & #3).
Je ne trouve rien dans les configuration de ces applications qui puisse permettre une telle spécification. De plus, les how-to traitant du SMP semblent tous dater du kernel 2.2 au mieux. Est-ce réelement impossible (car le noyau règne là en maître) où y'a-t-il des solutions, plus ou moins faciles?
merchix!
# "cpu affinity" et éventuellement "cpusets"...
Posté par tgl . Évalué à 4.
Ah ouais, et puis enfin, tu dois pouvoir te servir de l'utilitaire "schedtool" pour changer le "masque d'affinité" de tes processus, et puis pourquoi aussi pas de "schedtoold" pour automatiser un peu tout ça (jamais testé pour cet usage ceci dit) :
http://freequaos.host.sk/schedtool/
http://www.darav.de/schedtoold.html
# hum ...
Posté par Mouns (site web personnel) . Évalué à 4.
Reformulé, il n'y a qu'un code en cours d'execution par processeur, et il ne peut y avoir qu'un seul processeur par bout de code.
Donc, la réponse est cela ne peut pas etre autrement.
Maintenant par bout de code, cela consiste en "thread"/"processus"/"programme"/"tache" selon la granularité des processus.
si tu parallelise un programme sur 2 processeurs, tu auras necessairement besoin d'IPC assez complexe. donc, tres peu de programme, le font. donc, ne t'inquietes aucunement ( sauf si plein de threads ou plein de fils ).
[^] # Re: hum ...
Posté par welty . Évalué à 2.
# sched_setaffinity
Posté par welty . Évalué à 2.
A ma connaissance, il n'existe pas d'outil standard pour modifier l'affinite des processus sur les processeurs. (mais outil existant cite plus haut).
Sinon, petit code en C avec sched_setaffinity. Tu donnes un masque des processeurs sur lesquels tu autorises ton processus peut s'executer et le scheduler fait le reste.
Dans le cas de multiprocesseurs, l'hyperthreading peut apporter un baisse de performance, verifie que ce ne soit pas le cas : Linux les voit comme des processeurs a part entiere, et donc peut executer deux taches sur les deux premiers processeurs (meme core) alors que rien ne tourne sur les deux autres (deuxieme core). Mais si effectivement, tu affectes des processeurs a tes taches a la main, c'est ok.
Welty
[^] # Re: sched_setaffinity
Posté par Lol Zimmerli (site web personnel, Mastodon) . Évalué à 3.
Le seul truc que j'ai trouvé et qui passe avec le 2.4 c'est modifier les assignations CPU/IRQ (/proc/irq/*/smp_affinity), mais irqbalance le fait certainement mieux que moi à la main.
La gelée de coings est une chose à ne pas avaler de travers.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.