Compartir a través de


Parámetros de arranque para probar controladores de compatibilidad con varios grupos de procesadores

Windows 7 y Windows Server 2008 R2 proporcionan compatibilidad con equipos con más de 64 procesadores. Esta compatibilidad es posible mediante la introducción de grupos de procesadores. Con fines de prueba, puede configurar cualquier equipo que tenga varios procesadores lógicos para tener varios grupos de procesadores limitando el tamaño del grupo. Esto significa que puede probar controladores y componentes para la compatibilidad de varios grupos de procesadores en equipos con 64 procesadores lógicos o menos.

Nota El concepto de grupos de procesadores, introducido con Windows 7, permite que las API y los DDIs existentes sigan funcionando en equipos con más de 64 procesadores lógicos. Normalmente, los procesadores de un grupo se representan mediante una máscara de afinidad, que es de 64 bits de longitud. Cualquier equipo con más de 64 procesadores lógicos tendrá necesariamente más de un grupo. Cuando se crea un proceso, el proceso se asigna a un grupo específico. De forma predeterminada, los subprocesos del proceso se pueden ejecutar en todos los procesadores lógicos del mismo grupo, aunque la afinidad de subproceso se puede cambiar explícitamente. Las llamadas a cualquier API o DDI que toma una máscara de afinidad o un número de procesador como argumento, pero no a un número de grupo, se limitan a afectar o informar sobre esos procesadores en el grupo del subproceso que realiza la llamada. Lo mismo sucede con las API o DDIs que devuelven una máscara de afinidad o un número de procesador, como GetSystemInfo.

A partir de Windows 7, una aplicación o controlador puede usar funciones que amplían las API heredadas. Estas nuevas funciones compatibles con grupos aceptan un argumento de número de grupo para calificar de forma inequívoca un número de procesador o máscara de afinidad y, por lo tanto, pueden manipular procesadores fuera del grupo del subproceso que llama. La interacción entre controladores y componentes que se ejecutan en diferentes grupos dentro de un equipo presenta la posibilidad de errores cuando intervienen API o DDIs heredadas. Puedes usar las API heredadas no compatibles con grupos en Windows 7 y Windows Server 2008 R2. Sin embargo, los requisitos de los conductores son más estrictos. Para la corrección funcional de los controladores en equipos que tienen más de un grupo de procesadores, debe reemplazar cualquier DDI que acepte un número de procesador o máscara como parámetro sin un grupo de procesadores adjunto o devuelva un número de procesador o máscara sin un grupo de procesadores adjunto. Estos DDIs heredados no compatibles con grupos pueden realizar de forma errática en un equipo que tenga varios grupos de procesos, ya que el grupo inferido puede ser diferente al previsto por el subproceso que realiza la llamada. Por lo tanto, los controladores que usan estas DDIs heredadas y están destinados a Windows Server 2008 R2 deben actualizarse para usar las nuevas versiones extendidas de las interfaces. Los controladores que no llaman a ninguna función que use máscaras de afinidad de procesador o números de procesador funcionarán correctamente, independientemente del número de procesadores. Los controladores que llaman a los nuevos DDIs se pueden ejecutar en versiones anteriores de Windows mediante la inclusión del encabezado procgrp.h, la llamada a WdmlibProcgrpInitialize y la vinculación con la Biblioteca de compatibilidad de grupos de procesadores (procgrp.lib).

Para obtener más información sobre las nuevas API y DDIs compatibles con grupos, descargue las notas del producto Sistemas auxiliares que tienen más de 64 procesadores lógicos: Directrices para desarrolladores.

Para ayudar a identificar posibles problemas relacionados con el grupo de procesadores en controladores y componentes, puede usar las opciones BCDEdit /set . Los dos valores de configuración de arranque de BCD, groupsize y maxgroup, pueden configurar cualquier equipo que tenga varios procesadores lógicos para admitir varios grupos de procesadores. La opción groupaware modifica el comportamiento de determinados DDIs y manipula el entorno de grupo con fines de prueba.

Crear varios grupos de procesadores cambiando el tamaño del grupo

La opción groupsize especifica el número máximo de procesadores lógicos de un grupo. De forma predeterminada, la opción groupsize no está establecida y cualquier equipo con 64 o menos procesadores lógicos tiene un grupo, que es el grupo 0.

Nota Un procesador físico, o paquete de procesador, puede tener uno o varios núcleos, o unidades de procesador, cada uno de los cuales puede contener uno o varios procesadores lógicos. El sistema operativo considera un procesador lógico como un motor de computación lógica.

Para crear varios grupos de procesadores, ejecute BCDEdit /set en una ventana del símbolo del sistema con privilegios elevados y especifique un nuevo valor maxsize para groupsize que sea menor que el número total de procesadores lógicos. Tenga en cuenta que la configuración de tamaño del grupo es para las pruebas y no debe configurar los sistemas de envío con esta configuración. El valor maxsize se puede establecer en cualquier potencia de 2 entre 1 y 64 inclusive. El comando usa la siguiente sintaxis:

bcdedit.exe /set groupsize maxsize

Por ejemplo, el comando siguiente establece el número máximo de procesadores de un grupo en 2.

bcdedit.exe /set groupsize 2

Si un equipo que no es NUMA tiene 8 procesadores lógicos, al establecer los grupos en 2 se crean 4 grupos de procesadores con 2 procesadores lógicos cada uno.

