【问题标题】:Unable to use all processors in .NET on AWS c5.18xlarge 72 vpu无法在 AWS c5.18xlarge 72 vpu 上使用 .NET 中的所有处理器
【发布时间】:2018-03-09 04:10:52
【问题描述】:

如何在 AWS c5.18xlarge 实例上使用 .net 应用程序中的所有虚拟处理器?目前,该应用程序在 72 个虚拟处理器中占 36 个 (50%)。

在 AWS 上,我启动了一个 c5.18xlarge 实例,宣传有 72 个虚拟处理器。

  • 当我运行 .NET 应用程序时,任务管理器显示最大负载为 50%。
  • 当我查询 Environment.ProcessorCount 时,它返回 36。
  • 当我打开“开始”>“系统信息”>“系统摘要”时,我可以看到“处理器:Intel(R) Xeon(R) Platinum 8124M ... 18 核,36 个逻辑处理器”的 2 个条目。
  • 但是,当我运行 2 个单独的 .net 应用程序时,我实现了 100% 的负载。
  • 最初我认为它可能是默认任务调度程序中的最大值,但即使我显式创建 72 个线程,它仍然会达到 50%。

示例应用1:

Parallel.For(0, 1000, i =>
{
    var w = new Stopwatch();
    w.Start();
    Console.Write("#");
    while (w.ElapsedMilliseconds < 1000);
});

示例 2:

for (var i = 0; i < 72; i++)
{
    new System.Threading.Thread(() =>
    {
        var w = new Stopwatch();
        w.Start();
        Console.Write("#");
        while (w.ElapsedMilliseconds < 5000);
    }).Start();
}

我正在使用 Roslyn / C# 交互。

我找到的最匹配的文章没有帮助..

【问题讨论】:

    标签: c# amazon-ec2 concurrency task-parallel-library


    【解决方案1】:

    想通了..

    要使 .NET 能够使用所有 NUMA 节点,请将以下内容添加到您的 app.config:

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

    现在它以 100% 的速度鸣叫。

    来源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多