Implementación de Retpoline en Windows 10 Pro

Google desarrolló Retpoline, una técnica inteligente de control de flujo, para acelerar drásticamente las operaciones y procesos dependientes de la ejecución especulativa. La clave de Retpoline es hacerlo, además, sin comprometer la seguridad.

Microsoft ha adaptado recientemente Retpoline al kernel de Windows. En este artículo detallo la Implementación de Retpoline en Windows 10 Pro, con esta optimización conseguiremos mejoras de velocidad de un 25 – 50 % en ciertas áreas.

Google desarrolló Retpoline, una técnica inteligente de control de flujo, para acelerar drásticamente las operaciones y procesos dependientes de la ejecución especulativa. La clave de Retpoline es hacerlo, además, sin comprometer la seguridad.

Retpoline tiene como objetivo acelerar drásticamente las operaciones y procesamiento que dependen de la ejecución especulativa sin comprometer la seguridad.

En este artículo detallo como activar Retpoline en sistemas Windows 10 y aprovechar sus ventajas en velocidad.

Prestaciones con Retpoline habilitado

Por todos es conocida la gran afectación en prestaciones y velocidad que acarrearon los patches para todos los sistemas operativos Windows y distribuciones Linux para mitigar las vulnerabilidades descubiertas debidas a ejecución especulativa.

Según estudios de Microsoft, la implementación de Retpoline en el Kernel de Windows 10 ha aportado importantes mejoras en velocidad:

  • Hasta un 25% de mejora en el tiempo de lanzamiento de  aplicaciones.
  • Un 50% en el rendimiento del almacenamiento en los puntos de referencia de DiskSpd.
  • Mejoras drásticas en operación con redes  en las CPU de Broadwell 14 nm y Haswell 22 nm.

Bien, manos a la obra, vamos a habilitar Retpoline en nuestro sistema Windows 10 Pro.

Implementación en Windows 10 Pro

Los procedimientos aquí detallados están pensados para sistemas basados en CPUs Intel Broadwell y anteriores (Haswell, IvyBridge, …) con Windows 10 1809 instalado. No son compatibles con CPUs Intel Skylake:

«Since Retpoline is a performance optimization for Spectre Variant 2, it requires that hardware and OS support for branch target injection to be present and enabled. Skylake and later generations of Intel processors are not compatible with Retpoline, so only Import Optimization will be enabled on these processors.»

Lanzamos Windows PowerShell como administrador y ejecutamos:

PS> Install-Module -Name SpeculationControl
Instalación de Retpoline en Windows 10. Speculation Control
Instalación de Retpoline – Speculation Control

Y después:

PS> # Guardamos estado política ejecución
PS> $SaveExecutionPolicy = Get-ExecutionPolicy

PS> # comprobamos la variable
PS> echo $SaveExecutionPolicy
PS> Restricted

PS> # Ajustamos nueva política ejecución a RemoteSigned
PS> Set-ExecutionPolicy RemoteSigned -Scope Currentuser

PS> # Guardamos estado nueva política ejecución
PS> $SaveNewExecutionPolicy = Get-ExecutionPolicy

PS> # comprobamos la variable
PS> echo $SaveNewExecutionPolicy
PS> RemoteSigned
Instalación de Retpoline en Windows 10. Set-Execution Policy
Instalación de Retpoline – Set-Execution Policy

Continuamos:

PS C:\> Import-Module SpeculationControl
PS C:\> Get-SpeculationControlSettings

Aquí vemos los ajustes actuales del sistema operativo de la máquina de tests:

Instalación de Retpoline en Windows 10. Get-SpeculationControlSettings
Instalación de Retpoline – Get-SpeculationControlSettings

Y ahora debemos insertar valores en el registro de Windows. Esta es la implementación de retpoline en sí.

En SKUs de sobremesa o portátiles debemos ejecutar lo siguiente:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 0x400

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 0x400

Instalación de Retpoline en Windows 10. reg add
Instalación de Retpoline – Adiciones claves al registro: reg add

Y reiniciar la máquina. Comprobamos que se ha aplicado la configuración:

