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.

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.

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 en Windows 10

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 de Retpoline 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 en Windows 10. 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 en Windows 10. 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 en Windows 10. 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 en Windows 10. 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

VirtualBox Guest Additions en VM Red Hat RHEL 7.6

Dedico este artículo a la instalación de las VirtualBox Guest Additions en un Host Windows 10 Pro.

Las Guest Additions brindan numerosas posibilidades a nuestras máquinas virtuales y facilita mucho su utilización.

Oracle VM VirtualBox
Oracle VM VirtualBox

En este caso el Sistema Guest es un Red Hat RHEL 7.6 Server con interfaz gráfica. En otro artículo detallaré su instalación en una VM VirtualBox y algunas claves de configuración.

Recientemente hablé en este Blog sobre virtualización. En mi anterior artículo me centré en optimizar las prestaciones de VMs en VirtualBox para Windows 10. Estas optimizaciones de rendimiento iban dirigidas a máquinas con procesadores multicore, específicamente a CPUs con 8 cores y 16 threads como los AMD Ryzen 7 2700X o los Intel Core i9 9900K.

Instalación de las VirtualBox Guest Additions

La instalación es sencilla pero no está exenta de unos cuantos pasos, muchos de ellos se realizan en consola y con privilegios root.

Continuar leyendo «VirtualBox Guest Additions en VM Red Hat RHEL 7.6»

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»

AMD Zen 2 en EPYC 2 Rome 7 nanómetros

AMD lanzará al mercado en 2019 la nueva microarquitectura Zen 2 y los nuevos AMD EPYC 2 Rome fabricados en  7 nanómetros para servers con 64 cores y 128 threads. Ayer, en el evento Next Horizon dió a conocer sus nuevas tecnologías, datos que voy a  analizar en este artículo.

Durante 2019 AMD también desplegará los cores Zen 2 en todos los segmentos del mercado:

  • Ryzen 2 con cores Zen 2 de 7 nm para sobremesa con hasta 16 cores y 32 threads y 16 MB de caché L3.
  • APUs Ryzen 2 con cores Zen 2 de 7 nm con 8 cores y 16 threads con 8 MB L3 para portátiles con GPUs Vega también de 7 nm.

Los nuevos AMD EPYC 2 Rome 7 nm

Simplemente brutal. Los nuevos procesadores EPYC 2 merecen sin duda este calificativo, nada más y nada menos que 64 cores físicos con SMT para 128 threads de procesamiento simultáneo por socket… Increíble, formados por 9 chips (!!) y disponibles ya en 2019.

Y AMD EPYC 2 Rome no solo proporciona cambios a nivel de número de cores o su nueva tecnología de fabricación TSMC de 7 nanómetros. Además evoluciona hacia buses PCIe 4.0 (con doble ancho de banda que los actuales PCIe 3.0) y será compatible con el actual socket SP3 / LGA 4094.

Continuar leyendo «AMD Zen 2 en EPYC 2 Rome 7 nanómetros»