Grupos de procesadores
Las versiones de 64 bits de Windows 7 y Windows Server 2008 R2 y versiones posteriores de Windows admiten más de 64 procesadores lógicos en un solo equipo. Esta funcionalidad no está disponible en versiones de 32 bits de Windows.
Los sistemas con más de un procesador físico o sistemas con procesadores físicos que tienen varios núcleos proporcionan al sistema operativo varios procesadores lógicos. Un procesador lógico es un motor informático lógico desde la perspectiva del sistema operativo, la aplicación o el controlador. Un de núcleo de es una unidad de procesador, que puede constar de uno o varios procesadores lógicos. Un procesador físico puede constar de uno o varios núcleos. Un procesador físico es el mismo que un paquete de procesador, un socket o una CPU.
La compatibilidad con sistemas que tienen más de 64 procesadores lógicos se basa en el concepto de un grupo de procesadores de , que es un conjunto estático de hasta 64 procesadores lógicos que se tratan como una sola entidad de programación. Los grupos de procesadores se numeran a partir de 0. Los sistemas con menos de 64 procesadores lógicos siempre tienen un único grupo, Grupo 0.
Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: no se admiten grupos de procesadores de.
Cuando se inicia el sistema, el sistema operativo crea grupos de procesadores y asigna procesadores lógicos a los grupos. Si el sistema es capaz de agregar procesadores en caliente, el sistema operativo permite espacio en grupos para procesadores que podrían llegar mientras el sistema se está ejecutando. El sistema operativo minimiza el número de grupos de un sistema. Por ejemplo, un sistema con 128 procesadores lógicos tendría dos grupos de procesadores con 64 procesadores en cada grupo, no cuatro grupos con 32 procesadores lógicos en cada grupo.
Para mejorar el rendimiento, el sistema operativo tiene en cuenta la localidad física al asignar procesadores lógicos a grupos. Todos los procesadores lógicos de un núcleo y todos los núcleos de un procesador físico se asignan al mismo grupo, si es posible. Los procesadores físicos que están físicamente cerca entre sí se asignan al mismo grupo. Un nodo NUMA se asigna a un único grupo a menos que la capacidad del nodo supere el tamaño máximo del grupo. Para obtener más información, vea compatibilidad con NUMA.
En sistemas con 64 o menos procesadores, las aplicaciones existentes funcionarán correctamente sin modificaciones. Las aplicaciones que no llaman a ninguna función que usen máscaras de afinidad de procesador o números de procesador funcionarán correctamente en todos los sistemas, independientemente del número de procesadores. Para funcionar correctamente en sistemas con más de 64 procesadores lógicos, es posible que los siguientes tipos de aplicaciones requieran modificaciones:
- Las aplicaciones que administran, mantienen o muestran información por procesador para todo el sistema deben modificarse para admitir más de 64 procesadores lógicos. Un ejemplo de esta aplicación es el Administrador de tareas de Windows, que muestra la carga de trabajo de cada procesador del sistema.
- Las aplicaciones para las que el rendimiento es crítico y que se pueden escalar eficazmente más allá de 64 procesadores lógicos deben modificarse para ejecutarse en dichos sistemas. Por ejemplo, las aplicaciones de base de datos pueden beneficiarse de modificaciones.
- Si una aplicación usa un archivo DLL que tiene estructuras de datos por procesador y el archivo DLL no se ha modificado para admitir más de 64 procesadores lógicos, todos los subprocesos de la aplicación que llaman a funciones exportadas por el archivo DLL deben asignarse al mismo grupo.
De forma predeterminada, una aplicación está restringida a un único grupo, que debe proporcionar una amplia capacidad de procesamiento para la aplicación típica. El sistema operativo asigna inicialmente cada proceso a un único grupo de forma round robin entre los grupos del sistema. Un proceso inicia su ejecución asignada a un grupo. El primer subproceso de un proceso se ejecuta inicialmente en el grupo al que se asigna el proceso. Cada subproceso recién creado se asigna al mismo grupo que el subproceso que lo creó.
Una aplicación que requiere el uso de varios grupos para que pueda ejecutarse en más de 64 procesadores debe determinar explícitamente dónde ejecutar sus subprocesos y es responsable de establecer las afinidades de procesador de los subprocesos en los grupos deseados. La marca INHERIT_PARENT_AFFINITY se puede usar para especificar un proceso primario (que puede ser diferente del proceso actual) desde el que generar la afinidad para un nuevo proceso. Si el proceso se ejecuta en un único grupo, puede leer y modificar su afinidad mediante GetProcessAffinityMask y SetProcessAffinityMask mientras permanece en el mismo grupo; si se modifica la afinidad de proceso, la nueva afinidad se aplica a sus subprocesos.
La afinidad de un subproceso se puede especificar al crear mediante el atributo extendido PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY con la función createRemoteThreadEx. Una vez creado el subproceso, se puede cambiar su afinidad llamando a SetThreadAffinityMask o SetThreadGroupAffinity. Si se asigna un subproceso a un grupo diferente del proceso, la afinidad del proceso se actualiza para incluir la afinidad del subproceso y el proceso se convierte en un proceso de varios grupos. Se deben realizar cambios de afinidad adicionales para subprocesos individuales; No se puede modificar la afinidad de un proceso de varios grupos mediante SetProcessAffinityMask. La funciónGetProcessGroupAffinity recupera el conjunto de grupos a los que se asigna un proceso y sus subprocesos.
Para especificar afinidad para todos los procesos asociados a un objeto de trabajo, use la funciónSetInformationJobObject con la jobObjectGroupInformation o JobObjectGroupInformationEx clase de información.
Un procesador lógico se identifica mediante su número de grupo y su número de procesador relativo al grupo. Esto se representa mediante una estructura de PROCESSOR_NUMBER. Los números de procesador numéricos usados por las funciones heredadas son relativos al grupo.
Para obtener una explicación de los cambios en la arquitectura del sistema operativo para admitir más de 64 procesadores, consulte las notas del producto Sistemas auxiliares que tienen más de 64 procesadores.
Para obtener una lista de las nuevas funciones y estructuras que admiten grupos de procesadores, consulte Novedades de procesos y subprocesos.
Comportamiento a partir de Windows 11 y Windows Server 2022
Nota
A partir de Windows 11 y Windows Server 2022, ya no es el caso de que las aplicaciones estén restringidas de forma predeterminada a un único grupo de procesadores. En su lugar, los procesos y sus subprocesos tienen afinidades de procesador que, de forma predeterminada, abarcan todos los procesadores del sistema, en varios grupos de máquinas con más de 64 procesadores.
Para que las aplicaciones aprovechen automáticamente todos los procesadores de una máquina con más de 64 procesadores, a partir de Windows 11 y Windows Server 2022, el sistema operativo ha cambiado para que los procesos y sus subprocesos abarquen todos los procesadores del sistema, en todos los grupos de procesadores, de forma predeterminada. Esto significa que las aplicaciones ya no necesitan establecer explícitamente las afinidades de sus subprocesos para acceder a varios grupos de procesadores.
Por motivos de compatibilidad, el sistema operativo usa un nuevo concepto de grupo principal para procesos y subprocesos. A cada proceso se le asigna un grupo principal al crearse y, de forma predeterminada, todo el grupo principal de sus subprocesos es el mismo. El procesador ideal de cada subproceso se encuentra en el grupo principal del subproceso, por lo que los subprocesos se programarán preferentemente en los procesadores de su grupo principal, pero pueden estar programados para los procesadores de cualquier otro grupo. Las API de afinidad que no son compatibles con grupos o que operan en un único grupo usan implícitamente el grupo principal como grupo de procesadores de procesos o subprocesos; para obtener más información sobre los nuevos comportamientos, consulte las secciones Comentarios para lo siguiente:
- GetProcessAffinityMask
- SetProcessAffinityMask
- SetThreadAffinityMask
- GetProcessGroupAffinity
- GetThreadGroupAffinity
- SetThreadGroupAffinity
- SetThreadIdealProcessor
- SetThreadIdealProcessorEx
Las aplicaciones pueden usar conjuntos de CPU para administrar eficazmente la afinidad de un proceso o subproceso en varios grupos de procesadores.
Temas relacionados