From 6a0645a633643971b4aa98d115af14c6fff789a2 Mon Sep 17 00:00:00 2001 From: "Vincent Bu (Centific Technologies Inc)" Date: Wed, 3 Sep 2025 17:56:35 +0800 Subject: [PATCH 1/3] track committed usage --- .../GC.Analysis.API/Common.cs | 11 ++++++++++ .../Presentation/GCPerfSim/ResultItem.cs | 16 ++++++++++++++ .../GCPerfSim/ResultItemComparison.cs | 22 ++++++++++++++++++- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs index 8adee8c667b..00b408badf7 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs @@ -101,6 +101,17 @@ public static List Select(this IEnumerable data, Func map) return result; } + public static double Last(this IEnumerable data, Func map) + { + int count = data.Count(); + if (data == null || count == 0) + { + return double.NaN; + } + + return (double)map(data.Last()); + } + public static List Where(this IEnumerable data, Func predicate) { List result = new(); diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs index baeb289e184..a40910a75dd 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs @@ -16,6 +16,11 @@ private ResultItem(string runName, string corerun) FirstToLastGCSeconds = double.NaN; HeapSizeBeforeMB_Mean = double.NaN; HeapSizeAfter_Mean = double.NaN; + TotalCommittedInUse = double.NaN; + TotalBookkeepingCommitted = double.NaN; + TotalCommittedInGlobalDecommit = double.NaN; + TotalCommittedInFree = double.NaN; + TotalCommittedInGlobalFree = double.NaN; PauseDurationMSec_95PWhereIsGen0 = double.NaN; PauseDurationMSec_95PWhereIsGen1 = double.NaN; PauseDurationMSec_95PWhereIsBackground = double.NaN; @@ -47,6 +52,12 @@ public ResultItem(GCProcessData processData, string runName, string configuratio HeapSizeAfter_Mean = GoodLinq.Average(processData.GCs, (gc => gc.HeapSizeAfterMB)); HeapSizeBeforeMB_Mean = GoodLinq.Average(processData.GCs, (gc => gc.HeapSizeBeforeMB)); + TotalCommittedInUse = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInUse)); + TotalBookkeepingCommitted = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalBookkeepingCommitted)); + TotalCommittedInGlobalDecommit = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInGlobalDecommit)); + TotalCommittedInFree = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInFree)); + TotalCommittedInGlobalFree = GoodLinq.Last(processData.GCs, (gc => gc.CommittedUsageAfter.TotalCommittedInGlobalFree)); + var properties = processData.Stats.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); foreach (var property in properties) { @@ -104,6 +115,11 @@ public ResultItem(GCProcessData processData, string runName, string configuratio public double FirstToLastGCSeconds { get; } public double HeapSizeBeforeMB_Mean { get; } public double HeapSizeAfter_Mean { get; } + public double TotalCommittedInUse { get; set; } + public double TotalCommittedInGlobalDecommit { get; set; } + public double TotalCommittedInFree { get; set; } + public double TotalCommittedInGlobalFree { get; set; } + public double TotalBookkeepingCommitted { get; set; } public double PauseDurationMSec_95PWhereIsGen0 { get; } public double PauseDurationMSec_95PWhereIsGen1 { get; } public double PauseDurationMSec_95PWhereIsBackground { get; } diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs index 81ea3fb9499..79ffd8abe4a 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs @@ -66,7 +66,27 @@ public string ToMarkdownString(string runName, string baselineCorerunName, strin public double BaselineMetric { get; } public double ComparandMetric { get; } public double Delta => ComparandMetric - BaselineMetric; - public double PercentageDelta => (Delta / BaselineMetric) * 100; + public double PercentageDelta + { + get + { + if (BaselineMetric == 0) + { + if (ComparandMetric == 0) + { + return 0; + } + else + { + return double.MaxValue; + } + } + else + { + return Delta / BaselineMetric * 100.0; + } + } + } public string Key => $"{Baseline.ConfigurationName}_{RunName}"; public ResultItem Baseline { get; } public ResultItem Comparand { get; } From 42adc7e2950c413f89b38561299b8abf7579a48b Mon Sep 17 00:00:00 2001 From: "Vincent Bu (Centific Technologies Inc)" Date: Mon, 8 Sep 2025 14:41:54 +0800 Subject: [PATCH 2/3] replace sum with average --- .../Presentation/GCPerfSim/ResultItem.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs index a40910a75dd..c6554e97a8e 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItem.cs @@ -52,11 +52,11 @@ public ResultItem(GCProcessData processData, string runName, string configuratio HeapSizeAfter_Mean = GoodLinq.Average(processData.GCs, (gc => gc.HeapSizeAfterMB)); HeapSizeBeforeMB_Mean = GoodLinq.Average(processData.GCs, (gc => gc.HeapSizeBeforeMB)); - TotalCommittedInUse = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInUse)); - TotalBookkeepingCommitted = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalBookkeepingCommitted)); - TotalCommittedInGlobalDecommit = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInGlobalDecommit)); - TotalCommittedInFree = GoodLinq.Sum(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInFree)); - TotalCommittedInGlobalFree = GoodLinq.Last(processData.GCs, (gc => gc.CommittedUsageAfter.TotalCommittedInGlobalFree)); + TotalCommittedInUse = GoodLinq.Average(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInUse)); + TotalBookkeepingCommitted = GoodLinq.Average(processData.GCs, (gc => gc.CommittedUsageBefore.TotalBookkeepingCommitted)); + TotalCommittedInGlobalDecommit = GoodLinq.Average(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInGlobalDecommit)); + TotalCommittedInFree = GoodLinq.Average(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInFree)); + TotalCommittedInGlobalFree = GoodLinq.Average(processData.GCs, (gc => gc.CommittedUsageBefore.TotalCommittedInGlobalFree)); var properties = processData.Stats.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); foreach (var property in properties) From 5ec56d7b2721902ab1b4c3188eba7dbfba6fe599 Mon Sep 17 00:00:00 2001 From: "Vincent Bu (Centific Technologies Inc)" Date: Tue, 16 Sep 2025 10:03:03 +0800 Subject: [PATCH 3/3] return double.NaN in case divide by zero --- .../gc/GC.Infrastructure/GC.Analysis.API/Common.cs | 11 ----------- .../Presentation/GCPerfSim/ResultItemComparison.cs | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs index 00b408badf7..8adee8c667b 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/Common.cs @@ -101,17 +101,6 @@ public static List Select(this IEnumerable data, Func map) return result; } - public static double Last(this IEnumerable data, Func map) - { - int count = data.Count(); - if (data == null || count == 0) - { - return double.NaN; - } - - return (double)map(data.Last()); - } - public static List Where(this IEnumerable data, Func predicate) { List result = new(); diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs index 79ffd8abe4a..698b42eaa08 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Infrastructure.Core/Presentation/GCPerfSim/ResultItemComparison.cs @@ -78,7 +78,7 @@ public double PercentageDelta } else { - return double.MaxValue; + return double.NaN; } } else