2012-09-14 22 views
12

¿Cómo se inicia un proceso de nodo, que se dirige a un núcleo de CPU específico?Node.js: orientación a un núcleo de la CPU

He visto el clúster de nodos, pero estoy interesado en comenzar dos procesos diferentes, en diferentes núcleos.

estaba asumiendo que había una manera de hacer esto cuando se inicia nodo desde la línea de comandos, es decir:

myapp.js nodo

Me interesaría saber cómo hacerlo esto en Windows y Linux, si hay una diferencia.

+0

Con PM2 se puede hacer eso: https://github.com/Unitech/pm2 – Unitech

+1

@Unitech ha podido añadir una respuesta con un código? ¿Cómo se dirige a un núcleo de CPU específico? – styfle

Respuesta

5

En Linux puede usar taskset para ejecutar un nodo con una afinidad de CPU dada. Consulte this post para obtener información sobre el uso del comando start en Windows para hacer lo mismo.

11

En general, el programador hará un buen trabajo sin ayuda. En la naturaleza, solo he visto una situación donde esto importaba ...

Implementamos un servicio de nodo en una caja de 8 núcleos y durante la prueba de carga hicimos la observación más extraña ... el servicio realmente se realizó mejor con 7 trabajadores que con 8. Un poco de depuración más tarde y nos dimos cuenta de que todas las interrupciones de red estaban siendo manejadas por el núcleo 0. Jugué con el uso de 15 trabajadores para que core0 tuviera una 1/2 parte de la carga en comparación con el otros núcleos. En última instancia, creo que terminamos yendo con 7 trabajadores porque era más simple y más predecible y la complejidad simplemente no valía la pena para obtener ~ 7% más de rendimiento teórico.

Dicho esto, para establecer afinidad de CPU en Linux:

$ taskset -pc 3089 
pid 3089's current affinity list: 0,1 

$ taskset -p 3089 
pid 3089's current affinity mask: 3 # core 0 = 0x1, core 1 = 0x2 


$ taskset -pc 1,2,3 3089 
pid 3089's current affinity list: 0,1 
pid 3089's new affinity list: 1 
+0

En general, el planificador hará un trabajo bastante bueno sin ayuda Ya veo. Creo que me estaba empezando a forzar la afinidad manualmente. ¿Sabes dónde está documentado el comportamiento del planificador? P.ej. si inicia servicios de 4 nodos en la máquina de 4 núcleos, ¿se ejecutarán cada uno en un núcleo diferente, así como así? – UpTheCreek

+0

En realidad, existen múltiples programadores de kernel, dependiendo de la versión del sistema operativo y con Linux, puede intercambiar algunas alternativas que optimizan para varios casos. En general, si tiene N cosas que desea ejecutar, y hay N núcleos, el planificador tiene un trabajo bastante fácil. No es infalible, pero lo que he descubierto es que es tan fácil hacer que PERFORMA sea lo peor como lo es mejorar mi problema con la afinidad central. Se necesita una gran cantidad de perfiles cuidadosos para poder comprender lo que realmente está sucediendo y demostrar que ha mejorado las cosas al agregar una restricción al sistema. –

+0

"Si inicia servicios de 4 nodos en una máquina de 4 núcleos, ¿cada uno se ejecutará en un núcleo diferente?" - en una palabra, sí. Y tan divertido como geek y medir cosas (estuvo allí, lo hizo), es poco probable que obtenga un gran impulso sobre lo que el sistema hará automáticamente. Esperaría hasta que tengas un problema demostrable antes de intentar arreglar algo que no esté roto. Además, no debe presionar estos cuadros en cualquier lugar cerca del 100% de carga si están atendiendo solicitudes (los trabajadores de cola son una historia diferente). Incluso una carga del 50% es realmente agresiva y dará como resultado una gran cantidad de latencia de solicitud adicional. –

Cuestiones relacionadas