Environment.ProcessorCount не показывает правильное число, даже когда Thread_UseAllCpuGroups включен - PullRequest
0 голосов
/ 18 октября 2019

У меня есть клиент, на котором установлена ​​система с двумя сверхпоточными 24-ядерными процессорами Xeon Platinum 8160 и 64-разрядной ОС Windows 10 Pro для рабочих станций. Когда он запускает мое приложение, Environment.ProcessorCount сообщает, что в CLR доступно 32 логических процессора. Клиент потратил много денег на эту систему и хочет, чтобы мое приложение использовало все 96 логических процессоров. Нет проблем! Основываясь на документации Microsoft, я установил следующие параметры для своего app.config

  <runtime>
    <Thread_UseAllCpuGroups enabled="true"/>
    <GCCpuGroup enabled="true"/>
    <gcServer enabled="true"/>
  </runtime>

. Это должно позволить CLR и моему приложению получить доступ ко всем логическим процессорам, присутствующим на компьютере клиента. Но, к сожалению, Environment.ProcessorCount по-прежнему сообщает 32 вместо 96. Чего мне не хватает?

Я проверил, что в его системе 2 группы процессоров по 48 логических процессоров в каждой. Два ядра NUMA, которые соответствуют двум физическим сокетам. Поэтому, если бы мне действительно не дали доступ к обеим группам процессоров, я мог бы увидеть Environtment.ProcessorCount, который дает мне результат 48, но я понятия не имею, откуда он получает 32.

Обновление

Я заставил этого клиента запустить приложение SharpTestProcessorThreading Эрика Оуэллета. Это были его результаты:

Результаты клиента SharpTestProcessorThreading

Поэтому остаётся большой вопрос, почему WMI сообщает о 96 глобальных логических процессорах и Environment.LogicalProcessorCount сообщает 48 глобальныхлогические процессоры? Является ли маска нулевого бита процессора на втором узле NUMA проблемой, которая может привести к несоответствию в количестве логических процессоров?

...