Esta es una pregunta muy buena y relevante. Como todos sabemos, un núcleo hiper-enhebrado no es una verdadera CPU/núcleo. En cambio, es una CPU/núcleo virtual (de ahora en adelante diré núcleo).Se supone que el programador de CPU de Windows a partir de Windows XP es capaz de distinguir núcleos hyperthreading (virtuales) de núcleos reales. Podrías imaginarte entonces que en este mundo perfecto los maneja "bien" y no es un problema. Estarías equivocado.
La propia recomendación de Microsoft para optimizar un servidor BizTalk de Windows 2008 recomienda deshabilitar HyperThreading. Esto sugiere, para mí, que el manejo de núcleos hiperhilo no es perfecto y, a veces, los hilos obtienen una porción de tiempo en un núcleo con hiperproceso y sufren la penalización (una fracción del rendimiento de un núcleo real, 10% I ' Supongo, y Microsoft adivina 20-30%).
Microsoft referencia el artículo en el que sugerimos que deshabilite HyperThreading para mejorar la eficiencia del servidor: http://msdn.microsoft.com/en-us/library/cc615012(BTS.10).aspx
Es la segunda recomendación después de la actualización del BIOS, que es lo importante lo consideran. Dicen:
DE MICROSOFT:
"Desactivar hyper-threading en BizTalk equipos servidor Server y SQL
Es crítica hyper-threading se apagado de Computadoras BizTalk Server . Esta es una configuración de BIOS, que se encuentra típicamente en la configuración del procesador o f la configuración de BIOS. Hyper-threading hace que el servidor parezca tener más procesadores/núcleos de procesador que ; sin embargo, los procesadores de hiperproceso suelen proporcionar entre 20 y 30% del rendimiento de un núcleo de procesador/procesador físico . Cuando BizTalk Server cuenta el número de procesadores para ajustar sus algoritmos de autoajuste ; los procesadores de hiperproceso provocan que estos ajustes sean asimétricos, lo que es perjudicial para el rendimiento general. "
Ahora, ellos dicen que se debe a que arrojando los algoritmos de autoajuste, pero que van a mencionar problemas de contención (lo que sugiere que es un problema de programación más grande, al menos para mí). Léalo como quiera, pero creo que lo dice todo. HyperThreading era una buena idea cuando se usaban sistemas de CPU individuales, pero ahora es solo una complicación que puede dañar el rendimiento en este mundo multinúcleo.
En lugar de deshabilitar por completo HyperThreading , puede usar programas como Process Lasso (gratuito) para establecer las afinidades predeterminadas de CPU para procesos críticos, de modo que sus subprocesos nunca se asignen a CPU virtuales.
Entonces ... No creo que nadie sepa realmente cuán bien el Programador de CPU de Windows maneja las CPU virtuales, pero creo que es seguro decir que XP lo maneja peor, y lo han mejorado gradualmente desde entonces, pero todavía no es perfecto. De hecho, NUNCA puede ser perfecto porque el sistema operativo no tiene ningún conocimiento de qué subprocesos son mejores para poner en estos núcleos virtuales más lentos. Ese puede ser el problema allí, y por qué Microsoft recomienda deshabilitar HyperThreading en entornos de servidores.
También recuerde que incluso SIN HyperThreading, existe el problema de la "vibración central". Si puede mantener un hilo en un solo núcleo, eso es bueno, ya que reduce las penalizaciones de cambio de núcleo.
Me gustaría comentar que la política óptima no siempre es ejecutar las dos tareas en diferentes núcleos; por ejemplo, si tiene dos tareas que comparten memoria y realizan muchas operaciones no superpuestas, ejecutarlas en el mismo núcleo puede proporcionar un mayor rendimiento porque la reducción en el caché no compensa el tiempo de ejecución ligeramente más lento que ocasionalmente tiene que compartir el procesador (recuerde, en este escenario, ambos subprocesos usualmente se ejecutarán en paralelo incluso en un núcleo porque están usando diferentes unidades lógicas). – Borealid
Solo como un FYI: si está buscando un rendimiento sin procesar, es posible que desee deshabilitar hyperthreading. A menos que Intel haya finalmente funcionado bien. En el pasado (lo último que medí estaba en un procesador 2x P4 Xeon box con hyperthreading (produciendo 4 procesadores lógicos para el sistema operativo), el rendimiento neto de ejecutar 4 hilos computacionalmente intensivos con hyperthreading habilitado produce un rendimiento neto menor que ejecutar 2 hilos con hyperthreading desactivado. Obviamente, querrá probarlo usted mismo con el último hardware, puede que ya no sea el caso. Pero tenga en cuenta ... –
Ejecutar subprocesos en el mismo núcleo es EXACTAMENTE lo que quiere, a veces. Por ejemplo, cuando ejecuta hilos en núcleos físicos separados, la línea de caché que intercambia núcleos DECIDE el rendimiento. –