Normalement, c'est au système d'exploitation de décider quels processeurs ou cœurs de la machine seront utilisés pour exécuter une application. En fonction du nombre de threads requis par l'application à un moment donné et des besoins des autres applications, le système d'exploitation tentera de déplacer les threads selon les besoins afin de maintenir la charge globale de chaque processeur équilibrée. Lorsqu'il y a plus de threads que de processeurs (ce qui est la norme), le système d'exploitation partagera les processeurs entre plusieurs threads, ce qui signifie que les threads seront mis en pause jusqu'à ce que ce soit leur tour. Pour certaines applications, cette méthode peut ne pas fonctionner correctement, et il peut être utile de dédier certains processeurs ou groupes de processeurs à des applications spécifiques. La plupart des plates-formes de systèmes d'exploitation offrent la possibilité de spécifier qu'un processus ne doit s'exécuter que sur des processeurs spécifiques. Cela s'appelle communément l'affinité CPU ou le pinning CPU.
Dédier des processeurs spécifiques à votre application peut être un moyen de garantir qu'elle disposera toujours de suffisamment de ressources CPU. Au contraire, vous pourriez explicitement laisser certains processeurs inutilisés afin de garantir des ressources suffisantes pour les autres processus s'exécutant sur la même machine. Définir l'affinité processeur peut également optimiser considérablement le cache CPU. En d'autres termes, chaque fois qu'un processus change de processeur, ses données sont transférées d'un processeur à un autre. Ce transfert est coûteux, mais vous pouvez le minimiser en épinglant le processus à un nombre limité de processeurs. Vous devez toutefois veiller à allouer suffisamment de processeurs à votre application, car elle peut avoir la capacité d'exécuter des tâches en parallèle sur différents processeurs lorsqu'ils sont disponibles.
Malheureusement, Java ne fournit pas de solution pour lancer la JVM avec une affinité de cœur ou de processeur.
Si vous souhaitez épingler votre application Java à des processeurs spécifiques, vous devriez soit
utiliser des commandes comme procaff, taskset, soit invoquer du code natif.
Ces solutions sont spécifiques à la plate-forme.
Solution |
|
L'édition Professional du Java Service Wrapper résout ce problème en fournissant un moyen unifié et simple de configurer l'affinité CPU sans avoir à écrire de code. À partir de la version 3.5.27, seuls Windows et Linux sont pris en charge, mais la prise en charge de plates-formes supplémentaires arrivera dans les prochaines versions. La configuration peut cibler le processus Wrapper ainsi que le processus JVM qu'il contrôle. Chacun possède ses propres propriétés pour configurer l'affinité processeur, mais si vous ne spécifiez que celles du Wrapper, par défaut le processus JVM contrôlé héritera de la même configuration et s'exécutera automatiquement en utilisant le(s) même(s) processeur(s) que le processus Wrapper. |
Aperçu technique |
||||||||||||||||||||||||||
|









