2010-12-14 67 views
0

Je voulais étudier comment les threads peuvent être affectés manuellement à des cœurs spécifiques sur une machine multicœur. J'ai trouvé que include/sched.h définit certaines macros et fonctions (sched_setaffinity, etc.) qui peuvent aider pour cela. Cependant, les fonctions sont externées et je ne trouve pas leurs définitions. Ces fonctions sont-elles implémentées n'importe où? Si oui, où et est-il possible de remplacer l'implémentation par défaut? Si non, comment puis-je les implémenter?Implémentation des fonctions include/sched.h

Et l'ajout d'une nouvelle implémentation impliquerait que je dois recompiler mon noyau Linux?

+0

Peut-être dupliquer: http://stackoverflow.com/questions/766395/how-does-sched-setaffinity-work - L'implémentation est ici http://lxr.linux.no/linux+v2.6.36/kernel/ sched.C# L4858 – jweyrich

+0

sched_setaffinity() - essaie de regarder dans cet appel, il est aussi utilisé dans le threading. –

Répondre

0

Vérifiez le code pour BFS qui devrait vous montrer comment implémenter votre propre planificateur CPU. // edit yes ajouter un nouvel ordonnanceur impl signifie que vous devez recompiler votre noyau, cependant vous pouvez toujours le tester avec qemu -kernel /path/to/new/kerenl -initrd something pour vous assurer que votre code ne plante pas immédiatement avant de le tester sur la machine réelle.

+0

Les tests dans qemu ne testent que si le nouveau code se bloque. Le planificateur du système hôte interférera avec les mesures de synchronisation. Vous ne pouvez obtenir aucune forme de métriques de performances correctes à moins de l'essayer sur une machine réelle. – thkala

+0

D'accord, je voulais dire pour tester si son code ne plante pas, je ne l'ai pas dit correctement. – OneOfOne

0

Le code de sched_setaffinity est dans le noyau. Le fichier d'en-tête fournit simplement le prototype pour l'appeler, et la bibliothèque qui le satisfait ne fait que transmettre l'appel au système.