Поделиться через


Переменная среды %NUMBER_OF_PROCESSORS% может отображать неверные значения

Эта статья помогает устранить проблему, в которой %NUMBER_OF_PROCESSORS% переменная среды может отображать неправильные значения в системах с более чем 64 логическими процессорами.

У вас есть 64-разрядная система Windows с более чем 64 логическими процессорами. При проверке переменной среды вы найдете неправильное %NUMBER_OF_PROCESSORS% значение и меньше общего количества процессоров в системе. Например, система с 72 логическими процессорами имеет две группы процессоров, и каждая группа содержит 36 логических процессоров. Значение %NUMBER_OF_PROCESSORS% равно 36, но, как ожидается, будет 72.

Поддержка систем с более чем 64 логическими процессорами

Логический процессор — это логический вычислительный модуль с точки зрения операционной системы, приложения или драйвера. Поддержка систем с более чем 64 логическими процессорами была добавлена в Windows 7 на основе создания групп процессоров.

Группа процессоров — это набор до 64 логических процессоров, которые рассматриваются как единая сущность планирования операционной системой, и каждый процесс назначается только одной группе процессоров по умолчанию.

Учитывается только текущая группа обработчиков

Переменная %NUMBER_OF_PROCESSORS% среды отражает количество процессоров в назначенной группе процессоров для процесса и наследуется от диспетчера сеансов Windows (smss.exe). До Windows 11 и Windows Server 2022 smss.exe не знала о группе обработчиков. Поведение планировщика по умолчанию — назначение приложений одной группе процессоров. В этом случае учитывается только текущая группа обработчиков.

Только системный процесс назначается многогрупповое сходство при запуске системы. Чтобы использовать полный набор процессоров в системе, все остальные процессы должны назначать потоки другой группе.

Если приложению требуется запускать более 64 процессоров с помощью нескольких групп, необходимо определить, где выполнять потоки. Приложение отвечает за настройку сопоставлений потоков с нужными группами.

Обновление системы до Windows 11 или Windows Server 2022

Вы можете обновить систему до Windows 11 или Windows Server 2022. Начиная с Windows 11 и Windows Server 2022 на компьютерах с более чем 64 процессорами, процессы и их потоки охватывают все процессоры в системе по нескольким группам по умолчанию. Кроме того, начиная с Windows 11 версии 22H2 %NUMBER_OF_PROCESSORS% переменная среды отражает общее количество процессоров в системе, даже если они распределяются по нескольким группам процессоров.

Задание сопоставлений потоков приложения с нужными группами

Если ваша операционная система до Windows 11 или Windows Server 2022, можно задать сходство потоков приложения с нужными группами.

Вы можете указать сходство потока при его создании с помощью расширенного атрибута PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY с функцией CreateRemoteThreadEx . После создания потока можно изменить его сходство, вызвав функцию SetThreadAffinityMask или SetThreadGroupAffinity .

Дополнительные сведения