Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -824,16 +824,30 @@ private static bool TryParseCpuWeightFromFile(IFileSystem fileSystem, FileInfo c
$"Expected to find CPU weight in range [{CpuPodWeightPossibleMin}-{CpuPodWeightPossibleMax}] in '{cpuWeightFile}', but got '{cpuPodWeight}' instead.");
}

// The formula to calculate CPU pod weight (measured in millicores) from CPU share:
// y = (1 + ((x - 2) * 9999) / 262142),
// where y is the CPU pod weight (e.g. cpuPodWeight) and x is the CPU share of cgroup v1 (e.g. cpuUnits).
// https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2254-cgroup-v2#phase-1-convert-from-cgroups-v1-settings-to-v2
// We invert the formula to calculate CPU share from CPU pod weight:
cpuUnits = ((cpuPodWeight - 1) * 262142 / 9999) + 2;

cpuUnits = ConvertCpuWeightToShares(cpuPodWeight);
return true;
}

private static float ConvertCpuWeightToShares(long cpuWeight)
{
const long MinValueInRange = 2;
const long MaxValueInRange = 262144;

// Inversion of https://github.com/kubernetes/website/blob/main/content/en/blog/_posts/2026-01-30-new-cgroup-v1-to-v2-conversion-formula/index.md#new-conversion-formula
// cpu.shares = 2^L
// L = (sqrt(16129 + 2448 * log10(cpu.weight)) - 125) / 2
double a = Math.Log10(cpuWeight);
double b = 2448 * a;
double c = 16129 + b;
double d = Math.Sqrt(c);
double l = (d - 125) / 2;

double shares = Math.Round(Math.Pow(2, l));
shares = Math.Clamp(shares, MinValueInRange, MaxValueInRange);

return (float)shares;
}

private long GetMemoryUsageInBytesPod()
{
using ReturnableBufferWriter<char> bufferWriter = new(_sharedBufferWriterPool);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@ public readonly struct SystemResources
/// This value corresponds to the number of the guaranteed CPUs as described by Kubernetes CPU request parameter. Each 1000 CPU units
/// represent 1 CPU or 1 Core. For example, if the Pod is configured with 1500m units as the CPU request, this property will be assigned
/// to 1.5, which means one and a half CPU will be dedicated for the Pod.
/// For a Pod, this value is calculated based on the <c>cgroupv2</c> weight, using the formula
/// <c>y = (1 + ((x - 2) * 9999) / 262142)</c>, where <c>y</c> is the CPU weight and <c>x</c> is the CPU share (<c>cgroup v1</c>).
/// For more information, see <see href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2254-cgroup-v2#phase-1-convert-from-cgroups-v1-settings-to-v2"/>.
/// For a Pod, this value is calculated based on the <c>cgroupv2</c> weight by converting it back to <c>cgroup v1</c> shares, using the formula
/// <c>L = (sqrt(16129 + 2448 * log10(cpu.weight)) - 125) / 2</c> and <c>cpu.shares = 2^L</c>, where the result is clamped to the range [2, 262144].
/// The final CPU units value is then calculated as <c>cpu.shares / 1024</c>.
/// For more information, see <see href="https://github.com/kubernetes/website/blob/main/content/en/blog/_posts/2026-01-30-new-cgroup-v1-to-v2-conversion-formula/index.md#new-conversion-formula"/>.
/// </remarks>
public double GuaranteedCpuUnits { get; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ public void Adding_Linux_Resource_Utilization_With_Section_Registers_SnapshotPro
{ new FileInfo("/proc/meminfo"), "MemTotal: 102312 kB"},
{ new FileInfo("/sys/fs/cgroup/cpuset.cpus.effective"), "0-1"},
{ new FileInfo("/sys/fs/cgroup/cpu.max"), "20000 100000"},
{ new FileInfo("/sys/fs/cgroup/cpu.weight"), "4"},
{ new FileInfo("/sys/fs/cgroup/cpu.weight"), "17"},
{ new FileInfo("/sys/fs/cgroup/memory.max"), "100000" }
}))
.AddResourceMonitoring(x => x.ConfigureMonitor(section))
Expand Down Expand Up @@ -304,7 +304,7 @@ public Task ResourceUtilizationTracker_And_Metrics_Report_Same_Values_With_Cgrou
{ new FileInfo("/proc/meminfo"), "MemTotal: 1024 kB"},
{ new FileInfo("/sys/fs/cgroup/cpuset.cpus.effective"), "0-19"},
{ new FileInfo("/sys/fs/cgroup/cpu.max"), "40000 10000"},
{ new FileInfo("/sys/fs/cgroup/cpu.weight"), "79"}, // equals to 2046,9 CPU shares (cgroups v1) which is ~2 CPU units (2 * 1024), so have to use Math.Round() in Assertions down below.
{ new FileInfo("/sys/fs/cgroup/cpu.weight"), "173"}, // equals to ~2048 CPU shares (cgroups v1) which is ~2 CPU units (2 * 1024), so have to use Math.Round() in Assertions down below.
});

