|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : octobre 2004 Messages : 43 ![]() |
Bonsoir, on a recu une machine avec un processeur multicore Intel, je me demandais s'il était possible d'affecter un éxécutable quelqu'il soit à un des 2 core. Et si c'est bien possible, si vous auriez une idée du comment (je suis curieux, si ce n'est pas possible, pourquoi également).
Merci d'avance. |
|
|
10
|
|
|
#2 |
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 5 497 ![]() |
Bonjour,
L'ordonnancement des processus est géré par le système. ce n'est pas une tâche simple, et il est donc quasimment impossible de la gérer à la main. Pour cette raison, il est quasimment impossible d'affecter une tâche quelle qu'elle soit à un processeur donné. Même en utilisant une bibliothèque de programmation parallèle, je ne suis pas certain que tu puisses forcer à tous les coups une tâche sur un processeur. Au mieux pourras-tu peut-être lui faire passer toute sa vie sur le même processeur, mais c'est pas encore gagné. Par ailleurs, tu as un dual-core, c'est à dire que tes deux processeurs sont physiquement au même endroit, et donc quasiment equidistant de la mémoire, à un pouillème près. Donc même si tu arrivais à forcer une tâche sur l'un des core, il n'y aurait aucun gain. Si tu disposes d'un outil de monitoring des processus un peu puissant (c'ets à dire que tu n'utilises pas 'top'), tu pourras même te rendre compte qu'un processus ne va que très rarement s'exécuter en entier sur un suel processeur. Explication : les systèmes actuels sont des systèmes multi-tâches, c'est à dire qu'ils sont capables de faire tourner plusieurs processus en même temps (par exemple lire un forum et écouter de la musique) (pour rappel, MS-DOS était pour sa part mono-tâche : lorsqu'un processus est lancé, on ne peut pas en lancer d'autre). Pour que tous les processus soient exécutées "en même temps", on leur accorde à chacun une unité de temps pour s'exécuter. Si le processus n'a pas fini de s'exécuter à la fin de ce quantum de temps, il est mis dans la file d'attente des processus, avec un état particulier. Cet état peut être : "prêt", c'est à dire que le processus a toutes ses données prêtes, et qu'il est prêt à utiliser le processeur pour faire des calculs "en attente" : le processus attends le résultat d'un entrée-sortie, par exemple parce qu'il a demandé l'ouverture d'un fichier sur disque ... Et ainsi de suite pour chacun des processus. La plupart des architectures bi-processeur gèrent une seule et même file d'attente pour les deux processeurs, à condition que ceux-ci accèdent à la même mémoire vive (ce qui est plus que souvent le cas). Dans ce cas, tu peux très bien avoir un processus qui va s'exécuter pendant un quantum sur le processeur 1, puis aller dans la file d'attente, puis le processeur 2 va se lbérer avant le 1, et ton processsus va alors aller s'exécuter sur ce dernier. En jouant sur les priorités, il est a priori possible de forcer un peu cet ordonnancement : Tu lance sun processus en root avec un priorité très élevée (à toi de regarder comment faire, par exmeple avec la commande "nice") Ensuite, tu lances un autre processus en tant que simple utilisateur, processus auquel tu affectes une priorité très faible. Dans ce cas bien précis, il y a de fortes chances poru que le processus lancé en root reste sur le même processeur, car sa priorité élevée va faire qu'il se verra accorder plus de quantums de temps que les autes processus. En revanche, le processus utilisateur va se voir accorder moins de quantums de temps, et va donc probablement se retrouver plus souvent sur le second core que sur le premier. En espérant que ces explications te permettent d'y voir un peu plus clair ! |
|
|
20
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : octobre 2004 Messages : 43 ![]() |
oui merci beaucoup !
|
|
|
10
|
|
|
#4 |
|
Invité de passage
![]() Stéphane Inscription : mai 2011 Messages : 2 ![]() |
Bonjour,
Je ré-ouvre le sujet. Aujoud'hui existe-til des solutions pour exploiter finement les multicoeurs ? cad, affecter les process ou les threads sur tel ou tel coeur. Question subsidiaire : en programmation multithread, comment sont dispatchés les threads sur les coeurs. Sont ils forcement affectés au coeur sur lequel tourne la tâche qui les a créés ? Merci d'avance pour vos infos. Stéphane |
|
|
10
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 544 ![]() |
les threads ne sont pas forcéments sur le même coeur que celui qui les a crée.
Par contre je ne pense pas qu'il y ai de solution "user-level" pour choisir arbitrairement les coeur sur lesquels "fixer" tel ou tel thread. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Stéphane Inscription : mai 2011 Messages : 2 ![]() |
Entre temps, j'ai trouvé "sched_setaffinity" qui doit permettre de faire des choses.
A suivre... |
|
|
01
|
|
|
#7 |
|
Invité de passage
![]() Lucien HercaudArchitecte de système d'information Inscription : juin 2011 Messages : 6 ![]() |
Pourquoi pas "taskset" directement ?
Il fait partie de "schedutils" (util-linux pour RHEL) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com