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
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
Continuamos:
PS C:\> Import-Module SpeculationControl
PS C:\> Get-SpeculationControlSettings
Aquí vemos los ajustes actuales del sistema operativo de la máquina de tests:
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
Y reiniciar la máquina. Comprobamos que se ha aplicado la configuración:
PS> Get-SpeculationControlSettings
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:
- Mitigating Spectre variant 2 with Retpoline on Windows
- GitHub – Microsoft SpeculationControl
March 1, 2019—KB4482887 (OS Build 17763.348)
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