Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/05/2006, 20h36   #1
Membre à l'essai
 
Inscription : octobre 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 43
Points : 20
Points : 20
Par défaut Affecter un processus à un processeur ?

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.
init est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/05/2006, 09h43   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 497
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 497
Points : 9 672
Points : 9 672
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 !
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/05/2006, 12h35   #3
Membre à l'essai
 
Inscription : octobre 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 43
Points : 20
Points : 20
oui merci beaucoup !
init est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/05/2011, 14h47   #4
Invité de passage
 
Homme Stéphane
Inscription : mai 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 2
Points : 3
Points : 3
Par défaut Programmation multithread sur multicoeur

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
deep_blue_78 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/05/2011, 15h06   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 544
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 544
Points : 7 767
Points : 7 767
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.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 15h36   #6
Invité de passage
 
Homme Stéphane
Inscription : mai 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 2
Points : 3
Points : 3
Entre temps, j'ai trouvé "sched_setaffinity" qui doit permettre de faire des choses.
A suivre...
deep_blue_78 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/06/2011, 13h49   #7
Invité de passage
 
Homme Lucien Hercaud
Architecte de système d'information
Inscription : juin 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Lucien Hercaud
Localisation : France

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : juin 2011
Messages : 6
Points : 2
Points : 2
Pourquoi pas "taskset" directement ?
Il fait partie de "schedutils" (util-linux pour RHEL)
hercaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h49.


 
 
 
 
Partenaires

Hébergement Web