using var listener = new MeterListener();
Expand Down Expand Up @@ -411,7 +411,7 @@ public Task ResourceUtilizationTracker_And_Metrics_Report_Same_Values_With_Cgrou
{ new FileInfo("/proc/meminfo"), "MemTotal: 1024 kB"},
{ new FileInfo("/sys/fs/cgroup/cpuset.cpus.effective"), "0-19"},
{ new FileInfo("/sys/fs/cgroup/fakeslice/cpu.max"), "40000 10000"},
{ new FileInfo("/sys/fs/cgroup/fakeslice/cpu.weight"), "79"},
{ new FileInfo("/sys/fs/cgroup/fakeslice/cpu.weight"), "86"},
});

using var listener = new MeterListener();
Expand Down Expand Up @@ -461,7 +461,7 @@ public Task ResourceUtilizationTracker_And_Metrics_Report_Same_Values_With_Cgrou
listener.RecordObservableInstruments();

fileSystem.ReplaceFileContent(new FileInfo("/proc/stat"), "cpu 11 10 10 10 10 10 10 10 10 10");
fileSystem.ReplaceFileContent(new FileInfo("/sys/fs/cgroup/fakeslice/cpu.stat"), "usage_usec 1120000\nnr_periods 56");
fileSystem.ReplaceFileContent(new FileInfo("/sys/fs/cgroup/fakeslice/cpu.stat"), "usage_usec 1070000\nnr_periods 56");
fileSystem.ReplaceFileContent(new FileInfo("/sys/fs/cgroup/memory.current"), "524298");
fileSystem.ReplaceFileContent(new FileInfo("/sys/fs/cgroup/memory.stat"), "inactive_file 10");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,10 @@ public void Gets_Available_Cpus_From_CpuSetCpusFromSlices_When_Cpu_Limits_Not_Se
}

[ConditionalTheory]
[InlineData("2500", 64.0)]
[InlineData("10000", 256.0)]
[InlineData("100", 1)]
[InlineData("1", 0.001953125)]
[InlineData("10000", 256)]
[InlineData("102", 1.02539062)]
public void Calculates_Cpu_Request_From_Cpu_WeightInSlices(string content, float result)
{
var f = new HardcodedValueFileSystem(new Dictionary<FileInfo, string>
Expand All @@ -312,7 +314,26 @@ public void Calculates_Cpu_Request_From_Cpu_WeightInSlices(string content, float
});

var p = new LinuxUtilizationParserCgroupV2(f, new FakeUserHz(100));
var r = Math.Round(p.GetCgroupRequestCpuV2());
var r = p.GetCgroupRequestCpuV2();

Assert.Equal(result, r);
}

// Based on https://github.com/kubernetes/website/blob/main/content/en/blog/_posts/2026-01-30-new-cgroup-v1-to-v2-conversion-formula/index.md#new-conversion-formula
[ConditionalTheory]
[InlineData("100", 1)]
[InlineData("1", 0.001953125)]
[InlineData("10000", 256)]
[InlineData("102", 1.02539062)]
public void Calculates_Cpu_Request_From_Cpu_Weight(string content, float result)
{
var f = new HardcodedValueFileSystem(new Dictionary<FileInfo, string>
{
{ new FileInfo("/sys/fs/cgroup/cpu.weight"), content },
});

var p = new LinuxUtilizationParserCgroupV2(f, new FakeUserHz(100));
var r = p.GetCgroupRequestCpu();

Assert.Equal(result, r);
}
Expand Down Expand Up @@ -520,22 +541,6 @@ public Task Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data(string cont
return Verifier.Verify(r).UseParameters(content).UseDirectory(VerifiedDataDirectory);
}

[ConditionalTheory]
[InlineData("2500", 64.0)]
[InlineData("10000", 256.0)]
public void Calculates_Cpu_Request_From_Cpu_Weight(string content, float result)
{
var f = new HardcodedValueFileSystem(new Dictionary<FileInfo, string>
{
{ new FileInfo("/sys/fs/cgroup/cpu.weight"), content },
});

var p = new LinuxUtilizationParserCgroupV2(f, new FakeUserHz(100));
var r = Math.Round(p.GetCgroupRequestCpu());

Assert.Equal(result, r);
}

[ConditionalTheory]
[InlineData("0::/", "filename", "/sys/fs/cgroup/filename")]
[InlineData("0::/filesystem.slice", "filename", "/sys/fs/cgroup/filesystem.slice/filename")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.<GetHostCpuCount>g__ThrowException|35_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass18_0.<Fallsback_To_Cpuset_When_Quota_And_Period_Are_Minus_One_>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Fallsback_To_Cpuset_When_Quota_And_Period_Are_Minus_One_>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupLimitedCpus()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.<Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data>b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
}
Loading
Loading