Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c# Environment.ProcessorCount does not always return the full number of Logical Processor, why?

On my machine, windows 7 - Enterprise with 1 x Intel Xeon E5-1660 0 @ 3.30Ghz (6 cores/cpu with Hyper Threading activated), Environment.ProcessorCount return 12 which is exact.

On a Windows Server 2012 with 2 x Intel Xeon E5-2697 v3 @ 2.60GHz (14 cores/cpu with Hyper Threading activated(I think because task manager show: 2 sockets, 28 cores, 56 logical processors)), Environment.ProcessorCount return 28 which appears to us as wrong because 2x14x2 = 56.

Why on Windows Server 2012 c# method Environment.ProcessorCount does not return the proper number of logical processors?

As Additional information, environment variables are as follows: NUMBER_OF_PROCESSORS=28

TaskManager

Update 2015-05-26:

There is a more details/reasons of this related bug in my other question: Unable to use more than one processor group for my threads in a C# app. Mainly I think that C# does only use one processor group. What's werid was that on our server, there was 2 processor groups although there was only 56 logical processors. But this HP CUSTOMER ADVISORY explain why our server bios configuration were inducing windows in error.

like image 806
Eric Ouellet Avatar asked Jan 15 '15 14:01

Eric Ouellet


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr. Stroustroupe.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.

What is C language basics?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.


2 Answers

There may be a hint in the docs:

"If the current machine contains multiple processor groups, this property returns the number of logical processors that are available for use by the common language runtime (CLR)."

Could that be the issue here?

MSDN Article

Found something else interesting:

By default, the pool is restricted to a single processor group (http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx), and thus to 64 cores. However, in .NET 4.5 you can set the Thread_UseAllCpuGroups enabled="true" flag.

MSDN Forum Post

like image 138
Doug Dawson Avatar answered Oct 14 '22 04:10

Doug Dawson


According to the MSDN docs on <Thread_UseAllCpuGroups> you need to set up the following to have all the CPU groups seen and used:

<configuration>
   <runtime>
      <Thread_UseAllCpuGroups enabled="true"/>
      <GCCpuGroup enabled="true"/>
      <gcServer enabled="true"/>
   </runtime>
</configuration>
like image 45
Alastair Maw Avatar answered Oct 14 '22 04:10

Alastair Maw