[英]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.Posix或Mono.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.