6 votes

Comment Linux distribue-t-il la charge sur plusieurs cœurs de processeurs ?

Disons que j'ai 2 processeurs quadcore (8x 2,13Ghz). Le serveur exécute plusieurs programmes qui ne peuvent utiliser qu'un seul cœur + le travailleur Nginx et Apache en même temps.

La question est de savoir si Linux alloue efficacement les programmes monofilaires à chaque cœur de sorte que chaque programme puisse utiliser la pleine puissance d'un cœur et n'interfère pas avec la charge d'Apache et de Nginx. En fait, il s'agit de s'assurer que tous les cœurs sont utilisés et non pas le tas, ce qui fait que les programmes peuvent être à la traîne ?

8voto

frameworkninja Points 628

Une bonne réponse à votre question est beaucoup trop compliquée pour SF. Une réponse courte serait "oui", Linux et la plupart des systèmes d'exploitation modernes équilibrent très efficacement les processus prêts à être exécutés sur les processeurs disponibles.

Il existe des techniques permettant de modifier la façon dont les processus sont alloués aux ressources, notamment en modifiant les ordonnanceurs qui assignent les processus à des processeurs particuliers, mais je ne recommanderais pas d'utiliser l'une d'entre elles sans vraiment comprendre ce qu'elles font ou sans les utiliser pour résoudre un problème spécifique.

De plus, nginx et Apache httpd sont tous deux multithread/multiprocess par défaut. Il serait très étrange qu'ils fonctionnent comme un seul processus. Ils n'interrogent pas les connexions/flux réseau, ils utilisent un appel du noyau pour arrêter de fonctionner quand il n'y a rien à faire et se réveillent automatiquement quand il y a quelque chose à faire.

3voto

user2552922 Points 139

Linux cherche avant tout à maximiser l'utilisation du processeur en répartissant la charge des threads sur tous les cœurs disponibles. Cela ne veut pas dire que Linux décide arbitrairement de placer certains threads sur certains cœurs, mais qu'il utilise un algorithme d'ordonnancement des processus pour décider de la manière la plus efficace de répartir les threads sur tous les cœurs. La réponse à votre question est donc oui. Si vous souhaitez en savoir plus, je vous suggère "Understanding the Linux Kernel" de Bovet & Cesati.

0voto

Whilom Chime Points 131

Si par "plusieurs programmes qui ne peuvent utiliser qu'un seul noyau" vous voulez dire des programmes dont vous pouvez modifier les sources, pensez à ajouter un appel à sched_setscheduler() pendant le démarrage du thread pour donner au scheduler un indice sur la façon dont vous voulez que chaque thread soit planifié. Le scheduler de Linux est assez étonnant, mais plus il a d'informations, mieux il peut faire son travail ! sched_setscheduler() est un appel système privilégié, le thread qui l'appelle doit au moins avoir la capacité CAP_SYS_NICE et peut-être d'autres.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X