IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Affecter un processus à un processeur ?


Sujet :

Administration système

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 59
    Points
    59
    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.

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    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 !
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    oui merci beaucoup !

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 4
    Points
    4
    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

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    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.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Entre temps, j'ai trouvé "sched_setaffinity" qui doit permettre de faire des choses.
    A suivre...

  7. #7
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Pourquoi pas "taskset" directement ?
    Il fait partie de "schedutils" (util-linux pour RHEL)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Processus "System" prend 100% du processeur
    Par Nithril dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 16/01/2009, 17h30
  2. Récuper le temps processeur d'un processus
    Par KRis dans le forum Langage
    Réponses: 1
    Dernier message: 15/01/2009, 04h33
  3. utilisation multi-processeur d'un processus
    Par Ickou dans le forum Langage
    Réponses: 1
    Dernier message: 03/10/2008, 22h15
  4. Forcer l'éxécution d'un processus sur un processeur en particulier
    Par triskell2000 dans le forum Administration système
    Réponses: 3
    Dernier message: 05/03/2008, 16h14
  5. [D7] Processus et bi-processeur ?
    Par jambonstar dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo