Choisir les cores processeur sur lesquels tournent nos instances

iDre4mZ

Configurations machines @ Tolarys
30 Décembre 2011
1 332
149
182
27
twitter.com
Salut tout le monde !

Ça faisait très longtemps que je n'avais pas mis les pieds ici, et d'après les problèmes que je vois apparaitre aujourd'hui sur ce forum et le forums plugins, je m'aperçois que je suis bien bien rouillé non de dieu... :p

Aujourd'hui je viens d'ailleurs vous poser une question, que j'ai déjà posé dans le passé mais à l'époque, ma question n'avait pas de solution...

J'aurai aimé savoir si aujourd'hui, il était possible de choisir le core processeur sur lequel on démarre une instance Spigot.

En effet, cela permettrait de faire de belles économies sur un serveur avec beaucoup d'instances Spigot.

Imaginons qu'on ai un i7 avec 4 cœurs, 8 threads.

On sait que Spigot prend 2 cœurs pour tourner, si on pouvait forcer Java à tourner que sur les 2 premiers avec la 1ère instances Spigot, et sur les 2 autres avec la 2nde instance, cela nous permettrait de gagner beaucoup de ressources non utilisées sur le processeur...

Vu ce que je vois que les développeurs font aujourd'hui, je me dis que c'est possible que quelqu'un ai trouvé une solution.

En attendant une réponse, je vous souhaite un bon week-end !

Cordialement
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
28
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Si je ne dit pas de bêtises cela va dépendre de ton processeurs... En temps normal c'est l'OS qui gère quel corps s'occupe de quel processus. Si on laisse à un processus trop de liberté ce serait une faille de sécurité. Imagine un programme qui puisse décider qui s'exécute sur chacun des cœurs en même temps... Ton serveur exécuterait plus aucun programme. Bon, ok, j'exagère car il y a moyen d'avoir des priorités aux processus. Un programme peut diminuer tant qu'il veut sa priorité. L'inverse n'est par contre pas vrai (sinon on se retrouverait dans la situation que je viens de décrire).

Tout cela pour dire que si c'est possible, il y a de forte chance que cela soit un système proposé par ton Processeur et "indépendant" de ton programme. Car j'ai l'impression qu'il s'agit d'une tâche "dangereuse" et que seul un programme "authentifié" et un ayant un droit absolue dans l'OS pourrait décider de ce genre de chose.

Ici je parle bien évidemment de processeur "normal". Ce genre de chose est par exemple très commun pour les processeurs "real-time" qui vont exécuter des routines sur un cœur, avoir un cœur dédier pour tel et tel programme, ect.

Mais au final, je pense que ta question n'a pas de sens. S'il y a plusieurs processus, ton OS va lui même s'occuper de les répartir sur les différents cœurs. Ce sera automatique. Si tu as 3 programmes et 4 cœurs, il y a énormément beaucoup de chance que chacun programme ai un cœur...
Si ton OS laisse des cœurs vide c'est parfois volontaire, pour les permettre de refroidir par exemple... Tu as comme cela des processeurs qui sont "over clock" à tour de role. L'OS fait passer 2 cœurs sur les 4 à une fréquence beaucoup plus haute tout en coupant les 2 autres pour qu'ils refroidissent. Un fois que les 2 premiers cœurs sont "chaud", il switch le tout. Et au final tu as une cadence d’exécution rapide en continu. Au lieu d'avoir 4 cœurs "normaux".
Bref, les OS sont déjà optimisé pour ne pas perdre de puissance... Normalement tu ne dois pas t'en faire ;)

EDIT: si tu veux absolument faire ce que tu veux, je pense que le plus simple et de modifier un OS pour "ré-écrire" l’ordonnanceur... Mais je doute que tu y gagnes.


Cordialement,
Detobel36
 
  • J'aime
Reactions: Fau8

Alex Fatta

Commandant de la Flotte et de la Horde
13 Août 2014
1 391
1
191
187
Bonjour !

Ce qu'a dit Detobel est tout fait vrai et fondé ! Chaque OS est censé s'occuper de la répartition des processus en fonction de plusieurs critères (leur place dans la file des processus, leur temps d’exécution, les ressources que demandent le processus par rapport aux ressources nécessaires etc...) Je pourrais t'en parler pendant très longtemps mais je pense que le mieux est de te donner pile l'élément concerné.

Dans ton cas, il s'agit donc de l'ordonnancement des processus. Voici la page du cours ainsi que la page concernée, à savoir l'ordonnancement :

Cours : https://www.supinfo.com/cours/1OSS
Chapitre ordonnancement : https://www.supinfo.com/cours/1OSS/chapitres/02-ordonnancement

Après ça les gestion des processus n'aura plus de secret pour toi ;)

AlexFatta
 

iDre4mZ

Configurations machines @ Tolarys
30 Décembre 2011
1 332
149
182
27
twitter.com
Bonsoir,

Merci à vous pour ces éclaircissements.

Donc logiquement démarrant un Spigot, un processus Java se démarre.

En Démarrant un autre Spigot, un deuxième programme Java se démarre et va logiquement se lancer sur un autre coeur.

Je m'en vais également lire les cours Supinfo que tu as envoyé.

Je vais tester tout ça pour en être sur et préparer une infrastructure adaptée à mes projets.

Merci beaucoup encore pour vos partage de connaissances.
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
28
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Oui, les processeurs répartissent la charge. S'il y a 12 programmes, il ne vont pas les faire tourner sur le même cœur. Tous les cœurs seront normalement utilisé :)
A noter également que beaucoup de CPU maintenant gère les multi threading. Ce qui signifie qu'un même programme peut s'exécuter sur plusieurs cœurs. Dans Spigot par exemple, le tchat est indépendant du monde. C'est pour cela que parfois le serveur lag mais pas le tchat. Le premier à un soucis alors que le suivant continue à s'exécuter (potentiellement sur un autre cœur).


Cordialement,
Detobel36