PS> Get-SpeculationControlSettings

Retpoline activado en Windows 10
Retpoline correctamente activado en Windows 10
Retpoline activado en Windows 10
Retpoline correctamente activado en Windows 10

Como vemos, tras el reinicio ya tenemos Retpoline activado.

Nuestro equipo será mucho más rápido en múltiples tareas, sobretodo en las relacionadas con el almacenamiento, redes y arranque de aplicaciones.

Bibliografía complementaria

Microsoft: Retpoline en el kernel de Windows 10:

Artículo original de Google sobre a optimización Retpoline:

Intel sobre Retpoline en Skylake vs. arquitecturas anteriores (Broadwell 14 nm, Haswell 22 nm, IvyBridge 22 nm…):

Hasta la próxima.

Carlos Yus Valero

Afinidad, Scheduler de Windows 10 y Virtualización

En el artículo anterior hablé sobre el Scheduler de Windows y algunas optimizaciones posibles afinitizando tareas a CPUs lógicas poniendo de manifiesto técnicas para mejorar el threading en sistemas Windows 10.

En este me centraré en la Virtualización y como puede beneficiarse de manera importante asignando de forma permanente y definida recursos de CPU  a las VM.

Mediante el Administrador de Tareas podemos modificar el comportamiento de un componente crucial de Windows: El Scheduler de Windows 10.

Afinidad y Virtualización

En un Host Windows 10 puedo asignar 4 cores con SMT (un CCX completo con su L3 de 8 MB y 8 threads) a una VM Ubuntu 18.04 LTS en VirtualBox con excelentes resultados en velocidad y sin mermas de prestaciones en el Host Windows 10.

Pondré un ejemplo práctico con VirtualBox y un Guest Ubuntu 18.04 LTS en un Host Windows 10 Pro 1809 x64.

Primero, como base vamos a ver el comportamiento nominal de VirtualBox en Windows 10 Pro.

Continuar leyendo «Afinidad, Scheduler de Windows 10 y Virtualización»

El Scheduler de Windows 10 y las CPU multicore

En este artículo describiré sencillas optimizaciones de rendimiento aplicables a la mayoría de aplicaciones multithread debido a las interacciones  entre el Scheduler de Windows 10 y las CPU multicore.

Estas aplicaciones comprenden la inmensa mayoría del software:

  • Compresores de archivos (WinRAR, 7Zip…)
  • Software de edición de imagen, vídeo y audio (Adobe Photoshop, Audition…)
  • Escaneos antimalware.
  • Cargas ML, DL y AI.
  • Cálculos matemáticos y simulaciones numéricas.
  • Compilación.
  • Y cualquier software ejecutado en multitarea.

Las CPUs multicore actuales de interés para este estudio integran desde 4 cores con SMT, es decir, ejecutan más de 8 threads simultáneos. Las pruebas para este artículo las he ejecutado en el siguiente sistema portátil con 8 cores y 16 threads:

  • Windows 10 Professional 1803 x64
  • CPU AMD Ryzen 7 1700 de 8 núcleos y 16 threads
  • 8 cachés L2 512 KB y 2 L3 8 MB
  • Frecuencia fijada a 3.4 GHz para los tests (repetitividad)
  • Voltaje CPU 1.10 V @ 3.4 GHz
  • 24 GB DDR4 @ 2400 (16 + 8 GB)
  • SSD Sansung Evo 970 500 GB NVMe PCIex 3.0 4X
  • Driver NVMe Samsung
  • SSHD Seagate Firecuda 1 TB (HD Híbrido)
  • GPU AMD Radeon RX580 (driver 18.9.3)

El scheduler de Windows 10

El funcionamiento del Scheduler de Windows 10 (el sistema encargado entre otras tareas de distribuir los threads a las CPUs lógicas) tiene un funcionamiento muy optimizado. No es perfecto pero realmente hace un mejor trabajo que las versiones anteriores de Windows (8.1, 8, 7…) y marca una evolución evidente en el manejo de cargas multithread.

Continuar leyendo «El Scheduler de Windows 10 y las CPU multicore»