Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sur quel core s'execute une application ?

un petit script peut-être ?

Sujet résolu
    24 janvier 2013 à 10:59:05

    Bonjour à tous,

    J'aurais besoin d'un moyen simple pour savoir sur quel core s'execute une application sous Linux

    Je pense qu'un petit script pourrait être possible, mais je n'ai aucune idée de comment m'y prendre...

    Une idée ?

    EDIT :

    Par exemple, ce topic : http://www.linuxforums.org/forum/kernel/169700-how-find-task-running-particular-core-given-intstance.html

    Corresponds bien à ma demande...mais malheureusement, il semble que personne n'ait répondu quoi que ce soit d'utile :(

    Je vous remercie par avance :)

    • Partager sur Facebook
    • Partager sur Twitter

    Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

      24 janvier 2013 à 12:27:51

      Comme l'a indiqué le bonhomme sur le lien que tu as mis, je doute aussi que ce soit possible d'avoir pareille information, pour la raison qu'il a invoqué. Entre le CPU et les applications, tu as souvent un ordonnanceur de tâches (planqué dans le noyau) qui va dispatcher les travaux à effectuer sur le matériel disponibles. Il ne serait pas étonnant que le core effectuant le travail à un instant T devienne occupé à l'instant T+1, du coup, l'ordonnanceur va utiliser un autre core pour faire son travail. Du coup, tu ne peux jamais prédire (de façon raisonnable j’entends...Il y aura surement une méthode algorithmique poussée permettant de prévoir sur quel core une tache va s'exécuter en prenant en compte n'importe quel cas de figure mais je doute que ce type de calcul soit à la portée des ordinateurs grand public) quel core va exécuter telle ou telle tâche, le travail étant systématiquement réparti entre les cores disponibles sur la machine.

      • Partager sur Facebook
      • Partager sur Twitter
        24 janvier 2013 à 14:31:57

        Et surtout, pourquoi veux tu cette info ?

        (et je confirme, un process peut tres bien "changer" de core à tout moment, ou presque, de son execution)

        • Partager sur Facebook
        • Partager sur Twitter
          24 janvier 2013 à 15:33:04

          Par contre ce que tu peux faire c'est définir l'affinité d'un processus, ainsi tu sauras sur quel core il s'exécute vu que c'est toi qui auras défini l'affinité :p

          # installation (debian-like)
          apt-get install schedutils
          
          # contrôle de l'affinité avec un bitmask
          taskset 0x00000001 -p 1234	# core 1
          taskset 0x00000002 -p 1235	# core 2
          taskset 0x00000003 -p 1356	# core 1 et 2
          taskset 0x00000004 -p 1357	# core 3
          
          # contrôle de l'affinité avec une suite de nombres
          taskset -c 1 -p 1234    # core 1
          taskset -c 2 -p 1235    # core 2
          taskset -c 1,2 -p 1236  # core 1 et 2
          taskset -c 3 -p 1237    # core 3


          Le dernier paramètre de taskset est bien entendu le PID (Process Identifier)

          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2013 à 16:03:03

            En fait c'est possible :)

            En regardant dans "man 5 proc", si tu cherche "/stat", depuis Linux 2.2.8 le 39e champ du fichier stat contient le dernier processeur sur lequel le process a été exécuté.

            Maintenant comme l'a dit kristofjé c'est susceptible de changer a tout moment (a moins que tu n'ai défini une affinité avec un seul core/cpu).

            Donc en gros pour afficher le dernier core/cpu sur lequel s'est executé par exemple le process 3978 tu peux faire : 

            cat /proc/3978/stat | awk '{print $39}'


            Tu obiens donc un chiffre en 0 et 3 (si tu as 4 core) qui représente le dernier core/cpu sur lequel ce process a été executé.
            0 = 1er core
            1 = 2e core
            2 = 3e core
            3 = 4e core

            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2013 à 21:42:23

              "Définir l'affinité", est-ce équivalent à "définir une exclusivité"?

              En fait, j'apporte juste une autre vision de l'affinité un peu différente de celle que tu fais passer Scriptiz : De ce que je comprend de cette configuration, définir l'affinité d'un process sur un core/cpu donné ne veut pas dire que le process en question va systématiquement s'exécuter sur l'élément matériel indiqué. Personnellement, je comprend plus ça comme "Dans la mesure du possible, exécuter les tâches du processus X sur le matériel Y", ce qui n'est pas du tout équivalent à "Forcer l'exécuter du processus X sur le matériel Y". Par exemple Process 1 (P1) a une affinité sur le core 1 sur 2 et Process 2 (P2) n'a rien de spécial. Sur un lot de 50 tâches à exécuter pour chacun des process, l'affinité fait qu'en fin d'exécution on pourrait se retrouver avec un taux d'exécution de P1 = 80% core 1, 20% core 2 et P2 = 50% core 1, 50% core 2 (où les pourcentages sont rapports au nombre de tâche à exécuter) => On a bien déterminé une affinité pour P1 sur le core 1 (puisqu'il s'est exécuté majoritairement sur le core 1) mais, du fait que P2 a monopolisé core 1 à certains moment, l'intégralité des tâches de P1 n'a pas pu être exécutée sur core 1 (d'où les 20% sur core 2), le tout dépendant bien sûr du temps pour exécuter chaque tâche et des autres processus que l'ordonnanceur aurait à gérer en plus de P1 et P2.

              Pour étayer cette théorie, si l'affinité voulait dire exclusivité...Ca voudrait dire que soit, P1 est obligé d'attendre que le core qui lui est affecté soit libre pour s'exécuter (d'où perte de performances énorme), soit, on a un core exclusivement réservé à l'exécution d'un processus (et c'est une perte de performances puisque pendant tous les temps où le process lié ne fait rien le core en question ne pourrait plus être utilisé, tant que le process est actif)...Dans tous les cas, on abouti à des pertes de performances et je doute que les développeurs en charge des ordonnanceurs aient eu pour consigne de faire un logiciel engendrant des pertes de performances.

              N'ayant jamais mis le nez dans un ordonnanceur quelconque, ce n'est qu'une théorie, je n'ai jamais pris le temps de la vérifier. Cela dit, je pense qu'elle est tout à fait justifiée car sinon, on aurait surement utilisé d'autres termes pour définir une exclusivité Process<->Core que le terme "affinité" (selon "l'internaute.com", l'affinité, c'est un "Rapport de ressemblance, sympathie" ou une "tendance des corps à se combiner entre eux")

              • Partager sur Facebook
              • Partager sur Twitter
                25 janvier 2013 à 17:32:04

                Probablement :p je ne me suis jamais penché sur la question... ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  5 février 2013 à 8:58:58

                  Merci les gens pour votre aide :)

                  C'est super ^^

                  Je m'excuse de répondre si tardivement, mais il se trouve que certains mécanismes ("mes interventions") du forum étaient inaccessibles.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

                  Sur quel core s'execute une application ?

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown