Re: SMP: Forcer une application à tourner sur un processeur

Top Page

Reply to this message
Author: Olivier_Allard-Jacquin
Date:  
To: guilde
Subject: Re: SMP: Forcer une application à tourner sur un processeur
Bonjour,

        merci à Patrice et Francois-Xavier pour vos réponses. Je n'ai pas 
pu
répondre plus tôt, mais j'avais trouvé vos explications sur
http://www.faqchest.com/linux/GUILDE/guilde-02/guilde-0212/guilde-021205/


        En fait, j'ai trouvé une ancienne doc sur les noyaux anterieurs à
2.4.0 qui disait qu'il n'était pas possible de définir l'affinité d'un
processus sur un process. Mais comme le dit Francois-Xavier, le kernel
2.4 apporte une solution à ce problème, bien qu'elle ne soit pas
implémenté dans le noyau.


        Mais, il existe un projet sur "Linux Diagnostique" qui a débouché
sur la création d'un module pour les kernel >= 2.4.0, et qui permet de
régler l'affinité:
http://linux-diag.sourceforge.net/affinity.html


        Je l'ai testé: Ca se compile sans problème, et on obtient un 
module
et un programme. Le module est à charger en mémoire,  puis avec le 
programme,
le root peut changer l'affinité de n'importe quel process qui tourne en
mémoire. C'est un petit peu contraignant de devoir passer par le root pour
changer l'affinité, mais ca marche très bien !



> C'est exact -- tant que l'on reste en user-space -- sur un noyau 2.4 par
> defaut, donc sur un noyau Debian.
>
> En revanche, si on accepte de developper un bout de module kernel (par
> exemple un petit driver caractere qui n'implemente que le open(2) & le
> close(2)...) il existe un champ (bitmask) "cpu_allowed" dans la
> structure "task". Il suffit de la modifier pour n'y laisser que le CPU
> courrant (smp_processor_id). Et le tour est joue... :-)
>
> Evidement, pour etre un minimum propre, il faut restaurer le precedent
> bitmask quand on appelle le close(2) sur ce driver.
>
> A partir de 2.5 (ou de RedHat 7.3...) le patch "cpu-affinity" est
> present. Il ajoute 2 appels systeme permettant de faire ce travail.
>
> - sched_setaffinity
> - sched_getaffinity
>
> Aucun des 2 n'est evidement documente pour le moment... :-(
> Ur un system MP (symetrique ou pas), on trouve les 2 entrees suivantes
> dans la sortie de "top:
>
> 2 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU0
> 3 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU1

>
> Si la consommation de ces 2 taches devient non negligeable, il est temps
> de prendre le taureau par les cornes.


        Merci pour l'info, c'est bien noté.
        A plus, et bonne année à tous !


                                                        Olivier