【问题标题】:Does .NET Core have a 64 vCPU limit?.NET Core 是否有 64 个 vCPU 限制?
【发布时间】:2020-04-09 18:18:39
【问题描述】:

我有一个 .NET Core 应用程序,它启动了 512 个填充 AI 网络的任务。我正在执行扩展测试,并且我在 Azure 中的 2、4、8、16、32 和 64 处理器机器上运行了基准测试。所有基准测试都使用了机器上 100% 的可用 vCPU。

当我尝试在 M128(128 个 vCPU)上运行测试时,测试以 50% 的 CPU 利用率运行。我检查了环境变量,Environment.ProcessorCount 告诉我只有 64 个处理器(文档说这是虚拟处理器数)。进一步挖掘,我发现每个“处理器组”的架构限制为 64 个 CPU。这台机器显然有 2 个处理器组,每组 64 个。

这是 .NET Core 中的错误还是 .NET Core 仅限于一个处理器组?

【问题讨论】:

标签: .net-core vcpu


【解决方案1】:

根据this 文档,您可以在单个进程中启用超过 64 个逻辑处理器的执行。您需要在 app.config 中设置以下内容:

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

已验证可在带有 AMD EPYC 7713P(总共有 128 个内核)的 Windows 上使用 .net framework 4.8。以前,它只能在 64 个内核上运行;添加配置后即可使用。

接下来,我要解决 IO 瓶颈问题...

【讨论】:

  • 谢谢。我认为真正的答案是“如果您需要超过 64 K 的处理器,则需要将问题分解并与 Kubernetes 一起分发。”
【解决方案2】:

Environment.ProcessorCount 的文档说

如果当前机器包含多个处理器组,则此属性返回可供公共语言运行时 (CLR) 使用的逻辑处理器的数量。

我认为您可能需要运行多个进程(因此需要运行多个 CLR 实例)才能利用第二组。

【讨论】:

  • 我该怎么做?运行另一个 Web 服务实例?
  • @Quarkly,如果线程不需要相互通信,那可能是最好的方法。那时,只使用几个 64 cpu 虚拟机而不是在一个更大的虚拟机上运行 2 个实例可能更有意义。如果它们确实需要以某种方式进行协调,您可能必须编写代码来在进程之间进行协调。
猜你喜欢
  • 2010-09-17
  • 1970-01-01
  • 2023-03-03
  • 2017-02-20
  • 1970-01-01
  • 2021-09-21
  • 2020-10-04
  • 1970-01-01
  • 2019-12-18
相关资源
最近更新 更多