.NET Core 是否有 64 个 vCPU 限制?
Does .NET Core have a 64 vCPU limit?
我有一个 .NET Core 应用程序启动了填充 AI 网络的 512 个任务。我正在执行缩放测试,并且我在 Azure 中的 2、4、8、16、32 和 64 个处理器机器上进行了 运行 基准测试。所有基准测试都使用机器上 100% 的可用 vCPU。
当我在 M128 (128 vCPUs) 上尝试 运行ning 测试时,测试 运行 在 50% CPU 利用率。我检查了环境变量,Environment.ProcessorCount 告诉我只有 64 个处理器(文档说这是虚拟处理器数)。进一步挖掘,我发现每个 'Processor Group' 的架构限制为 64 CPUs。这台机器显然有 2 个处理器组,每个处理器组有 64 个。
这是 .NET Core 中的错误还是 .NET Core 仅限于一个处理器组?
Environment.ProcessorCount
的文档说
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).
我认为您可能需要 运行 多个进程(因此需要多个 CLR 实例)才能利用第二组。
根据 this 文档,您可以在单个进程中启用超过 64 个逻辑处理器的执行。您需要在 app.config 中设置以下内容:
<configuration>
<runtime>
<Thread_UseAllCpuGroups enabled="true"/>
<GCCpuGroup enabled="true"/>
<gcServer enabled="true"/>
</runtime>
</configuration>
已验证在 windows 上使用 .net framework 4.8 和 AMD EPYC 7713P,总共有 128 个内核。以前,在 64 核上只有 运行;添加配置后即可使用。
接下来,我要解决 IO 瓶颈...
我有一个 .NET Core 应用程序启动了填充 AI 网络的 512 个任务。我正在执行缩放测试,并且我在 Azure 中的 2、4、8、16、32 和 64 个处理器机器上进行了 运行 基准测试。所有基准测试都使用机器上 100% 的可用 vCPU。
当我在 M128 (128 vCPUs) 上尝试 运行ning 测试时,测试 运行 在 50% CPU 利用率。我检查了环境变量,Environment.ProcessorCount 告诉我只有 64 个处理器(文档说这是虚拟处理器数)。进一步挖掘,我发现每个 'Processor Group' 的架构限制为 64 CPUs。这台机器显然有 2 个处理器组,每个处理器组有 64 个。
这是 .NET Core 中的错误还是 .NET Core 仅限于一个处理器组?
Environment.ProcessorCount
的文档说
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).
我认为您可能需要 运行 多个进程(因此需要多个 CLR 实例)才能利用第二组。
根据 this 文档,您可以在单个进程中启用超过 64 个逻辑处理器的执行。您需要在 app.config 中设置以下内容:
<configuration>
<runtime>
<Thread_UseAllCpuGroups enabled="true"/>
<GCCpuGroup enabled="true"/>
<gcServer enabled="true"/>
</runtime>
</configuration>
已验证在 windows 上使用 .net framework 4.8 和 AMD EPYC 7713P,总共有 128 个内核。以前,在 64 核上只有 运行;添加配置后即可使用。
接下来,我要解决 IO 瓶颈...