Группы процессоров
64-разрядные версии Windows 7 и Windows Server 2008 R2 и более поздних версий Windows поддерживают более 64 логических процессоров на одном компьютере. Эта функция недоступна в 32-разрядных версиях Windows.
Системы с несколькими физическими процессорами или системами с физическими процессорами с несколькими ядрами обеспечивают операционную систему несколькими логическими процессорами. Логический процессор — это один логический вычислительный модуль с точки зрения операционной системы, приложения или драйвера. Ядро — это одна единица процессора, которая может состоять из одного или нескольких логических процессоров. Физический процессор может состоять из одного или нескольких ядер. Физический процессор совпадает с пакетом процессора, сокетом или ЦП.
Поддержка систем, имеющих более 64 логических процессоров, основана на концепции группы процессоров, которая является статическим набором до 64 логических процессоров, которые рассматриваются как единая сущность планирования. Группы обработчиков нумеруются начиная с 0. Системы с менее чем 64 логическими процессорами всегда имеют одну группу, группу 0.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: группы обработчиков не поддерживаются.
При запуске системы операционная система создает группы процессоров и назначает логическим процессорам группам. Если система поддерживает горячее добавление процессоров, операционная система разрешает пространство в группах для процессоров, которые могут поступать во время работы системы. Операционная система сводит к минимуму количество групп в системе. Например, система с 128 логическими процессорами будет иметь две группы процессоров с 64 процессорами в каждой группе, а не четыре группы с 32 логическими процессорами в каждой группе.
Для повышения производительности операционная система учитывает физическое локальность при назначении логических процессоров группам. Все логические процессоры в ядре, а все ядра в физическом процессоре назначаются одной группе, если это возможно. Физические процессоры, физически близкие друг к другу, назначаются одной группе. Узел NUMA назначается одной группе, если емкость узла не превышает максимальный размер группы. Дополнительные сведения см. в разделе "Поддержка NUMA".
В системах с 64 или меньшими процессорами существующие приложения будут работать правильно без изменений. Приложения, которые не вызывают какие-либо функции, использующие маски сопоставления процессоров или номера процессора, будут работать правильно во всех системах независимо от количества процессоров. Для правильной работы в системах с более чем 64 логическими процессорами может потребоваться изменение следующих типов приложений:
- Приложения, которые управляют, поддерживают или отображают сведения о каждом процессоре для всей системы, должны быть изменены для поддержки более 64 логических процессоров. Примером такого приложения является диспетчер задач Windows, который отображает рабочую нагрузку каждого процессора в системе.
- Приложения, для которых важна производительность, и которые могут эффективно масштабироваться за пределами 64 логических процессоров, необходимо изменить для запуска в таких системах. Например, приложения базы данных могут воспользоваться изменениями.
- Если приложение использует библиотеку DLL, которая содержит структуры данных для каждого процессора, и библиотека DLL не была изменена для поддержки более 64 логических процессоров, все потоки в приложении, вызывающие функции, экспортированные библиотекой DLL, должны быть назначены одной группе.
По умолчанию приложение ограничено одной группой, которая должна обеспечить достаточно возможностей обработки для типичного приложения. Операционная система изначально назначает каждому процессу одну группу с циклическим перебором между группами в системе. Процесс начинает выполнение, назначенное одной группе. Первый поток процесса изначально выполняется в группе, которой назначается процесс. Каждый только что созданный поток назначается той же группе, что и созданный поток.
Приложение, требующее использования нескольких групп, чтобы оно могли работать на более чем 64 процессорах, должно явно определить, где запускать потоки и отвечать за настройку сопоставлений обработчиков потоков с нужными группами. Флаг INHERIT_PARENT_AFFINITY можно использовать для указания родительского процесса (который может отличаться от текущего процесса), из которого создается сходство для нового процесса. Если процесс выполняется в одной группе, он может считывать и изменять его сходство с помощью GetProcessAffinityMask и SetProcessAffinityMask, оставаясь в той же группе; если сходство процесса изменено, новое сходство применяется к его потокам.
Сходство потока можно указать при создании с помощью расширенного атрибута PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY с функцией CreateRemoteThreadEx. После создания потока его сходство можно изменить, вызвав SetThreadAffinityMask или SetThreadGroupAffinity. Если поток назначается группе, отличной от процесса, сопоставление процесса обновляется, чтобы включить сходство потока, и процесс становится процессом с несколькими группами. Для отдельных потоков необходимо вносить дальнейшие изменения сходства; Сходство процесса с несколькими группами нельзя изменить с помощью SetProcessAffinityMask. Функция GetProcessGroupAffinity извлекает набор групп, которым назначен процесс и его потоки.
Чтобы указать сходство для всех процессов, связанных с объектом задания, используйте функцию SetInformationJobObject с классом JobObjectGroupInformation или JobObjectGroupInformationEx .
Логический процессор определяется его номером группы и его номером относительного процессора группы. Это представлено структурой PROCESSOR_NUМБ ER. Числовые номера процессора, используемые устаревшими функциями, являются относительными к группам.
Обсуждение изменений архитектуры операционной системы для поддержки более 64 процессоров см. в техническом документе , поддерживающем системы, имеющие более 64 процессоров.
Список новых функций и структур, поддерживающих группы обработчиков, см. в статье "Новые возможности процессов и потоков".
Поведение, начиная с Windows 11 и Windows Server 2022
Примечание.
Начиная с Windows 11 и Windows Server 2022, по умолчанию приложения не ограничены одной группой процессоров. Вместо этого процессы и их потоки имеют сходство процессоров, которые по умолчанию охватывают все процессоры в системе между несколькими группами на компьютерах с более чем 64 процессорами.
Чтобы приложения автоматически воспользовались всеми процессорами на компьютере с более чем 64 процессорами, начиная с Windows 11 и Windows Server 2022, ОС изменилась, чтобы сделать процессы и их потоки охватывают все процессоры в системе по умолчанию. Это означает, что приложения больше не должны явно задавать сходство своих потоков, чтобы получить доступ к нескольким группам обработчиков.
По соображениям совместимости ОС использует новую концепцию основной группы как для процессов, так и для потоков. Каждый процесс назначается основной группе при создании, и по умолчанию все его потоки основной группы совпадают. Идеальный процессор каждого потока находится в основной группе потока, поэтому потоки будут предпочтительно запланированы на процессоры в их основной группе, но они могут быть запланированы на процессоры в любой другой группе. API сходства, которые не поддерживают группу или работают с одной группой, неявно используют основную группу в качестве группы обработчиков процессов или потоков; Дополнительные сведения о новых поведении проверка разделах "Примечания" для следующих элементов:
- GetProcessAffinityMask
- SetProcessAffinityMask
- SetThreadAffinityMask
- GetProcessGroupAffinity
- GetThreadGroupAffinity
- SetThreadGroupAffinity
- SetThreadIdealProcessor
- SetThreadIdealProcessorEx
Приложения могут использовать наборы ЦП для эффективного управления сходством процесса или потока над несколькими группами процессоров.
См. также