diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/ILinuxUtilizationParser.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/ILinuxUtilizationParser.cs
index 7aca57aeb2b..560715b96d2 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/ILinuxUtilizationParser.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/ILinuxUtilizationParser.cs
@@ -23,6 +23,13 @@ internal interface ILinuxUtilizationParser
/// nanoseconds.
long GetCgroupCpuUsageInNanoseconds();
+ ///
+ /// For CgroupV2 only and experimental. Reads the file cpu.stat based on /proc/self/cgroup, which is part of the cgroup v2 CPU controller.
+ /// It provides statistics about the CPU usage of a cgroup from its actual slice.
+ ///
+ /// nanoseconds.
+ long GetCgroupCpuUsageInNanosecondsV2();
+
///
/// Reads the file /sys/fs/cgroup/cpu.max, which is part of the cgroup v2 CPU controller.
/// It is used to set the maximum amount of CPU time that can be used by a cgroup.
@@ -33,6 +40,16 @@ internal interface ILinuxUtilizationParser
/// cpuUnits.
float GetCgroupLimitedCpus();
+ ///
+ /// For CgroupV2 only and experimental. Reads the file cpu.max based on /proc/self/cgroup, which is part of the cgroup v2 CPU controller.
+ /// It is used to set the maximum amount of CPU time that can be used by a cgroup from actual slice.
+ /// The file contains two fields, separated by a space.
+ /// The first field is the quota, which specifies the maximum amount of CPU time (in microseconds) that can be used by the cgroup during one period.
+ /// The second value is the period, which specifies the length of a period in microseconds.
+ ///
+ /// cpuUnits.
+ float GetCgroupLimitV2();
+
///
/// Reads the file /proc/stat, which provides information about the system’s memory usage.
/// It contains information about the total amount of installed memory, the amount of free and used memory, and the amount of memory used by the kernel and buffers/cache.
@@ -66,4 +83,10 @@ internal interface ILinuxUtilizationParser
///
/// cpuPodRequest.
float GetCgroupRequestCpu();
+
+ ///
+ /// For CgroupV2 only and experimental. Reads the file cpu.weight based on /proc/self/cgroup. And calculates the Pod CPU Request in millicores based on actual slice.
+ ///
+ /// cpuPodRequest.
+ float GetCgroupRequestCpuV2();
}
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV1.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV1.cs
index 07d39e70178..03510a7a21c 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV1.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV1.cs
@@ -94,6 +94,10 @@ public LinuxUtilizationParserCgroupV1(IFileSystem fileSystem, IUserHz userHz)
_userHz = userHz.Value;
}
+ public float GetCgroupLimitV2() => throw new NotSupportedException();
+ public float GetCgroupRequestCpuV2() => throw new NotSupportedException();
+ public long GetCgroupCpuUsageInNanosecondsV2() => throw new NotSupportedException();
+
public long GetCgroupCpuUsageInNanoseconds()
{
using ReturnableBufferWriter bufferWriter = new(_sharedBufferWriterPool);
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV2.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV2.cs
index 98a8d0d7dbc..32ebd0cb38c 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV2.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationParserCgroupV2.cs
@@ -21,6 +21,9 @@ internal sealed class LinuxUtilizationParserCgroupV2 : ILinuxUtilizationParser
{
private const int Thousand = 1000;
private const int CpuShares = 1024;
+ private const string CpuStat = "cpu.stat"; // File containing CPU usage in nanoseconds.
+ private const string CpuLimit = "cpu.max"; // File with amount of CPU time available to the group along with the accounting period in microseconds.
+ private const string CpuRequest = "cpu.weight"; // CPU weights, also known as shares in cgroup v1, is used for resource allocation.
private static readonly ObjectPool> _sharedBufferWriterPool = BufferWriterPool.CreateBufferWriterPool();
///
@@ -86,47 +89,76 @@ internal sealed class LinuxUtilizationParserCgroupV2 : ILinuxUtilizationParser
///
private static readonly FileInfo _cpuPodWeight = new("/sys/fs/cgroup/cpu.weight");
+ private static readonly FileInfo _cpuCgroupInfoFile = new("/proc/self/cgroup");
+
private readonly IFileSystem _fileSystem;
private readonly long _userHz;
+ // Cache for the trimmed path string to avoid repeated file reads and processing
+ private string? _cachedCgroupPath;
+
public LinuxUtilizationParserCgroupV2(IFileSystem fileSystem, IUserHz userHz)
{
_fileSystem = fileSystem;
_userHz = userHz.Value;
}
- public long GetCgroupCpuUsageInNanoseconds()
+ public string GetCgroupPath(string filename)
{
- // The value we are interested in starts with this. We just want to make sure it is true.
- const string Usage_usec = "usage_usec";
-
- // If the file doesn't exist, we assume that the system is a Host and we read the CPU usage from /proc/stat.
- if (!_fileSystem.Exists(_cpuacctUsage))
+ // If we've already parsed the path, use the cached value
+ if (_cachedCgroupPath != null)
{
- return GetHostCpuUsageInNanoseconds();
+ return $"{_cachedCgroupPath}{filename}";
}
using ReturnableBufferWriter bufferWriter = new(_sharedBufferWriterPool);
- _fileSystem.ReadAll(_cpuacctUsage, bufferWriter.Buffer);
- ReadOnlySpan usage = bufferWriter.Buffer.WrittenSpan;
- if (!usage.StartsWith(Usage_usec))
+ // Read the content of the file
+ _fileSystem.ReadFirstLine(_cpuCgroupInfoFile, bufferWriter.Buffer);
+ ReadOnlySpan fileContent = bufferWriter.Buffer.WrittenSpan;
+
+ // Ensure the file content is not empty
+ if (fileContent.IsEmpty)
{
- Throw.InvalidOperationException($"Could not parse '{_cpuacctUsage}'. We expected first line of the file to start with '{Usage_usec}' but it was '{new string(usage)}' instead.");
+ Throw.InvalidOperationException($"The file '{_cpuCgroupInfoFile}' is empty or could not be read.");
}
- ReadOnlySpan cpuUsage = usage.Slice(Usage_usec.Length, usage.Length - Usage_usec.Length);
+ // Find the index of the first colon (:)
+ int colonIndex = fileContent.LastIndexOf(':');
+ if (colonIndex == -1 || colonIndex + 1 >= fileContent.Length)
+ {
+ Throw.InvalidOperationException($"Invalid format in file '{_cpuCgroupInfoFile}'. Expected content with ':' separator.");
+ }
- int next = GetNextNumber(cpuUsage, out long microseconds);
+ // Extract the part after the last colon and cache it for future use
+ ReadOnlySpan trimmedPath = fileContent.Slice(colonIndex + 1);
+ _cachedCgroupPath = "/sys/fs/cgroup" + trimmedPath.ToString().TrimEnd('/') + "/";
- if (microseconds == -1)
+ return $"{_cachedCgroupPath}{filename}";
+ }
+
+ public long GetCgroupCpuUsageInNanoseconds()
+ {
+ // If the file doesn't exist, we assume that the system is a Host and we read the CPU usage from /proc/stat.
+ if (!_fileSystem.Exists(_cpuacctUsage))
{
- Throw.InvalidOperationException($"Could not get cpu usage from '{_cpuacctUsage}'. Expected positive number, but got '{new string(usage)}'.");
+ return GetHostCpuUsageInNanoseconds();
}
- // In cgroup v2, the Units are microseconds for usage_usec.
- // We multiply by 1000 to convert to nanoseconds to keep the common calculation logic.
- return microseconds * Thousand;
+ return ParseCpuUsageFromFile(_fileSystem, _cpuacctUsage);
+ }
+
+ public long GetCgroupCpuUsageInNanosecondsV2()
+ {
+ FileInfo cpuUsageFile = new(GetCgroupPath(CpuStat));
+
+ // If the file doesn't exist, we assume that the system is a Host and we read the CPU usage from /proc/stat.
+ if (!_fileSystem.Exists(cpuUsageFile))
+ {
+ return GetHostCpuUsageInNanoseconds();
+ }
+
+ return ParseCpuUsageFromFile(_fileSystem, cpuUsageFile);
}
public long GetHostCpuUsageInNanoseconds()
@@ -184,6 +216,22 @@ public float GetCgroupLimitedCpus()
return GetHostCpuCount();
}
+ ///
+ /// When CGroup limits are set, we can calculate number of cores based on the file settings.
+ /// It should be 99% of the cases when app is hosted in the container environment.
+ /// Otherwise, we assume that all host's CPUs are available, which we read from proc/stat file.
+ ///
+ public float GetCgroupLimitV2()
+ {
+ FileInfo cpuLimitsFile = new(GetCgroupPath(CpuLimit));
+ if (LinuxUtilizationParserCgroupV2.TryGetCpuLimitFromCgroupsV2(_fileSystem, cpuLimitsFile, out float cpus))
+ {
+ return cpus;
+ }
+
+ return GetHostCpuCount();
+ }
+
///
/// If we are able to read the CPU share, we calculate the CPU request based on the weight by dividing it by 1024.
/// If we can't read the CPU weight, we assume that the pod/vm cpu request is 1 core by default.
@@ -198,6 +246,21 @@ public float GetCgroupRequestCpu()
return GetHostCpuCount();
}
+ ///
+ /// If we are able to read the CPU share, we calculate the CPU request based on the weight by dividing it by 1024.
+ /// If we can't read the CPU weight, we assume that the pod/vm cpu request is 1 core by default.
+ ///
+ public float GetCgroupRequestCpuV2()
+ {
+ FileInfo cpuRequestsFile = new(GetCgroupPath(CpuRequest));
+ if (TryGetCgroupRequestCpuV2(_fileSystem, cpuRequestsFile, out float cpuPodRequest))
+ {
+ return cpuPodRequest / CpuShares;
+ }
+
+ return GetHostCpuCount();
+ }
+
///
/// If the file doesn't exist, we assume that the system is a Host and we read the memory from /proc/meminfo.
///
@@ -447,6 +510,34 @@ static void ThrowException(ReadOnlySpan content) =>
$"Could not parse '{_cpuSetCpus}'. Expected comma-separated list of integers, with dashes (\"-\") based ranges (\"0\", \"2-6,12\") but got '{new string(content)}'.");
}
+ private static long ParseCpuUsageFromFile(IFileSystem fileSystem, FileInfo cpuUsageFile)
+ {
+ // The value we are interested in starts with this. We just want to make sure it is true.
+ const string Usage_usec = "usage_usec";
+
+ using ReturnableBufferWriter bufferWriter = new(_sharedBufferWriterPool);
+ fileSystem.ReadAll(cpuUsageFile, bufferWriter.Buffer);
+ ReadOnlySpan usage = bufferWriter.Buffer.WrittenSpan;
+
+ if (!usage.StartsWith(Usage_usec))
+ {
+ Throw.InvalidOperationException($"Could not parse '{cpuUsageFile}'. We expected first line of the file to start with '{Usage_usec}' but it was '{new string(usage)}' instead.");
+ }
+
+ ReadOnlySpan cpuUsage = usage.Slice(Usage_usec.Length, usage.Length - Usage_usec.Length);
+
+ int next = GetNextNumber(cpuUsage, out long microseconds);
+
+ if (microseconds == -1)
+ {
+ Throw.InvalidOperationException($"Could not get cpu usage from '{cpuUsageFile}'. Expected positive number, but got '{new string(usage)}'.");
+ }
+
+ // In cgroup v2, the Units are microseconds for usage_usec.
+ // We multiply by 1000 to convert to nanoseconds to keep the common calculation logic.
+ return microseconds * Thousand;
+ }
+
///
/// The input must contain only number. If there is something more than whitespace before the number, it will return failure (-1).
///
@@ -492,8 +583,27 @@ private static bool TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, out float
return false;
}
+ return TryParseCpuQuotaAndPeriodFromFile(fileSystem, _cpuCfsQuaotaPeriodUs, out cpuUnits);
+ }
+
+ ///
+ /// If the file doesn't exist, we assume that the system is a Host and we read the CPU usage from /proc/stat.
+ ///
+ private static bool TryGetCpuLimitFromCgroupsV2(IFileSystem fileSystem, FileInfo cpuLimitsFile, out float cpuUnits)
+ {
+ if (!fileSystem.Exists(cpuLimitsFile))
+ {
+ cpuUnits = 0;
+ return false;
+ }
+
+ return TryParseCpuQuotaAndPeriodFromFile(fileSystem, cpuLimitsFile, out cpuUnits);
+ }
+
+ private static bool TryParseCpuQuotaAndPeriodFromFile(IFileSystem fileSystem, FileInfo cpuLimitsFile, out float cpuUnits)
+ {
using ReturnableBufferWriter bufferWriter = new(_sharedBufferWriterPool);
- fileSystem.ReadFirstLine(_cpuCfsQuaotaPeriodUs, bufferWriter.Buffer);
+ fileSystem.ReadFirstLine(cpuLimitsFile, bufferWriter.Buffer);
ReadOnlySpan quotaBuffer = bufferWriter.Buffer.WrittenSpan;
@@ -513,7 +623,7 @@ private static bool TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, out float
if (quota == -1)
{
- Throw.InvalidOperationException($"Could not parse '{_cpuCfsQuaotaPeriodUs}'. Expected an integer but got: '{new string(quotaBuffer)}'.");
+ Throw.InvalidOperationException($"Could not parse '{cpuLimitsFile}'. Expected an integer but got: '{new string(quotaBuffer)}'.");
}
string quotaString = quota.ToString(CultureInfo.CurrentCulture);
@@ -523,7 +633,7 @@ private static bool TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, out float
if (period == -1)
{
- Throw.InvalidOperationException($"Could not parse '{_cpuCfsQuaotaPeriodUs}'. Expected to get an integer but got: '{new string(cpuPeriodSlice)}'.");
+ Throw.InvalidOperationException($"Could not parse '{cpuLimitsFile}'. Expected to get an integer but got: '{new string(cpuPeriodSlice)}'.");
}
cpuUnits = (float)quota / period;
@@ -533,23 +643,39 @@ private static bool TryGetCpuUnitsFromCgroups(IFileSystem fileSystem, out float
private static bool TryGetCgroupRequestCpu(IFileSystem fileSystem, out float cpuUnits)
{
- const long CpuPodWeightPossibleMax = 10_000;
- const long CpuPodWeightPossibleMin = 1;
-
if (!fileSystem.Exists(_cpuPodWeight))
{
cpuUnits = 0;
return false;
}
+ return TryParseCpuWeightFromFile(fileSystem, _cpuPodWeight, out cpuUnits);
+ }
+
+ private static bool TryGetCgroupRequestCpuV2(IFileSystem fileSystem, FileInfo cpuRequestsFile, out float cpuUnits)
+ {
+ if (!fileSystem.Exists(cpuRequestsFile))
+ {
+ cpuUnits = 0;
+ return false;
+ }
+
+ return TryParseCpuWeightFromFile(fileSystem, cpuRequestsFile, out cpuUnits);
+ }
+
+ private static bool TryParseCpuWeightFromFile(IFileSystem fileSystem, FileInfo cpuWeightFile, out float cpuUnits)
+ {
+ const long CpuPodWeightPossibleMax = 10_000;
+ const long CpuPodWeightPossibleMin = 1;
+
using ReturnableBufferWriter bufferWriter = new(_sharedBufferWriterPool);
- fileSystem.ReadFirstLine(_cpuPodWeight, bufferWriter.Buffer);
+ fileSystem.ReadFirstLine(cpuWeightFile, bufferWriter.Buffer);
ReadOnlySpan cpuPodWeightBuffer = bufferWriter.Buffer.WrittenSpan;
if (cpuPodWeightBuffer.IsEmpty || (cpuPodWeightBuffer.Length == 2 && cpuPodWeightBuffer[0] == '-' && cpuPodWeightBuffer[1] == '1'))
{
Throw.InvalidOperationException(
- $"Could not parse '{_cpuPodWeight}' content. Expected to find CPU weight but got '{new string(cpuPodWeightBuffer)}' instead.");
+ $"Could not parse '{cpuWeightFile}' content. Expected to find CPU weight but got '{new string(cpuPodWeightBuffer)}' instead.");
}
_ = GetNextNumber(cpuPodWeightBuffer, out long cpuPodWeight);
@@ -557,13 +683,13 @@ private static bool TryGetCgroupRequestCpu(IFileSystem fileSystem, out float cpu
if (cpuPodWeight == -1)
{
Throw.InvalidOperationException(
- $"Could not parse '{_cpuPodWeight}' content. Expected to get an integer but got: '{cpuPodWeightBuffer}'.");
+ $"Could not parse '{cpuWeightFile}' content. Expected to get an integer but got: '{cpuPodWeightBuffer}'.");
}
if (cpuPodWeight < CpuPodWeightPossibleMin || cpuPodWeight > CpuPodWeightPossibleMax)
{
Throw.ArgumentOutOfRangeException("CPU weight",
- $"Expected to find CPU weight in range [{CpuPodWeightPossibleMin}-{CpuPodWeightPossibleMax}] in '{_cpuPodWeight}', but got '{cpuPodWeight}' instead.");
+ $"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:
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationProvider.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationProvider.cs
index 7fc5947aa36..0df5425aae0 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationProvider.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/LinuxUtilizationProvider.cs
@@ -30,11 +30,14 @@ internal sealed class LinuxUtilizationProvider : ISnapshotProvider
private DateTimeOffset _refreshAfterCpu;
private DateTimeOffset _refreshAfterMemory;
+ // Track the actual timestamp when we read CPU values
+ private DateTimeOffset _lastCpuMeasurementTime;
+
private double _cpuPercentage = double.NaN;
+ private double _lastCpuCoresUsed = double.NaN;
private double _memoryPercentage;
private long _previousCgroupCpuTime;
private long _previousHostCpuTime;
-
public SystemResources Resources { get; }
public LinuxUtilizationProvider(IOptions options, ILinuxUtilizationParser parser,
@@ -51,6 +54,7 @@ public LinuxUtilizationProvider(IOptions options, ILi
_memoryLimit = _parser.GetAvailableMemoryInBytes();
_previousHostCpuTime = _parser.GetHostCpuUsageInNanoseconds();
_previousCgroupCpuTime = _parser.GetCgroupCpuUsageInNanoseconds();
+ _lastCpuMeasurementTime = now;
float hostCpus = _parser.GetHostCpuCount();
float cpuLimit = _parser.GetCgroupLimitedCpus();
@@ -66,10 +70,23 @@ public LinuxUtilizationProvider(IOptions options, ILi
var meter = meterFactory.Create(ResourceUtilizationInstruments.MeterName);
#pragma warning restore CA2000 // Dispose objects before losing scope
- _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerCpuLimitUtilization, observeValue: () => CpuUtilization() * _scaleRelativeToCpuLimit, unit: "1");
- _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerMemoryLimitUtilization, observeValue: MemoryUtilization, unit: "1");
- _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerCpuRequestUtilization, observeValue: () => CpuUtilization() * _scaleRelativeToCpuRequest, unit: "1");
+ if (options.Value.CalculateCpuUsageWithoutHostDelta)
+ {
+ _previousCgroupCpuTime = _parser.GetCgroupCpuUsageInNanosecondsV2();
+ cpuLimit = _parser.GetCgroupLimitV2();
+
+ // Try to get the CPU request from cgroup
+ cpuRequest = _parser.GetCgroupRequestCpuV2();
+ _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerCpuLimitUtilization, observeValue: () => CpuUtilizationWithoutHostDelta() / cpuLimit, unit: "1");
+ _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerCpuRequestUtilization, observeValue: () => CpuUtilizationWithoutHostDelta() / cpuRequest, unit: "1");
+ }
+ else
+ {
+ _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerCpuLimitUtilization, observeValue: () => CpuUtilization() * _scaleRelativeToCpuLimit, unit: "1");
+ _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerCpuRequestUtilization, observeValue: () => CpuUtilization() * _scaleRelativeToCpuRequest, unit: "1");
+ }
+ _ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ContainerMemoryLimitUtilization, observeValue: MemoryUtilization, unit: "1");
_ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ProcessCpuUtilization, observeValue: () => CpuUtilization() * _scaleRelativeToCpuRequest, unit: "1");
_ = meter.CreateObservableGauge(name: ResourceUtilizationInstruments.ProcessMemoryUtilization, observeValue: MemoryUtilization, unit: "1");
@@ -81,6 +98,46 @@ public LinuxUtilizationProvider(IOptions options, ILi
Log.SystemResourcesInfo(_logger, cpuLimit, cpuRequest, _memoryLimit, _memoryLimit);
}
+ public double CpuUtilizationWithoutHostDelta()
+ {
+ DateTimeOffset now = _timeProvider.GetUtcNow();
+ double actualElapsedNanoseconds = (now - _lastCpuMeasurementTime).TotalNanoseconds;
+
+ lock (_cpuLocker)
+ {
+ if (now < _refreshAfterCpu)
+ {
+ return _lastCpuCoresUsed;
+ }
+ }
+
+ long cgroupCpuTime = _parser.GetCgroupCpuUsageInNanosecondsV2();
+
+ lock (_cpuLocker)
+ {
+ if (now >= _refreshAfterCpu)
+ {
+ long deltaCgroup = cgroupCpuTime - _previousCgroupCpuTime;
+
+ if (deltaCgroup > 0)
+ {
+ double coresUsed = deltaCgroup / actualElapsedNanoseconds;
+
+ Log.CpuUsageDataV2(_logger, cgroupCpuTime, _previousCgroupCpuTime, actualElapsedNanoseconds, coresUsed);
+
+ _lastCpuCoresUsed = coresUsed;
+ _refreshAfterCpu = now.Add(_cpuRefreshInterval);
+ _previousCgroupCpuTime = cgroupCpuTime;
+
+ // Update the timestamp for next calculation
+ _lastCpuMeasurementTime = now;
+ }
+ }
+ }
+
+ return _lastCpuCoresUsed;
+ }
+
public double CpuUtilization()
{
DateTimeOffset now = _timeProvider.GetUtcNow();
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/Log.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/Log.cs
index e9bc98ddf6c..1b859d6d493 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/Log.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/Linux/Log.cs
@@ -33,4 +33,15 @@ public static partial void MemoryUsageData(
[LoggerMessage(3, LogLevel.Debug,
"System resources information: CpuLimit = {cpuLimit}, CpuRequest = {cpuRequest}, MemoryLimit = {memoryLimit}, MemoryRequest = {memoryRequest}.")]
public static partial void SystemResourcesInfo(ILogger logger, double cpuLimit, double cpuRequest, ulong memoryLimit, ulong memoryRequest);
+
+ [LoggerMessage(4, LogLevel.Debug,
+#pragma warning disable S103 // Lines should not be too long
+ "For CgroupV2, Computed CPU usage with CgroupCpuTime = {cgroupCpuTime}, PreviousCgroupCpuTime = {previousCgroupCpuTime}, ActualElapsedNanoseconds = {actualElapsedNanoseconds}, CpuCores = {cpuCores}.")]
+#pragma warning restore S103 // Lines should not be too long
+ public static partial void CpuUsageDataV2(
+ ILogger logger,
+ long cgroupCpuTime,
+ long previousCgroupCpuTime,
+ double actualElapsedNanoseconds,
+ double cpuCores);
}
diff --git a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceMonitoringOptions.cs b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceMonitoringOptions.cs
index b15f9fe3499..ca9ed64a79a 100644
--- a/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceMonitoringOptions.cs
+++ b/src/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring/ResourceMonitoringOptions.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
+using System.Diagnostics.CodeAnalysis;
using Microsoft.Shared.Data.Validation;
using Microsoft.Shared.DiagnosticIds;
@@ -97,4 +98,13 @@ public partial class ResourceMonitoringOptions
UrlFormat = DiagnosticIds.UrlFormat)]
[TimeSpan(MinimumCachingInterval, MaximumCachingInterval)]
public TimeSpan MemoryConsumptionRefreshInterval { get; set; } = DefaultRefreshInterval;
+
+ ///
+ /// Gets or sets a value indicating whether CPU metrics are calculated via cgroup CPU limits instead of Host CPU delta.
+ ///
+ ///
+ /// The default value is .
+ ///
+ [Experimental(diagnosticId: DiagnosticIds.Experiments.ResourceMonitoring, UrlFormat = DiagnosticIds.UrlFormat)]
+ public bool CalculateCpuUsageWithoutHostDelta { get; set; }
}
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/AcceptanceTest.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/AcceptanceTest.cs
index c786ec416a0..dc48bb381f1 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/AcceptanceTest.cs
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/AcceptanceTest.cs
@@ -359,6 +359,82 @@ public Task ResourceUtilizationTracker_And_Metrics_Report_Same_Values_With_Cgrou
return Task.CompletedTask;
}
+ [ConditionalFact]
+ [CombinatorialData]
+ [OSSkipCondition(OperatingSystems.Windows | OperatingSystems.MacOSX, SkipReason = "Linux specific tests")]
+ public Task ResourceUtilizationTracker_And_Metrics_Report_Same_Values_With_Cgroupsv2_v2()
+ {
+ var cpuRefresh = TimeSpan.FromMinutes(13);
+ var memoryRefresh = TimeSpan.FromMinutes(14);
+ var fileSystem = new HardcodedValueFileSystem(new Dictionary
+ {
+ { new FileInfo("/proc/self/cgroup"), "0::/fakeslice"},
+ { new FileInfo("/proc/stat"), "cpu 10 10 10 10 10 10 10 10 10 10"},
+ { new FileInfo("/sys/fs/cgroup/fakeslice/cpu.stat"), "usage_usec 102000000"},
+ { new FileInfo("/sys/fs/cgroup/memory.max"), "1048576" },
+ { 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"},
+ });
+
+ using var listener = new MeterListener();
+ var clock = new FakeTimeProvider(DateTimeOffset.UtcNow);
+ var cpuFromGauge = 0.0d;
+ var cpuLimitFromGauge = 0.0d;
+ var cpuRequestFromGauge = 0.0d;
+ var memoryFromGauge = 0.0d;
+ var memoryLimitFromGauge = 0.0d;
+ using var e = new ManualResetEventSlim();
+
+ object? meterScope = null;
+ listener.InstrumentPublished = (Instrument instrument, MeterListener meterListener)
+ => OnInstrumentPublished(instrument, meterListener, meterScope);
+ listener.SetMeasurementEventCallback((m, f, _, _)
+ => OnMeasurementReceived(m, f, ref cpuFromGauge, ref cpuLimitFromGauge, ref cpuRequestFromGauge, ref memoryFromGauge, ref memoryLimitFromGauge));
+ listener.Start();
+
+ using var host = FakeHost.CreateBuilder()
+ .ConfigureServices(x =>
+ x.AddLogging()
+ .AddSingleton(clock)
+ .AddSingleton(new FakeUserHz(100))
+ .AddSingleton(fileSystem)
+ .AddSingleton(new GenericPublisher(_ => e.Set()))
+ .AddResourceMonitoring(x => x.ConfigureMonitor(options => options.CalculateCpuUsageWithoutHostDelta = true))
+ .Replace(ServiceDescriptor.Singleton()))
+ .Build();
+
+ meterScope = host.Services.GetRequiredService();
+ var tracker = host.Services.GetService();
+ Assert.NotNull(tracker);
+
+ _ = host.RunAsync();
+
+ listener.RecordObservableInstruments();
+
+ var utilization = tracker.GetUtilization(TimeSpan.FromSeconds(5));
+
+ 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 112000000");
+ fileSystem.ReplaceFileContent(new FileInfo("/sys/fs/cgroup/memory.current"), "524298");
+ fileSystem.ReplaceFileContent(new FileInfo("/sys/fs/cgroup/memory.stat"), "inactive_file 10");
+
+ clock.Advance(TimeSpan.FromSeconds(6));
+ listener.RecordObservableInstruments();
+
+ e.Wait();
+
+ utilization = tracker.GetUtilization(TimeSpan.FromSeconds(5));
+
+ var roundedCpuUsedPercentage = Math.Round(utilization.CpuUsedPercentage, 1);
+
+ Assert.Equal(42, Math.Round(cpuLimitFromGauge * 100));
+ Assert.Equal(83, Math.Round(cpuRequestFromGauge * 100));
+
+ return Task.CompletedTask;
+ }
+
private static void OnInstrumentPublished(Instrument instrument, MeterListener meterListener, object? meterScope)
{
if (!ReferenceEquals(instrument.Meter.Scope, meterScope))
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV1Tests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV1Tests.cs
index 4fa6aaafe3d..3820ec254e0 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV1Tests.cs
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV1Tests.cs
@@ -35,6 +35,9 @@ public void Parser_Throws_When_Data_Is_Invalid(string line)
Assert.Throws(() => parser.GetHostCpuCount());
Assert.Throws(() => parser.GetCgroupCpuUsageInNanoseconds());
Assert.Throws(() => parser.GetCgroupRequestCpu());
+ Assert.Throws(() => parser.GetCgroupCpuUsageInNanosecondsV2());
+ Assert.Throws(() => parser.GetCgroupLimitV2());
+ Assert.Throws(() => parser.GetCgroupRequestCpuV2());
}
[ConditionalFact]
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV2Tests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV2Tests.cs
index 7ff1a00fb29..646e743af84 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV2Tests.cs
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationParserCgroupV2Tests.cs
@@ -33,10 +33,13 @@ public void Throws_When_Data_Is_Invalid(string line)
Assert.Throws(() => parser.GetAvailableMemoryInBytes());
Assert.Throws(() => parser.GetMemoryUsageInBytes());
Assert.Throws(() => parser.GetCgroupLimitedCpus());
+ Assert.Throws(() => parser.GetCgroupLimitV2());
Assert.Throws(() => parser.GetHostCpuUsageInNanoseconds());
Assert.Throws(() => parser.GetHostCpuCount());
Assert.Throws(() => parser.GetCgroupCpuUsageInNanoseconds());
+ Assert.Throws(() => parser.GetCgroupCpuUsageInNanosecondsV2());
Assert.Throws(() => parser.GetCgroupRequestCpu());
+ Assert.Throws(() => parser.GetCgroupRequestCpuV2());
}
[ConditionalFact]
@@ -278,6 +281,41 @@ public void Gets_Available_Cpus_From_CpuSetCpus_When_Cpu_Limits_Not_Set(string c
Assert.Equal(result, cpus);
}
+ [ConditionalTheory]
+ [InlineData("0::/")]
+ [InlineData("0::/fakeslice")]
+ public void Gets_Available_Cpus_From_CpuSetCpusFromSlices_When_Cpu_Limits_Not_Set(string slicepath)
+ {
+ var f = new HardcodedValueFileSystem(new Dictionary
+ {
+ { new FileInfo("/sys/fs/cgroup/cpu.max"), "200000 100000" },
+ { new FileInfo("/sys/fs/cgroup/fakeslice/cpu.max"), "200000 100000" },
+ { new FileInfo("/proc/self/cgroup"), slicepath }
+ });
+
+ var p = new LinuxUtilizationParserCgroupV2(f, new FakeUserHz(100));
+ var cpus = p.GetCgroupLimitV2();
+
+ Assert.Equal(2, cpus);
+ }
+
+ [ConditionalTheory]
+ [InlineData("2500", 64.0)]
+ [InlineData("10000", 256.0)]
+ public void Calculates_Cpu_Request_From_Cpu_WeightInSlices(string content, float result)
+ {
+ var f = new HardcodedValueFileSystem(new Dictionary
+ {
+ { new FileInfo("/sys/fs/cgroup/fakeslice/cpu.weight"), content },
+ { new FileInfo("/proc/self/cgroup"), "0::/fakeslice" }
+ });
+
+ var p = new LinuxUtilizationParserCgroupV2(f, new FakeUserHz(100));
+ var r = Math.Round(p.GetCgroupRequestCpuV2());
+
+ Assert.Equal(result, r);
+ }
+
[ConditionalFact]
public void Gets_Available_Cpus_From_CpuSetCpus_When_Cpu_Max_Set_To_Max_()
{
@@ -373,6 +411,25 @@ public void Reads_CpuUsage_When_Valid_Input()
Assert.Equal(77_994_900_000_000, r);
}
+ [ConditionalTheory]
+ [InlineData("0::/", "usage_usec 222222", "222222000")]
+ [InlineData("0::/fakeslice", "usage_usec 222222", "222222000")]
+ public void Reads_CpuUsageFromSlices_When_Valid_Input(string slicepath, string content, string result)
+ {
+ var f = new HardcodedValueFileSystem(new Dictionary
+ {
+ { new FileInfo("/sys/fs/cgroup/cpu.stat"), content },
+ { new FileInfo("/sys/fs/cgroup/fakeslice/cpu.stat"), content },
+ { new FileInfo("/proc/self/cgroup"), slicepath }
+ });
+
+ var p = new LinuxUtilizationParserCgroupV2(f, new FakeUserHz(100));
+ var r = p.GetCgroupCpuUsageInNanosecondsV2();
+
+ Assert.IsType(r);
+ Assert.Equal(result, r.ToString());
+ }
+
[ConditionalFact]
public void Reads_TotalMemory_When_Valid_Input()
{
@@ -476,6 +533,23 @@ public void Calculates_Cpu_Request_From_Cpu_Weight(string content, float result)
Assert.Equal(result, r);
}
+ [ConditionalTheory]
+ [InlineData("0::/", "filename", "/sys/fs/cgroup/filename")]
+ [InlineData("0::/filesystem.slice", "filename", "/sys/fs/cgroup/filesystem.slice/filename")]
+ [InlineData("0::/filesystem.slice/", "filename", "/sys/fs/cgroup/filesystem.slice/filename")]
+ public void Create_Path_From_Proc_Self_Cgroup(string content, string filename, string result)
+ {
+ var f = new HardcodedValueFileSystem(new Dictionary
+ {
+ { new FileInfo("/proc/self/cgroup"), content },
+ });
+
+ var p = new LinuxUtilizationParserCgroupV2(f, new FakeUserHz(100));
+ var r = p.GetCgroupPath(filename);
+
+ Assert.Equal(result, r);
+ }
+
[ConditionalFact]
public async Task Is_Thread_Safe_Async()
{
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationProviderTests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationProviderTests.cs
index ccd197cf0c3..d5b536d8386 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationProviderTests.cs
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/LinuxUtilizationProviderTests.cs
@@ -205,4 +205,74 @@ public void Provider_Creates_Meter_With_Correct_Name()
var meter = meterFactory.Meters.Single();
Assert.Equal(ResourceUtilizationInstruments.MeterName, meter.Name);
}
+
+ [ConditionalFact]
+ [CombinatorialData]
+ public void Provider_Registers_Instruments_CgroupV2_WithoutHostCpu()
+ {
+ var meterName = Guid.NewGuid().ToString();
+ var logger = new FakeLogger();
+ var options = Options.Options.Create(new ResourceMonitoringOptions { CalculateCpuUsageWithoutHostDelta = true });
+ using var meter = new Meter(nameof(Provider_Registers_Instruments_CgroupV2_WithoutHostCpu));
+ var meterFactoryMock = new Mock();
+ meterFactoryMock.Setup(x => x.Create(It.IsAny()))
+ .Returns(meter);
+
+ var fileSystem = new HardcodedValueFileSystem(new Dictionary
+ {
+ { new FileInfo("/proc/self/cgroup"), "0::/fakeslice" },
+ { new FileInfo("/sys/fs/cgroup/memory.max"), "9223372036854771712" },
+ { new FileInfo("/proc/stat"), "cpu 10 10 10 10 10 10 10 10 10 10"},
+ { new FileInfo("/sys/fs/cgroup/fakeslice/cpu.stat"), "usage_usec 102312"},
+ { 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"), "20000 100000"},
+ { new FileInfo("/sys/fs/cgroup/memory.stat"), "inactive_file 312312"},
+ { new FileInfo("/sys/fs/cgroup/memory.current"), "524288423423"},
+ { new FileInfo("/sys/fs/cgroup/fakeslice/cpu.weight"), "4"},
+ });
+
+ var parser = new LinuxUtilizationParserCgroupV2(fileSystem: fileSystem, new FakeUserHz(100));
+ var provider = new LinuxUtilizationProvider(options, parser, meterFactoryMock.Object, logger, TimeProvider.System);
+
+ using var listener = new MeterListener
+ {
+ InstrumentPublished = (instrument, listener) =>
+ {
+ if (ReferenceEquals(meter, instrument.Meter))
+ {
+ listener.EnableMeasurementEvents(instrument);
+ }
+ }
+ };
+
+ var samples = new List<(Instrument instrument, double value)>();
+ listener.SetMeasurementEventCallback((instrument, value, _, _) =>
+ {
+ if (ReferenceEquals(meter, instrument.Meter))
+ {
+ samples.Add((instrument, value));
+ }
+ });
+
+ listener.Start();
+ listener.RecordObservableInstruments();
+
+ Assert.Equal(5, samples.Count);
+
+ Assert.Contains(samples, x => x.instrument.Name == ResourceUtilizationInstruments.ContainerCpuLimitUtilization);
+ Assert.True(double.IsNaN(samples.Single(i => i.instrument.Name == ResourceUtilizationInstruments.ContainerCpuLimitUtilization).value));
+
+ Assert.Contains(samples, x => x.instrument.Name == ResourceUtilizationInstruments.ContainerCpuRequestUtilization);
+ Assert.True(double.IsNaN(samples.Single(i => i.instrument.Name == ResourceUtilizationInstruments.ContainerCpuRequestUtilization).value));
+
+ Assert.Contains(samples, x => x.instrument.Name == ResourceUtilizationInstruments.ContainerMemoryLimitUtilization);
+ Assert.Equal(1, samples.Single(i => i.instrument.Name == ResourceUtilizationInstruments.ContainerMemoryLimitUtilization).value);
+
+ Assert.Contains(samples, x => x.instrument.Name == ResourceUtilizationInstruments.ProcessCpuUtilization);
+ Assert.True(double.IsNaN(samples.Single(i => i.instrument.Name == ResourceUtilizationInstruments.ProcessCpuUtilization).value));
+
+ Assert.Contains(samples, x => x.instrument.Name == ResourceUtilizationInstruments.ProcessMemoryUtilization);
+ Assert.Equal(1, samples.Single(i => i.instrument.Name == ResourceUtilizationInstruments.ProcessMemoryUtilization).value);
+ }
}
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Resources/DummyLinuxUtilizationParser.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Resources/DummyLinuxUtilizationParser.cs
index b06b8134a39..9bcd639b4fb 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Resources/DummyLinuxUtilizationParser.cs
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Resources/DummyLinuxUtilizationParser.cs
@@ -9,10 +9,13 @@ internal class DummyLinuxUtilizationParser : ILinuxUtilizationParser
{
public ulong GetAvailableMemoryInBytes() => 1;
public long GetCgroupCpuUsageInNanoseconds() => 0;
+ public long GetCgroupCpuUsageInNanosecondsV2() => 0;
public float GetCgroupLimitedCpus() => 1;
+ public float GetCgroupLimitV2() => 1;
public float GetCgroupRequestCpu() => 1;
+ public float GetCgroupRequestCpuV2() => 1;
public ulong GetHostAvailableMemory() => 0;
public float GetHostCpuCount() => 1;
public long GetHostCpuUsageInNanoseconds() => 0;
public ulong GetMemoryUsageInBytes() => 0;
-}
\ No newline at end of file
+}
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Fallsback_To_Cpuset_When_Quota_And_Period_Are_Minus_One_.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Fallsback_To_Cpuset_When_Quota_And_Period_Are_Minus_One_.verified.txt
index 366ab302111..9b350ed71a3 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Fallsback_To_Cpuset_When_Quota_And_Period_Are_Minus_One_.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Fallsback_To_Cpuset_When_Quota_And_Period_Are_Minus_One_.verified.txt
@@ -3,9 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got '@'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_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__DisplayClass16_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass18_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota= 12_period=eeeee 12.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota= 12_period=eeeee 12.verified.txt
index b5ed6aa0c10..eded4070cde 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota= 12_period=eeeee 12.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota= 12_period=eeeee 12.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected to get an integer but got: ' eeeee 12'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-----_period=18.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-----_period=18.verified.txt
index 0d046c3f61c..4dc3f1be2ad 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-----_period=18.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-----_period=18.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected to get an integer but got: ''.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-18_period=18.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-18_period=18.verified.txt
index 1d73f04b1b3..800e98260fb 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-18_period=18.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-18_period=18.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected an integer but got: '-18 18'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d'.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d'.verified.txt
index 4e22000f229..a3292e2d24e 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d'.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d'.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected an integer but got: '- d''.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d--.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d--.verified.txt
index cf815638006..575d1f550ed 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d--.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=-_period=d--.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected an integer but got: '- d/:'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=12 _period=.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=12 _period=.verified.txt
index 14a292eac64..4b8d642ba56 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=12 _period=.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=12 _period=.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected to get an integer but got: ' '.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=123_period=-----.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=123_period=-----.verified.txt
index 669fe1d0d56..0e56f14524b 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=123_period=-----.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=123_period=-----.verified.txt
@@ -9,8 +9,9 @@ Could not parse '/sys/fs/cgroup/cpu.max'. Expected to get an integer but got: '
'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2_period=d--.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2_period=d--.verified.txt
index ae5ac4e53f2..73c68e3769d 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2_period=d--.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2_period=d--.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected to get an integer but got: ' d/:'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2d2d2d_period=e3.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2d2d2d_period=e3.verified.txt
index 861417c3676..f8bb642d667 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2d2d2d_period=e3.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=2d2d2d_period=e3.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected to get an integer but got: 'd2d2d e3'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=3d_period=d3.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=3d_period=d3.verified.txt
index 31854e1c0c3..a841ab42709 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=3d_period=d3.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=3d_period=d3.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected to get an integer but got: 'd d3'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=dd1d_period=18.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=dd1d_period=18.verified.txt
index b010524a246..e3cdae1ee1c 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=dd1d_period=18.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Files_Contain_Invalid_Data_quota=dd1d_period=18.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.max'. Expected an integer but got: 'dd1d 18'.,
StackTrace:
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__DisplayClass17_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass19_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=-1.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=-1.verified.txt
index 175742305c0..9f08def97c1 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=-1.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=-1.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.weight' content. Expected to find CPU weight but got '-1' instead.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuWeightFromFile(IFileSystem fileSystem, FileInfo cpuWeightFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCgroupRequestCpu(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupRequestCpu()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass26_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=0.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=0.verified.txt
index 01fad3ea1fa..78564076f6e 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=0.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=0.verified.txt
@@ -4,8 +4,9 @@
ParamName: CPU weight,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.ArgumentOutOfRangeException(String paramName, String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuWeightFromFile(IFileSystem fileSystem, FileInfo cpuWeightFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCgroupRequestCpu(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupRequestCpu()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass26_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=10001.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=10001.verified.txt
index 736b4107068..370ba021f09 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=10001.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=10001.verified.txt
@@ -4,8 +4,9 @@
ParamName: CPU weight,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.ArgumentOutOfRangeException(String paramName, String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuWeightFromFile(IFileSystem fileSystem, FileInfo cpuWeightFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCgroupRequestCpu(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupRequestCpu()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass26_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=dasrz3424.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=dasrz3424.verified.txt
index 0c997292615..5edc43ba014 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=dasrz3424.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Cgroup_Cpu_Weight_Files_Contain_Invalid_Data_content=dasrz3424.verified.txt
@@ -3,8 +3,9 @@
Message: Could not parse '/sys/fs/cgroup/cpu.weight' content. Expected to get an integer but got: 'dasrz3424'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryParseCpuWeightFromFile(IFileSystem fileSystem, FileInfo cpuWeightFile, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.TryGetCgroupRequestCpu(IFileSystem fileSystem, Single& cpuUnits)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupRequestCpu()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass26_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=@#dddada_value=342322.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=@#dddada_value=342322.verified.txt
index 428e40d6a3b..46b61fa2ac3 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=@#dddada_value=342322.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=@#dddada_value=342322.verified.txt
@@ -3,7 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpu.stat'. We expected first line of the file to start with 'usage_usec' but it was '@#dddada 342322' instead.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.ParseCpuUsageFromFile(IFileSystem fileSystem, FileInfo cpuUsageFile)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass21_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass24_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=dasd_value=-1.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=dasd_value=-1.verified.txt
index 36819fd7800..24b5e4cd787 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=dasd_value=-1.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=dasd_value=-1.verified.txt
@@ -3,7 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpu.stat'. We expected first line of the file to start with 'usage_usec' but it was 'dasd -1' instead.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.ParseCpuUsageFromFile(IFileSystem fileSystem, FileInfo cpuUsageFile)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass21_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass24_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=usage__value=12222.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=usage__value=12222.verified.txt
index 08aab5f07c1..3560fc7e07f 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=usage__value=12222.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuAcctUsage_Has_Invalid_Content_Both_Parts_content=usage__value=12222.verified.txt
@@ -3,7 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpu.stat'. We expected first line of the file to start with 'usage_usec' but it was 'usage_ 12222' instead.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.ParseCpuUsageFromFile(IFileSystem fileSystem, FileInfo cpuUsageFile)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass21_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass24_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content= d 182-1923.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content= d 182-1923.verified.txt
index 60f1e983e9e..1417e77b845 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content= d 182-1923.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content= d 182-1923.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got ' d 182-1923'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=--.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=--.verified.txt
index eb70c5ccc9d..e8ede5c6702 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=--.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=--.verified.txt
@@ -5,8 +5,8 @@ Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated
'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=-11.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=-11.verified.txt
index 7e575afd247..2900abc87e1 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=-11.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=-11.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got '-11'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=.verified.txt
index 9fd0e79d38c..aa5da639c70 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got ''.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=0-.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=0-.verified.txt
index 45571e65860..e4290e5a261 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=0-.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=0-.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got '0-'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18 --.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18 --.verified.txt
index ccbe69b1905..f9ba094d98c 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18 --.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18 --.verified.txt
@@ -5,8 +5,8 @@ Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated
'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18-22.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18-22.verified.txt
index 45a2e06f41b..36f223cd574 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18-22.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=1-18-22.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got '1-18-22'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-18.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-18.verified.txt
index 12b08ac9324..67f9e781c9a 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-18.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-18.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got '22-18'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-d.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-d.verified.txt
index ebff94d51e5..0e0f8234596 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-d.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=22-d.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got '22-d'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=aaaa.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=aaaa.verified.txt
index 3ced4860e9b..f0dc2c577c9 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=aaaa.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=aaaa.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got 'aaaa'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=d-22.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=d-22.verified.txt
index 01ece2ada55..0145f0e81ae 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=d-22.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuSet_Has_Invalid_Content_content=d-22.verified.txt
@@ -3,8 +3,8 @@
Message: Could not parse '/sys/fs/cgroup/cpuset.cpus.effective'. Expected comma-separated list of integers, with dashes ("-") based ranges ("0", "2-6,12") but got 'd-22'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|23_0(ReadOnlySpan`1 content)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.g__ThrowException|32_0(ReadOnlySpan`1 content)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuCount()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass15_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass17_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2.verified.txt
index 8eb5acdd353..af2d8daddd4 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2.verified.txt
@@ -4,6 +4,6 @@
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693 4860924 82283 0 4360 0dsa.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693 4860924 82283 0 4360 0dsa.verified.txt
index 45ef3144fc9..dd7c246db4d 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693 4860924 82283 0 4360 0dsa.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693 4860924 82283 0 4360 0dsa.verified.txt
@@ -4,6 +4,6 @@
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693.verified.txt
index 5b5cd1c1390..c14dabf91ae 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content= 2569530 36700 245693.verified.txt
@@ -4,6 +4,6 @@
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=2569530367000.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=2569530367000.verified.txt
index 066cf310bd4..3c5fff97b3f 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=2569530367000.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=2569530367000.verified.txt
@@ -4,6 +4,6 @@
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=asdasd 2569530 36700 245693 4860924 82283 0 4360 0 0 0.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=asdasd 2569530 36700 245693 4860924 82283 0 4360 0 0 0.verified.txt
index 68589c3d144..6baea50e749 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=asdasd 2569530 36700 245693 4860924 82283 0 4360 0 0 0.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=asdasd 2569530 36700 245693 4860924 82283 0 4360 0 0 0.verified.txt
@@ -4,6 +4,6 @@
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=cpu 2569530 36700 245693.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=cpu 2569530 36700 245693.verified.txt
index 6bc34bc1e7e..b2ebdb4e4d5 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=cpu 2569530 36700 245693.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_CpuUsage_Invalid_content=cpu 2569530 36700 245693.verified.txt
@@ -4,6 +4,6 @@
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetHostCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass20_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass23_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-1.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-1.verified.txt
index bbe25ef758d..78c9bf68eca 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-1.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-1.verified.txt
@@ -3,7 +3,8 @@
Message: Could not get cpu usage from '/sys/fs/cgroup/cpu.stat'. Expected positive number, but got 'usage_usec -1'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.ParseCpuUsageFromFile(IFileSystem fileSystem, FileInfo cpuUsageFile)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass22_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass25_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-15.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-15.verified.txt
index 02495733722..6d4827680bd 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-15.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-15.verified.txt
@@ -3,7 +3,8 @@
Message: Could not get cpu usage from '/sys/fs/cgroup/cpu.stat'. Expected positive number, but got 'usage_usec -15'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.ParseCpuUsageFromFile(IFileSystem fileSystem, FileInfo cpuUsageFile)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass22_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass25_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-32131.verified.txt b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-32131.verified.txt
index 00782eb7da8..4075b6f6483 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-32131.verified.txt
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/Linux/Verified/LinuxUtilizationParserCgroupV2Tests.Throws_When_Usage_Usec_Has_Negative_Value_value=-32131.verified.txt
@@ -3,7 +3,8 @@
Message: Could not get cpu usage from '/sys/fs/cgroup/cpu.stat'. Expected positive number, but got 'usage_usec -32131'.,
StackTrace:
at Microsoft.Shared.Diagnostics.Throw.InvalidOperationException(String message)
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.ParseCpuUsageFromFile(IFileSystem fileSystem, FileInfo cpuUsageFile)
at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.LinuxUtilizationParserCgroupV2.GetCgroupCpuUsageInNanoseconds()
-at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass22_0.b__0()
+at Microsoft.Extensions.Diagnostics.ResourceMonitoring.Linux.Test.LinuxUtilizationParserCgroupV2Tests.<>c__DisplayClass25_0.b__0()
at Xunit.Record.Exception(Func`1 testCode)
}
\ No newline at end of file
diff --git a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringOptionsTests.cs b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringOptionsTests.cs
index f20b50626b3..1a40889fd72 100644
--- a/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringOptionsTests.cs
+++ b/test/Libraries/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Tests/ResourceMonitoringOptionsTests.cs
@@ -19,5 +19,17 @@ public void Basic()
};
Assert.NotNull(options);
+ Assert.False(options.CalculateCpuUsageWithoutHostDelta);
+ }
+
+ [Fact]
+ public void CalculateCpuUsageWithoutHostDelta_WhenSet_ReturnsExpectedValue()
+ {
+ var options = new ResourceMonitoringOptions
+ {
+ CalculateCpuUsageWithoutHostDelta = true
+ };
+
+ Assert.True(options.CalculateCpuUsageWithoutHostDelta);
}
}