Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的.Net应用程序只使用单个NUMA节点?_C#_.net_Multithreading_Numa - Fatal编程技术网

C# 为什么我的.Net应用程序只使用单个NUMA节点?

C# 为什么我的.Net应用程序只使用单个NUMA节点?,c#,.net,multithreading,numa,C#,.net,Multithreading,Numa,我有一个服务器,有2个NUMA节点,每个节点有16个CPU。我可以在TaskManager中看到所有32个CPU,前2行中的前16个(NUMA节点1)和后2行中的下16个(NUMA节点2) 在我的应用程序中,我使用Thread.Start()启动了64个线程。当我运行应用程序时,它是CPU密集型的,只有前16个CPU忙,其他16个CPU空闲 为什么??我经常使用Interlocked.Increment()。这可能是一个原因吗? 有没有办法在特定NUMA节点上启动线程?您是否已将垃圾收集器设置为

我有一个服务器,有2个NUMA节点,每个节点有16个CPU。我可以在TaskManager中看到所有32个CPU,前2行中的前16个(NUMA节点1)和后2行中的下16个(NUMA节点2)

在我的应用程序中,我使用
Thread.Start()
启动了64个线程。当我运行应用程序时,它是CPU密集型的,只有前16个CPU忙,其他16个CPU空闲

为什么??我经常使用
Interlocked.Increment()
。这可能是一个原因吗?
有没有办法在特定NUMA节点上启动线程?

您是否已将垃圾收集器设置为服务器版本

在app.config中,尝试:

<configuration
   <runtime>
      <gcServer enabled="true"/>
   </runtime>
</configuration>

除了
gcserver
之外,我们应该启用,因此配置应该更像:

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

首先要检查的确实是
app.config
确保设置了必要的选项:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <gcServer enabled="true" />
        <Thread_UseAllCpuGroups enabled="true" />
        <GCCpuGroup enabled="true" />
    </runtime>
    <startup> 
        <!-- 4.5 and later should work, use the one targeted -->
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>       
    </startup>
</configuration>

如果
app.config
-Wizadry没有帮助,则很可能是您的计算机在不应该使用多个内核组(Kgroups)时使用了多个内核组。然后,如果您有Gen9 HP,您可以检查BIOS中的
NUMA组大小优化。如果处于群集模式,当前CLR(2017.net 4.6.2)仅使用第一个模式。如果该机器中的内核不超过64个,则应该能够选择将所有内核放在同一组中的
平面布局。如果你找不到它


有关更多详细信息,请参见此处的StackOverflow。它甚至有自己的功能。

此设置不会改变行为。