簡體   English   中英

如何使用 .net 核心在 kubernetes pod 中獲取主機 cpu 核心?

[英]How to get host cpu cores inside kubernetes pod using .net core?

我需要在 kubernetes pod 中獲取主機 cpu 核心,但是Environment.ProcessorCount值是 pod cpu 限制。這怎么做?

就像 java: Java SE 對 Docker CPU 和內存限制的支持

容器中Environment.ProcessorCount的行為因 .NET 版本而異。 它還考慮了處理器親和力。

如果您需要可靠地獲取主機 CPU 內核的數量,您應該使用特定於操作系統的方法。 在 Linux 和其他一些操作系統上,您可以使用sysconf(_SC_NPROCESSORS_CONF)系統調用,它在 .NET 中通過 NuGet 包Mono.PosixMono.Posix.NETStandard或通過原始 PInvoke 可用。

long GetTotalProcessorCount()
{
    var result = Syscall.sysconf(SysconfName._SC_NPROCESSORS_CONF);
    var error = Syscall.GetLastError();
    if (error != 0)
        // due to legacy reasons, all native exceptions in .NET are called "Win32"
        throw new Win32Exception((int)error, $"Error when calling sysconf(_SC_NPROCESSORS_CONF): {error} ({error:D})");
    return result;
}

在 .NET 6 及更高版本中,您可以使Environment.ProcessorCount返回您想要的任何值,因此您可以在運行應用程序之前設置首選值。 這比直接使用系統調用要好得多,因為它不會將特定於平台的代碼引入您的應用程序。 它還會影響依賴於Environment.ProcessorCount的內部運行時和庫代碼。 要設置主機 CPU 內核的實際(虛擬)數量,請使用:

export DOTNET_PROCESSOR_COUNT=$(nproc --all)
dotnet ...

您可以從這些問題中了解更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM