Forum Linux.général SMP & lancement de processus

Posté par  (site web personnel, Mastodon) .
Étiquettes : aucune
0
20
déc.
2005
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  . Évalué à 4.

    ...sont deux mots clefs qui devraient te mettre sur la voie. Je m'avancerai pas trop parceque, faute de SMP ici, j'y connais pas grand chose, m'enfin bon ça te donne toujours qqch à googler. Tu peux jeter un oeil sur /usr/src/linux/Documentation/cpusets.txt aussi.

    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  (site web personnel) . Évalué à 4.

    Le SMP impose que les processeurs ne partagent pas grand chose. une des choses qu'ils ne partagent pas est le code en cours d'execution.

    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  . Évalué à 2.

      je pense que apache et les gestionnaires de base de donnees sont tout de meme multithreades, donc la question se pose !
  • # sched_setaffinity

    Posté par  . Évalué à 2.

    Bonjour,

    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  (site web personnel, Mastodon) . Évalué à 3.

      Oui, j'ai vu ça et taskset, mais apparemment ça ne passe qu'avec un noyau 2.6, non?

      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.