Normalmente el sistema operativo (OS) decide qué CPUs o servicios básicos de la máquina se utilizarán para ejecutar una aplicación. Dependiendo del número de subprocesos requeridos por la aplicación en un momento dado y las necesidades de otras aplicaciones, el OS intentará mover subprocesos cuando sea necesario para mantener la carga total en cada CPU equilibrada. Cuando existan más subprocesos que CPUs (lo cual es normal), el OS compartirá CPUs entre varios subprocesos, lo que significa que los subprocesos serán pausados hasta que sea su turno. Para algunas aplicaciones este método podría no funcionar bien, y puede ser útil dedicar ciertos CPUs o grupos de CPUs en aplicaciones específicas. La mayoría de las plataformas en OS proporcionan la capacidad para especificar que un proceso solo debe ejecutarse en CPUs específicos. Esto comúnmente se llama Afinidad del Procesador o CPU pinning.
Al dedicar CPUs específicos a su aplicación puede ser una manera de asegurarse de que siempre tendrá suficientes recursos de CPU. Por el contrario, podría mantener de forma explícita algunos procesadores sin usar, con el fin de garantizar los recursos suficientes para otros procesos en ejecución en la misma máquina. Al configurar la afinidad del procesador también puede optimizar significativamente CPU caché. En otras palabras, cuando un proceso cambia de CPU, sus datos son transferidos de una CPU a otra. Esta transferencia es costosa pero puede minimizarla al enviar un pin al proceso a un número limitado de CPUs. Sin embargo, deberá tener cuidado al permitir suficientes procesadores para su aplicación, ya que puede tener la capacidad de ejecutar tareas en paralelo en diferentes CPUs cuando sea posible.
Desafortunadamente, Java no proporciona una solución para iniciar la JVM con núcleo o afinidad del procesador. En caso de que desee enviar un pin a su aplicación Java a CPUs específicos, tendría que usar cualquiera de los comandos procaff, taskset o invocar a código nativo. Estas soluciones son específicas de cada plataforma.
Solución |
La edición Profesional del Java Service Wrapper se enfoca en ese problema al proveer una manera fácil y unificada para configurar la afinidad CPU sin tener que escribir algun código. A partir de la versión 3.5.27, solo Windows y Linux son compatibles, pero otras plataformas gradualmente se iran agregando en versiones futuras. La configuración puede elegir como blanco al proceso del Wrapper así como a su proceso de JVM controlado. Cada uno tiene sus propiedades para configurar la afinidad del procesador pero si sólo especifica los del Wrapper, por defecto el proceso JVM controlado hereadará la misma configuración y automaticamente ejecutarla usando le mismo CPU(s) que el del proceso del Wrapper. |
Descripción Técnica |
||||||||||||||||||||||||||
|