Seguimiento de bits de integridad

En este artículo se describe la característica de seguimiento de bits de integridad, que se admite a partir de Windows 11, versión 24H2 (WDDM 3.2). Los controladores que admiten la migración en vivo en dispositivos de paralelización de GPU también deben admitir el seguimiento de bits de integridad.

Introducción

A medida que se popularizan las GPU en escenarios de nube, aumenta la necesidad de garantizar que la migración de máquinas virtuales de un host físico a otro mantenga un rendimiento razonable. Esta necesidad no es solo para reducir el impacto en el usuario, sino también para evitar problemas como los tiempos de espera de las solicitudes TCP mientras se migra la máquina virtual.

La transferencia de contenido de memoria entre los hosts físicos se realiza en dos pasos generales:

  1. Caída de tensión: durante el período de caída de tensión, la máquina virtual se sigue ejecutando, pero el sistema realiza un guardado iterativo de los datos de integridad. El objetivo es que la cantidad de datos de integridad durante cada iteración sea más pequeña hasta que converge en un subconjunto más pequeño de datos que se pueden copiar rápidamente. Esta cantidad de datos varía en función de la carga de trabajo de la máquina y no se garantiza que converja a ningún tamaño determinado.

  2. Indisponibilidad: durante el período de indisponibilidad, la máquina virtual está en pausa y se copian todos los datos de integridad restantes. Esta copia garantiza que los datos resultantes en la máquina de destino se encuentren en el mismo estado que el origen.

Sin el seguimiento de bits de integridad, el sistema debe basarse en una sola copia completa del búfer de cuadros (VRAM) de la GPU durante el período de indisponibilidad. Para solucionar el escenario de caída de tensión, el hardware debe ser capaz de realizar un seguimiento activo de las páginas de memoria de integridad e informar de ello al sistema operativo para que este sepa solo qué memoria copiar.

Diseño detallado

Capacidades de elaboración de informes

Durante la inicialización del adaptador, Dxgkrnl consulta al controlador para pedir información sobre el formato del plano de bits de integridad utilizado por el hardware; es decir, el tamaño de página (o la cantidad de datos) representado por cada bit.

Inicio y detención de la captura de integridad

Si el seguimiento de la información de integridad tiene un alto coste en el rendimiento del hardware, tiene sentido habilitar solo el seguimiento de integridad durante el período de indisponibilidad. Durante este tiempo, minimizar los costes de la migración es más importante que el posible impacto en el rendimiento del seguimiento.

Sin embargo, si el impacto en el rendimiento es insignificante o nulo, resulta beneficioso activar siempre este comportamiento. Es posible que algunos usuarios no realicen cargas de trabajo de GPU pesadas en sus máquinas virtuales, por lo que es posible que la memoria no esté muy desfasada desde el principio. Al habilitar el seguimiento de bits de integridad en el momento de inicio, la primera iteración de la caída de tensión puede usar inmediatamente los datos de integridad sin necesidad de una copia completa del búfer de cuadros. Si la cantidad de memoria de integridad del usuario es pequeña (por ejemplo, el usuario está realizando principalmente cargas de trabajo de CPU), el ahorro de costes de la migración puede ser bastante significativo.

Consulta de bits de integridad

La información de integridad se representa como un plan de bits de páginas de integridad. Cada bit del plano de bits representa una "página" de memoria. El tamaño de página de los datos de integridad no necesita alinearse con los tamaños de páginas naturales del direccionamiento virtual en la GPU (por ejemplo, 4 KB/64KB). Puede ser el que resulte más óptimo para el hardware concreto. El controlador notifica este tamaño de página durante la inicialización.

Durante el período de caída de tensión, Dxgkrnl consulta el hardware para obtener datos de integridad entre cada iteración. En este momento, el controlador debe poder consultar y restablecer los datos del plano de bits de forma atómica. Es decir, el hardware debe poder consultar el valor y restablecerlo a cero en una sola operación atómica para evitar la pérdida de datos en la información de integridad.

No todas las máquinas virtuales se migran necesariamente al mismo destino, por lo que la migración del búfer de cuadros se produce para cada instancia de GPU virtual. Por lo tanto, el controlador debe poder consultar la información del plano de bits para un subrango especificado del búfer de cuadros general que representa esa instancia de GPU virtual determinada. Por ejemplo, una GPU de 8 GB dividida en cuatro partes debe poder consultar y restablecer individualmente los bits del plano de bits de cada rango de 2 GB de VRAM por separado sin afectar a los demás datos de bits de integridad.

Cambios de DDI

Funcionalidades

Los límites siguientes se agregan a DXGK_QUERYADAPTERINFOTYPE.

DDI base de memoria

El seguimiento de las operaciones de modificación en VRAM es para las asignaciones que podrían no estar respaldadas de forma contigua. Un uso inicial en la migración en vico, por ejemplo, se aplica al seguimiento de la reserva del búfer de cuadros para una función virtual. Por lo tanto, las direcciones físicas representadas en el seguimiento de bits de integridad constan de una colección de intervalos que representan la asignación en la que se opera.

Es importante asegurarse de que las operaciones coinciden con los mismos intervalos. En muchos casos, esta correspondencia debe ser una invariante forzada de las interfaces para garantizar un seguimiento adecuado del estado. Para ayudar a este seguimiento con el KMD, se presentan las siguientes interfaces: