diff --git a/VERSION b/VERSION index df4bdc7e53..0fa4ae4890 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.2.9 \ No newline at end of file +3.3.0 \ No newline at end of file diff --git a/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-COUNTERS.json b/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-COUNTERS.json index 7ca75e55c7..01c1377d17 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-COUNTERS.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-COUNTERS.json @@ -55,8 +55,8 @@ "Counters10": "Memory=Faults/sec", "Counters11": "Memory=(Page Reads/sec|Page Writes/sec|Pages/sec|Pages Input/sec|Pages Output/sec)", "Counters12": "PhysicalDisk=\\(_Total\\)", - "Counters13": "Processor=\\(_Total\\)", - "Counters14": "Processor=\\([0-9,]+\\)\\\\% (C[0-9]+|Idle|Interrupt|Privileged|Processor|User) Time", + "Counters13": "Processor Information=\\(_Total\\)", + "Counters14": "Processor Information=\\([0-9,]+\\)\\\\% (C[0-9]+|Idle|Interrupt|Privileged|Processor|User) Time", "Counters15": "System=.", "Comments": "The counters defined are formatted as {category}={counter_match_expression}. The match expression is a regular expression to allow for handling variability of counters available on different systems. JSON content has eccentricities. Use 4-backslashes to represent a single backslash and 2-backslashes to represent a regular expression character escape." } diff --git a/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-DEFAULT.json b/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-DEFAULT.json index e9fd7c9521..c6e10f0bb0 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-DEFAULT.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/MONITORS-DEFAULT.json @@ -154,8 +154,8 @@ "Counters10": "Memory=Faults/sec", "Counters11": "Memory=(Page Reads/sec|Page Writes/sec|Pages/sec|Pages Input/sec|Pages Output/sec)", "Counters12": "PhysicalDisk=\\(_Total\\)", - "Counters13": "Processor=\\(_Total\\)", - "Counters14": "Processor=\\([0-9,]+\\)\\\\% (C[0-9]+|Idle|Interrupt|Privileged|Processor|User) Time", + "Counters13": "Processor Information=\\(_Total\\)", + "Counters14": "Processor Information=\\([0-9,]+\\)\\\\% (C[0-9]+|Idle|Interrupt|Privileged|Processor|User) Time", "Counters15": "System=.", "Comments": "The counters defined are formatted as {category}={counter_match_expression}. The match expression is a regular expression to allow for handling variability of counters available on different systems. JSON content has eccentricities. Use 4-backslashes to represent a single backslash and 2-backslashes to represent a regular expression character escape." } diff --git a/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsPerformanceCounterMonitor.cs b/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsPerformanceCounterMonitor.cs index af9e1b54b4..c6cd631b83 100644 --- a/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsPerformanceCounterMonitor.cs +++ b/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsPerformanceCounterMonitor.cs @@ -73,9 +73,10 @@ public TimeSpan CounterDiscoveryInterval /// /// Defines the counter provider to use. Supported values: "Default" and "WMI". - /// When set to "Default", the monitor auto-selects WMI on systems with more than - /// 64 logical processors where the legacy .NET PerformanceCounter API fails. - /// When set to "WMI", the WMI provider is always used regardless of LP count. + /// When set to "Default" (or any value other than "WMI"), the .NET PerformanceCounter + /// API is used. When set to "WMI", the WMI provider is used. The provider is selected + /// strictly from this parameter; the monitor does not infer a provider from system + /// characteristics such as logical processor count. /// public string CounterProvider { @@ -91,21 +92,14 @@ public string CounterProvider protected virtual string CounterProviderName => this.UseWmiProvider ? "WMI" : ".NET SDK"; /// - /// Returns true when the WMI provider should be used, based on the CounterProvider - /// parameter and the system's logical processor count. + /// Returns true only when the parameter is explicitly + /// set to "WMI". No implicit/automatic selection is performed. /// protected bool UseWmiProvider { get { - if (string.Equals(this.CounterProvider, "WMI", StringComparison.OrdinalIgnoreCase)) - { - return true; - } - - // Auto-select WMI when the system has >64 logical processors. - // The legacy .NET PerformanceCounter API fails on these systems. - return Environment.ProcessorCount > 64; + return string.Equals(this.CounterProvider, "WMI", StringComparison.OrdinalIgnoreCase); } } diff --git a/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsWmiPerformanceCounterMonitor.cs b/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsWmiPerformanceCounterMonitor.cs index 3892edd8e6..786fde056f 100644 --- a/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsWmiPerformanceCounterMonitor.cs +++ b/src/VirtualClient/VirtualClient.Monitors/PerformanceCounters/WindowsWmiPerformanceCounterMonitor.cs @@ -14,14 +14,13 @@ namespace VirtualClient.Monitors /// /// Monitor captures performance counters from Windows systems using WMI - /// (CimSession querying Win32_PerfFormattedData_* classes). Required on - /// bare-metal systems with more than 64 logical processors where the legacy - /// .NET PerformanceCounter API fails. + /// (CimSession querying Win32_PerfFormattedData_* classes). Opt-in alternative + /// to the default .NET PerformanceCounter API path. /// /// /// This subclass always uses the WMI provider regardless of the CounterProvider - /// parameter or logical processor count. It can be referenced directly in profiles - /// as an alternative to setting CounterProvider=WMI on the base class. + /// parameter. It can be referenced directly in profiles as an alternative to + /// setting CounterProvider=WMI on the base class. /// public class WindowsWmiPerformanceCounterMonitor : WindowsPerformanceCounterMonitor { @@ -37,7 +36,7 @@ public WindowsWmiPerformanceCounterMonitor(IServiceCollection dependencies, IDic protected override string CounterProviderName => "WMI"; /// - /// Always uses WMI for counter discovery, bypassing the auto-detection logic. + /// Always uses WMI for counter discovery. /// protected override void LoadCounters(EventContext telemetryContext, CancellationToken cancellationToken) {