Un bug identificado en Windows 10 está afectando negativamente a Ryzen
Se ha identificado un error en la manera en que Windows 10 maneja el scheduler del procesador Ryzen que podría estar detrás de los problemas de rendimiento irregular que muestran estos nuevos procesadores, recientemente lanzados al mercado por parte de AMD. Según fuentes, el scheduler no sabría identificar correctamente cuál de los hilos del procesador corresponde a un núcleo físico y cuál a uno virtual, mandando el mismo tipo de carga de trabajo a ambos.
El scheduler de un un sistema operativo es la parte del kernel que se encarga de distribuir la carga de trabajo de los procesos entre los diferentes hilos que pone a su disposición el procesador del equipo. En los antiguos procesadores mono hilo eso no es un gran problema, al igual que en los procesadores que tienen X núcleos físicos. El problema llega cuando uno de los núcleos del procesador le dice al S.O que en realidad tiene dos hilos para efectuar operaciones de procesado de instrucciones, que es exactamente lo que sucede con el Hyperthreading de Intel y con el Simultaneous Multhreading de AMD. Y es que un hilo virtual nunca puede llegar a realizar el mismo tipo de operaciones (en peso) que un núcleo físico dado que le falta la mayor parte de los componentes que tiene dicho núcleo físico.
Intel ya pasó por estos mismos problemas cuando desarrollaron el Hyperthreading, al sacar los Pentium IV modelo C en que el scheduler de Windows XP no era capaz de diferenciar qué hilo correspondía al núcleo real y cuál al virtual, dando lugar a situaciones en las que la cola de tareas se atascaba por haber mandado una instrucción demasiado pesada al hilo que no correspondía. Y algo similar sucedió con el scheduler de Windows 7 cuando AMD sacó al mercado los primeros procesadores Bulldozer, donde el scheduler requirió de un parche por parte de Microsoft para que funcionara correctamente.
El scheduler de Windows 10 es capaz de ver correctamente los hilos virtuales del HT de Intel y les encarga tareas menos pesadas de las que encargaría al hilo procedente de un núcleo físico, de manera que el conjunto del procesador es capaz de sacar partido a este incremento de operaciones. Sin embargo, este mismo scheduler no ha sido modificado de la manera adecuada para que haga lo mismo con los hilos que nacen de los núcleos de Ryzen, de manera que la carga de trabajo se hace a los hilos de manera indiscriminada, sin tener en cuenta si son reales o virtuales. no solo eso, sino que también lee de manera incorrecta la cantidad de caché de la que dispone el núcleo, creyendo que dispone de 136 MB cuando en realidad Ryzen dispone de tan solo 20 MB en total si sumamos las cachés L2 y L3.
Windows 10 Scheduler Single Core Thread Mapping:
*————— Data Cache 0, Level 1, 32 KB, Assoc 8, LineSize 64
*————— Instruction Cache 0, Level 1, 64 KB, Assoc 4, LineSize 64
*————— Unified Cache 0, Level 2, 512 KB, Assoc 8, LineSize 64
*————— Unified Cache 1, Level 3, 16 MB, Assoc 16, LineSize 64
-*————– Data Cache 1, Level 1, 32 KB, Assoc 8, LineSize 64
-*————– Instruction Cache 1, Level 1, 64 KB, Assoc 4, LineSize 64
-*————– Unified Cache 2, Level 2, 512 KB, Assoc 8, LineSize 64
-*————– Unified Cache 3, Level 3, 16 MB, Assoc 16, LineSize 64
A fecha de hoy sabemos que AMD ya está al tanto de este error y supongo que ya estarán en conversaciones con Microsoft para que sea corregido lo antes posible dado que es un fallo bastante garrafal por su parte. Pero mientras, ¿qué pueden hacer los usuarios poseedores de uno de estos procesadores? La solución que da AMD es desactivar el SMT en la Bios de la placa base para evitar que el scheduler pueda seguir generando conflictos con los hilos virtuales, al menos hasta que Microsoft saque un parche que solucione el problema, al menos si vuestro uso del ordenador es bastante normal, aunque si os dedicáis mucho a renderizar, no es necesario que lo hagáis porque en este escenario no debiera de haber grandes penalizaciones con este problema.