Intel corrige un problema en Linux que le hacía perder hasta un 50% de rendimiento en sus CPU híbridas

Un desarrollador de Kubuntu encontró un curioso problema con la administración de energía de los Intel Core híbridos, es decir, los Core 12, 13 y 14, sin olvidar Meteor Lake, donde lo describió de una manera muy particular. Y es que dijo que la compatibilidad con CPPC V2 interrumpía la programación de dichas CPU debido a un firmware defectuoso, o mal configurado. Tras encontrar la solución a este error de Linux en el rendimiento de las CPU Intel reportó que su i5-13500H era un 50% más rápida que antes a un núcleo. Lógicamente, los azules han salido a implementar las correcciones y mandarlas a Linux y su kernel.

Es un problema complejo realmente que no había sido detectado en los últimos 3 años de existencia de las arquitecturas híbridas y muestra cuánto trabajo de optimización queda por hacer a nivel de software. Entre los chiplets, los empaquetados 3D y los diferentes tipos de núcleos que el SO exprima los mismos es algo tan complejo que a la mínima mejora todos corren a implementarla lo más rápidamente posible.

Un desarrollador encuentra lo que ningún ingeniero pudo

Intel-Meteor-Lake-Parche-EPP-rendimiento-en-Linux

Aunque más adelante en este artículo veremos la explicación al completo, la resumiremos brevemente para ir formando la idea de qué estaba pasando. Resulta que en Linux, si un sistema (PC o portátil) no informa que este tiene capacidad para ACPI CPPC V2, si la respuesta a la verificación es falsa la característica se considera ausente, y ahí empiezan los problemas.

ACPI CPPC V2 es una versión mejorada del CPPC primigenio, y en su base mejora el control de la energía mediante las dinámicas de rendimiento del procesador, siempre teniendo al SO de "árbitro". En la V2 se añadió el control de P-States junto a T-States, lo que mejoró el cambio de frecuencias y voltajes entre ambos estados a niveles de eficiencia y rendimiento.

Aaron Rainbolt, el desarrollador que descubrió el problema, lo explica de manera más técnica así:

"En la confirmación 7feec7430eddd, se agregó la función `acpi_cppc_processor_probe()`
modificada para verificar el bit CPPC v2 en _OSC para determinar si CPPC v2 está presente en el sistema. Si este bit no está establecido, un particular set de CPU se verifica usando `cpc_supported_by_cpu()` (definido en arch/x86/kernel/acpi/cppc.c) para ver si el procesador admite CPPC v2 aunque la BIOS no lo reporte. Si esta función se devuelve como falso, CPPC v2 se considera ausente.

Si bien esto funciona bien en sistemas donde el firmware informa con precisión de la compatibilidad con CPPC v2 en _OSC, esto puede provocar una grave regresión del rendimiento cuando se utiliza el nuevo programador EEVDF en algunas máquinas."

En su i5-13500 recuperó el rendimiento que se le preveía

Parches Intel Core i5 i9 Linux

Aaron sigue con su explicación del problema enfocándolo en dos puntos en concreto:

Hasta ahora, hemos notado este problema en ciertas máquinas con procesadores i5-13500H y hemos visto algunos informes del mismo problema en otras partes en otro hardware. Todas las máquinas que experimentaron este problema tenían dos cosas en común:

* Usan procesadores Intel con núcleos heterogéneo (híbridas)
* Tienen un firmware con errores o mal configurado. En los casos más claros, este
firmware no informa la compatibilidad con CPPC v2 en _OSC a pesar de que CPPC v2 funciona.

Cuando estas dos cosas son ciertas, el programador EEVDF a menudo programará procesos en núcleos E-Cores en lugar de núcleos P-Core, lo que da como resultado un rendimiento a un solo núcleo que está gravemente afectado (mi lugar de trabajo estaba viendo puntajes de Geekbench 5 un 50% más lentos en algunos sistemas debido a este error).

El ingeniero de Intel, Rafael Wysocki, afirma que han dado con la solución y que será implementada en Linux para corregir el error de rendimiento

Intel-Rafael-Wysocki-error-Intel-Linux-rendimiento-CPPC-V2

Explicado el problema, el ingeniero de Intel que se encarga del mantenimiento del subsistema de administración de energía en Linux, el ya famoso Rafael Wysocki, comentó lo siguiente:

"Se informa que el rendimiento de un solo subproceso en algunos sistemas híbridos disminuyó significativamente después de la confirmación 7feec7430edd("ACPI: CPPC: Only probe for _CPC if CPPC v2 is acked"), lo que impidió que se usara _CPC si el firmware de la plataforma no había confirmado su compatibilidad.

El problema es que si el firmware de la plataforma no confirma la compatibilidad con CPPC v2, cppc_get_perf_caps() devuelve un error que impide que el controlador intel_pstate habilite ITMT. En consecuencia, el programador no obtiene ninguna pista sobre las diferencias de rendimiento de la CPU, por lo que en un sistema híbrido algunas tareas pueden ejecutarse en CPU con menor capacidad aunque deberían ejecutarse en CPU de alta capacidad.

Para solucionar esto, modifiqué intel_pstate para utilizar la información de MSR_HWP_CAPABILITIES para habilitar ITMT si CPPC no está disponible (lo que ya se hace si el número de rendimiento más alto que proviene de CPPC no es realista)."

Intel ITMT es la definición abreviada de Intel Turbo Max Technology, es decir, del motor básico del Boost para las frecuencias de los azules en cada tipo de núcleos. Lo que Wysocki aclara es que con este error cuando el SO no reporta que CPPC V2 está habilitado el ITMT no se activa, y por tanto, el Boost no sube, mermando el rendimiento en ese hasta -50%.

Por tanto, a partir de Linux 6.10-rc6 Intel corregirá este error de rendimiento devolviendo a sus CPU a los valores que declaran.