El experto de Windows Internals Alex Ionescu publicó hace poco unos preocupantes hallazgos con respecto al código utilizado por AMD en sus CPU Ryzen, mostrando un comportamiento inesperado del controlador PnP PCI de AMD para sistemas con estos procesadores. Rápidamente se planteó la acusación de un ajuste de rendimiento oculto, y aunque finalmente parece que no es el caso desde luego el enfoque de AMD respecto a esto es bastante cuestionable.
Hay ocasiones en las que no es extraño ver a las grandes compañías manipulando de una u otra manera el comportamiento de sus productos cuando se detecta que se ejecutan ciertas tareas, como pueden ser juegos o benchmarks específicos, con el objetivo de aumentar artificialmente el resultado en dichos programas. Es precisamente lo que en primera instancia parece que ha sucedido con las CPU AMD Ryzen, y aunque al final parece que no es así desde luego el asunto es bastante sospechoso.
El controlador PnP PCI manipula la CPU AMD Ryzen
Como descubrió Ionescu, el controlador PCI para Windows busca 19 procesos hash (archivos ejecutables) que rápidamente se descubrió que coincidía con los archivos ejecutables de 19 juegos, lo cual ya de por sí levantó suspicacias. Si el controlador detecta que se ejecuta alguna de estas aplicaciones, desactiva determinadas funciones a través del registro específico del modelo (MSR) de la CPU.
https://twitter.com/aionescu/status/1393728057005920263
Con una CPU AMD Ryzen 1000 (de arquitectura Zen 1 y, por lo tanto, probablemente también afecte a los Ryzen 2000), ciertas funciones en el caché para instrucciones (caché de operaciones) se ven afectadas, mientras que con procesadores Ryzen 3000, son algunas funciones de la memoria caché L1 y L2 las que se ven afectadas. Eso sí, por lo que ha determinado Ionescu, esto no está afectando a los últimos procesadores Ryzen 5000 de AMD.
Originalmente, Ionescu había asumido que AMD activaría funciones que son ventajosas para el rendimiento y que podrían generar inestabilidad en estos 19 juegos; la optimización del rendimiento está prácticamente oculta con el controlador PCI. Sin embargo, parece que esto al final no funciona así ya que el mismo driver desactiva esas funciones, muy probablemente con el objetivo de evitar problemas de inestabilidad; a pesar de eso, el código de AMD sigue presente ahí y no se sabe muy bien por qué.
El enfoque de AMD sigue siendo cuestionable
No cabe duda de que el enfoque de AMD al respecto es cuando menos cuestionable. Ni el bit en el MSR que fue adaptado por el controlador ni la función en éste están documentados en ninguna parte, según Ionescu. También se critica el hecho de que el controlador haya recibido el certificado WQHL de Microsoft a pesar de que realice tareas completamente fuera de su función real, y aunque el controlador PCI debería precisamente lograr el objetivo de WQHL de aumentar la estabilidad del sistema, esta función oculta hace precisamente lo contrario.
https://twitter.com/aionescu/status/1393798004151181312
Ionescu hace referencia a otro problema al respecto y en este caso es relativo a la seguridad: la interfaz IOCTL del controlador permitió a Ionescu bloquear el equipo con solo una línea de código a través de PowerShell, y además es posible manipular la lista de procesos monitorizados por el controlador.
AMD por el momento no ha dicho nada al respecto de estas acusaciones, pero desde luego es cuando menos sospechoso que se haya detectado este «problema» cuando el fabricante no lo ha documentado por ninguna parte.