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); } }