2015-01-15 2 views
5

На моей машине Windows 7 - Enterprise с 1 x Intel Xeon E5-1660 0 @ 3,30Ghz (6 ядер/процессор с активированной поддержкой Hyper Threading), то есть Environment.ProcessorCount return 12.C# Environment.ProcessorCount не всегда возвращает полное количество логических процессоров, почему?

На Windows Server 2012 с 2 x Intel Xeon E5-2697 v3 @ 2.60GHz (активировано 14 ядер/процессор с поддержкой Hyper Threading (я думаю, потому что диспетчер задач показывает: 2 сокета, 28 ядер, 56 логических процессоров)), Environment.ProcessorCount return 28, который кажется нам неправильным, потому что 2x14x2 = 56.

Почему в Windows Server 2012 C# метод Environment.ProcessorCount не возвращает правильное количество логических процессоров?

В качестве дополнительной информации, переменные среды следующим образом: NUMBER_OF_PROCESSORS = 28

TaskManager

Update 2015-05-26:

Существует более деталей/причин это связано ошибка в моем другом вопросе: Unable to use more than one processor group for my threads in a C# app. В основном я думаю, что C# использует только одну группу процессоров. То, что было на нашем сервере, было 2 группы процессоров, хотя было всего 56 логических процессоров. Но это HP CUSTOMER ADVISORY объясняет, почему наша конфигурация BIOS сервера вызывала ошибки Windows.

+0

Я удивлен, что 'Environment.PermissionAccess' дает вам никакой информации о процессоре :-) I даже не может его документировать. –

+0

Извините, я редактировал заголовок вопроса ... Я использовал неправильное имя метода. Прости. Спасибо за информацию. –

ответ

4

Там может быть намек на документах:

«Если текущая машина содержит несколько групп процессоров, это свойство возвращает число логических процессоров , которые доступны для использования общеязыковой среды выполнения (CLR) «.

Это может быть проблема здесь?

MSDN Article

Найдено что-то еще интересно:

По умолчанию пул ограничивается одной группы процессоров (http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx), и, таким образом, 64 ядер. Однако в .NET 4.5 вы можете установить флаг Thread_UseAllCpuGroups enabled = "true".

MSDN Forum Post

+0

Да, это может быть ... но это то, что я ищу. Объяснение, почему доступное количество меньше полной суммы? ... Проблема с лицензией, настройка Windows, нормальное поведение Windows ??? –

+0

Интересно, не отличается ли CLR по умолчанию или не способен набрать второй физический процессор? Я не эксперт в этой области, но мне действительно интересно. – user2366842

+0

@ user2366842, я согласен, интересно, если это так (я думал, что это может быть), я понятия не имею, я искал без успеха причину почему? –

0

Проверьте систему NUMBER_OF_PROCESSORS переменной окружения. Это то, что возвращает метод. См. Статью MSDN: http://msdn.microsoft.com/en-us/library/system.environment.processorcount%28v=vs.100%29.aspx (раздел разрешений).

+0

Я знаю, но это не значит, что у меня есть только половина. Мне нужна документация, в которой говорится, почему у меня только половина ее. Если это действительно потому, что Environment.ProcessorCount не учитывает второй процессор, я буду использовать это. Но если я вижу только половину из них из-за установки Windows Server, было бы нецелесообразно умножать число процессоров. –

+0

Для вашей информации ваша ссылка на версию 4 рамки. В версии 4.5 информация об переменной окружения была удалена и по одной веской причине: это неверно. Я изменил переменную окружения и запустил приложение и по-прежнему вижу только половину логических процессоров (все в одной среде - то же самое, что и cmd prompt). Но спасибо за попытку. –

2

Согласно the MSDN docs on <Thread_UseAllCpuGroups> вам необходимо установить следующее, чтобы все группы CPU видели и использовали:

<configuration> 
    <runtime> 
     <Thread_UseAllCpuGroups enabled="true"/> 
     <GCCpuGroup enabled="true"/> 
     <gcServer enabled="true"/> 
    </runtime> 
</configuration> 
+2

Спасибо, ты прав. Но я уже это сделал. Я добавил обновление к моему вопросу, потому что получил много отзывов от HP по поводу этой проблемы (добавлен в другой вопрос StackOverflow) –