Grupo 0: 1 nodo NUMA que contiene 1 paquete de 2 procesadores lógicos

Grupo 1: 1 nodo NUMA que contiene 1 paquete de 2 procesadores lógicos

Grupo 2: 1 nodo NUMA que contiene 1 paquete de 2 procesadores lógicos

Grupo 3: 1 nodo NUMA que contiene 1 paquete de 2 procesadores lógicos

Por diseño, se considera que un equipo que no es NUMA tiene un nodo NUMA. Dado que los nodos NUMA no pueden abarcar grupos, el sistema crea un nodo para cada grupo después de reiniciar el equipo.

Si la agrupación se establece en un valor menor que el número de procesadores lógicos en un paquete de procesador físico (socket), el sistema vuelve a definir su concepto de paquete al reiniciarse de modo que el paquete no abarque un grupo. Esto significa que las API de topología de procesador notifican más paquetes de los que están realmente presentes. Esto también significa que los límites de licencias de procesador de Windows (nivel de paquete) pueden impedir que algunos paquetes de procesador se inicien cuando se establece el tamaño de grupos .

Un paquete de procesador puede abarcar grupos si tiene varios nodos NUMA definidos en él y el sistema asigna estos nodos a diferentes grupos.

Windows limita el número de grupos admitidos. Este número podría cambiar con las nuevas versiones de Windows o en las versiones de Service Pack. Los controladores o componentes no deben depender del número de grupos que Windows admite como constante. El límite del número de grupos podría restringir el número de procesadores lógicos que se pueden iniciar cuando se usan valores pequeños para la opción de arranque groupsize .

Para quitar la configuración de agrupación que usó para probar y volver a la configuración predeterminada de 64 procesadores lógicos por grupo, use el siguiente comando BCDEdit.

bcdedit.exe /deletevalue groupsize

Este comando es el equivalente a establecer grupos en 64.

Maximizar el número de grupos de procesadores

La opción maxgroup es otra manera de crear grupos de procesadores en un equipo con varios procesadores lógicos y nodos NUMA. La opción de arranque maxgroup no tiene ningún efecto en equipos que no son NUMA.

Para maximizar el número de grupos, ejecute el comando BCDEdit /set en una ventana del símbolo del sistema con privilegios elevados. El comando usa la siguiente sintaxis:

bcdedit.exe /set maxgroup on

Por ejemplo, considere un equipo con 2 nodos NUMA, 1 paquete de procesador por nodo y 4 núcleos de procesador por paquete, para un total de 8 procesadores lógicos.

La configuración de grupo predeterminada es:

Grupo 0: 8 procesadores lógicos, 2 paquetes, 2 nodos NUMA

Si escribe un bcdedt.exe /set maxgroup en el comando seguido de un reinicio, el comando produce la siguiente configuración de grupo:

Grupo 0: 4 procesadores lógicos, 1 paquete, 1 nodo NUMA

Grupo 1: 4 procesadores lógicos, 1 paquete, 1 nodo NUMA

Tenga en cuenta que los nodos NUMA se asignan a grupos de una manera que maximiza el número de grupos.

Para volver a cambiar a la configuración predeterminada, use el siguiente comando BCDEdit .

bcdedit.exe /set maxgroup off

Probar Multiple-Group compatibilidad estableciendo la opción de arranque compatible con el grupo

Windows 7 y Windows Server 2008 R2 han introducido una nueva opción BCD (groupaware) que obliga a los controladores y componentes a tener en cuenta varios grupos en un entorno de grupo de procesadores múltiple. La opción groupaware cambia el comportamiento de un conjunto de funciones de controlador de dispositivo para ayudar a exponer incompatibilidades entre grupos en controladores y componentes. Puede usar la opción de arranque groupaware junto con las opciones groupsize y maxgroup para probar la compatibilidad de controladores con varios grupos cuando un equipo tiene 64 o menos procesadores lógicos activos.

Cuando se establece la opción de arranque groupaware , el sistema operativo garantiza que los procesos se inician en un grupo distinto del grupo 0. Esto aumenta las posibilidades de interacción entre grupos entre controladores y componentes. La opción también modifica el comportamiento de las funciones heredadas que no son compatibles con grupos, KeSetTargetProcessorDpc, KeSetSystemAffinityThreadEx y KeRevertToUserAffinityThreadEx, de modo que siempre operan en el grupo numerado más alto que contiene procesadores lógicos activos. Los controladores que llaman a cualquiera de estas funciones heredadas deben cambiarse para llamar a sus homólogos compatibles con grupos (KeSetTargetProcessorDpcEx, KeSetSystemGroupAffinityThread y KeRevertToUserGroupAffinityThread),

Para probar la compatibilidad, use el siguiente comando BCDEdit /set .

bcdedit.exe /set groupaware on
Funciones no compatibles con grupos heredadas Reemplazo compatible con grupos de Windows 7

KeSetTargetProcessorDpc

KeSetTargetProcessorDpcEx

KeSetSystemAffinityThreadEx

KeSetSystemGroupAffinityThread

KeRevertToUserAffinityThreadEx

KeRevertToUserGroupAffinityThread

Para restablecer el equipo a la configuración predeterminada, use el siguiente comando BCDEdit .

bcdedit.exe /set groupaware off