~~SLIDESHOW yatil~~ ====== Affinités des processus sous Slurm ====== Cet article explique la configuration adoptée concernant l'affinité des processus sous slurm, c'est à dire leur //liaison// avec les CPU des nœuds de calcul. ===== Affinité ===== * L'[[https://en.wikipedia.org/?title=Processor_affinity | affinité ]] d'un processus permet de le lier à un ou plusieurs cœurs sur une machine multi-cœur * Le processus sera ainsi cantonné à un ensemble donné de cœurs pour son exécution. Il ne pourra pas être exécuté par Linux sur les autres cœurs du serveur * Deux raisons ont conduits à activer automatiquement l'affinité sous slurm, que nous expliquons ci-après ===== Restriction des CPU ===== ==== Le problème ==== * Sur notre cluster, les nœuds de calcul fonctionnent par défaut en mode //partagé// : plusieurs jobs peuvent s'exécuter en même temps sur le même nœud * Dans un job slurm, vous demandez une réservation, par exemple pour 4 CPU * Mais vous avez la liberté de lancer plus de 4 processus simultanés, ou un processus avec plus de 4 //threads// : Slurm ne contrôle pas cela * Il y a donc un risque de surcharge du nœud qui va impacter les autres usagers ==== La solution ==== * Slurm dispose de plusieurs mécanismes permettant de circonscrire les ressources utilisables * Nous utilisons le plus simple des deux via le paramètre ''TaskPlugin=task/affinity'' * Slurm positionnera automatiquement l'affinité des processus pour limiter le nombre de CPU utilisables à la valeur demandée dans ''%%--cpus-per-task%%'' * Un job mal construit qui demande 4 CPU mais lance par exemple 6 thread n'impactera pas les autres usagers, ses 6 threads ne pourront s'exécuter que sur les 4 cœurs alloués par slurm ===== Accès mémoires ===== * Sur une architecture SMP, plusieurs phénomènes peuvent dégrader **considérablement** les performances * Sans rentrer dans les détails, en particulier le //[[https://en.wikipedia.org/wiki/CPU_cache | cache miss]]// sera accentué si un processus peut s'exécuter alternativement sur des processeurs différents * Il est donc conseillé pour optimiser la performance d'un programme de le lier à un cœur * Le gain de performance peut atteindre 40% ===== Références ===== Documentation slurm : * [[http://www.schedmd.com/slurmdocs/cpu_management.html | CPU Management User and Administrator Guide]]