Estrategia de Asignación de CPUs y Optimizaciones en KVM/QEMU

Fecha:

26 de julio de 2026

Sistemas de Origen:

Windows 10 (win10-compilador), Rocky Linux 10 (buildlab)

Hipervisor:

KVM / QEMU / libvirt (Arquitectura AMD Zen)

Este documento detalla los principios de diseño, optimizaciones y justificación técnica aplicados a la asignación de CPUs (vCPU pinning), emulación y topología en la infraestructura de virtualización sobre procesadores AMD.


Análisis Comparativo de Configuración

A continuación se resumen los aspectos clave identificados y adaptados entre las plantillas de las máquinas virtuales:

  1. Topología de CPU y vCPU Pinning:

    • Windows 10: Configurado con 4 vCPUs asignadas a un rango contiguo de cores físicos (hilos 2, 3, 4 y 5).

    • Rocky Linux 10: Inicialmente configurado con asignación asimétrica (hilos 3 y 9). Tras la optimización, se escaló a 4 vCPUs utilizando el bloque contiguo 2, 3, 4 y 5.

  2. Aislamiento del Emulador (`emulatorpin`):

    • En la configuración original de Rocky Linux, emulatorpin compartía los procesadores 0-1, 6-7 dedicados al hipervisor.

    • Tras el ajuste, se asignó 10-11 a emulatorpin en ambas plantillas, liberando tanto a los cores del hipervisor como a las vCPUs del guest de la carga de E/S y gestión de emulación.

  3. Optimizaciones de Red y Almacenamiento:

    • Integración de la característica vhost con 4 colas de red (queues='4') en la interfaz virtio conectada al puente br_lab.

Justificación Técnica: Asignación Contigua vs. Discontinua de CPUs

En procesadores modernos basados en la arquitectura AMD Zen (Ryzen / EPYC), la elección de asignación de CPUs para las máquinas virtuales responde a tres factores clave de rendimiento:

1. Mapeo de Hilos SMT y Cores Físicos

En la topología lógica expuesta por el kernel Linux, los números de CPU suelen asignarse en secuencia. Al elegir un bloque contiguo (por ejemplo, los hilos 2 y 3):

  • Se asignan hilos lógicos (Simultaneous Multithreading - SMT) pertenecientes al mismo núcleo físico.

  • Ambos hilos comparten las cachés de Nivel 1 (L1) y Nivel 2 (L2) del núcleo, minimizando latencias e ineficiencias en la sincronización de procesos del sistema invitado.

2. Localidad en el Complejo de Núcleos (CCX) y Caché L3

Los núcleos en procesadores AMD están agrupados en CCX (Core Complex), compartiendo una estructura unificada de caché L3.

  • Asignación Contigua: Mantiene todas las vCPUs de la máquina virtual dentro del mismo CCX o dominio de caché.

  • Asignación Discontinua: Si se asignan hilos distantes (como 3 y 9), los hilos de la máquina virtual deben atravesar el bus de interconexión (Infinity Fabric) para sincronizar memoria, provocando cache misses (fallos de caché L3) y penalizaciones drásticas de latencia.

3. Diferencia respecto a la Reserva del Hipervisor

La reserva de los procesadores 0-1, 6-7 para el hipervisor responde a objetivos distintos:

  • Hipervisor: Requiere aislamiento y tolerancia a fallos para atender interrupciones E/S del sistema host, tareas de kernel y demonios de gestión independientes.

  • Máquina Virtual (*Guest*): Ejecuta cargas intensivas paralelas (compilaciones con make -j4, pipelines de CI/CD, etc.) que dependen críticamente de un acceso rápido, coherente y localizado a las memorias caché de la CPU.