From 44ab609f67db4f7888213f883dc7be0d84c4194e Mon Sep 17 00:00:00 2001 From: Mukund Raghav Sharma Date: Tue, 10 Dec 2024 00:15:17 -0800 Subject: [PATCH 1/3] Made progress with notebook --- .../DynamicEvents/DynamicEvents.cs | 1 + .../DynamicEvents/GCDynamicEvents.cs | 19 ++ .../Notebooks/Examples/OOM_Example.ipynb | 304 ++++++++++++++++++ 3 files changed, 324 insertions(+) create mode 100644 src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs index d827d6138b3..8dd82481136 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs @@ -32,6 +32,7 @@ public sealed class DynamicEventSchema // These are the dynamic events that are currently emitted from the runtime. { GCDynamicEvents.SizeAdaptationSampleSchema.DynamicEventName, Compile(GCDynamicEvents.SizeAdaptationSampleSchema) }, { GCDynamicEvents.SizeAdaptationTuningSchema.DynamicEventName, Compile(GCDynamicEvents.SizeAdaptationTuningSchema) }, + { GCDynamicEvents.SizeAdaptationFullGCTuningSchema.DynamicEventName, Compile(GCDynamicEvents.SizeAdaptationFullGCTuningSchema) }, }; internal static bool allowPartialSchema; diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs index cc6b289af2d..b6f882b6be2 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs @@ -43,5 +43,24 @@ internal static class GCDynamicEvents KeyValuePair.Create("AdjMetric", typeof(bool)) } }; + + public static DynamicEventSchema SizeAdaptationFullGCTuningSchema = new DynamicEventSchema + { + DynamicEventName = "SizeAdaptationFullGCTuning", + Fields = new List> + { + KeyValuePair.Create("version", typeof(ushort)), + KeyValuePair.Create("NewNHeaps", typeof(ushort)), + KeyValuePair.Create("CurrentGCIndex", typeof(ulong)), + KeyValuePair.Create("MedianThroughputCostPercent", typeof(float)), + KeyValuePair.Create("NumGcsSinceLastChange", typeof(uint)), + KeyValuePair.Create("DiffSamples0", typeof(uint)), + KeyValuePair.Create("GcPercent0", typeof(float)), + KeyValuePair.Create("DiffSamples1", typeof(uint)), + KeyValuePair.Create("GcPercent1", typeof(float)), + KeyValuePair.Create("DiffSamples2", typeof(uint)), + KeyValuePair.Create("GcPercent2", typeof(float)), + } + }; } } diff --git a/src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb b/src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb new file mode 100644 index 00000000000..cce28d96039 --- /dev/null +++ b/src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb @@ -0,0 +1,304 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Custom Dynamic Event Example" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Installed Packages
  • Microsoft.Data.Analysis, 0.22.0
  • Microsoft.Diagnostics.Tracing.TraceEvent, 3.1.13
  • Newtonsoft.Json, 13.0.3
  • XPlot.Plotly, 4.0.6
  • XPlot.Plotly.Interactive, 4.0.7
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "Loading extensions from `Q:\\.tools\\.nuget\\packages\\microsoft.data.analysis\\0.22.0\\interactive-extensions\\dotnet\\Microsoft.Data.Analysis.Interactive.dll`" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "Loading extensions from `Q:\\.tools\\.nuget\\packages\\xplot.plotly.interactive\\4.0.7\\lib\\net7.0\\XPlot.Plotly.Interactive.dll`" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "Configuring PowerShell Kernel for XPlot.Plotly integration." + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "Installed support for XPlot.Plotly." + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#r \"nuget: Microsoft.Diagnostics.Tracing.TraceEvent, 3.1.13\"\n", + "// #r \"./TraceEvent.dll\" <- Here is how to add your custom TraceEvent.dll\n", + "\n", + "#r \"nuget: XPlot.Plotly\"\n", + "#r \"nuget: XPlot.Plotly.Interactive\"\n", + "#r \"nuget: Microsoft.Data.Analysis\"\n", + "#r \"nuget: Newtonsoft.Json\"\n", + "\n", + "using Etlx = Microsoft.Diagnostics.Tracing.Etlx;\n", + "using Microsoft.Data.Analysis;\n", + "using Microsoft.Diagnostics.Tracing.Analysis.GC;\n", + "using Microsoft.Diagnostics.Tracing.Analysis;\n", + "using Microsoft.Diagnostics.Tracing.Parsers.Clr;\n", + "using Microsoft.Diagnostics.Tracing;\n", + "using XPlot.Plotly;\n", + "\n", + "using System.IO;\n", + "using Newtonsoft.Json;" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "dotnet_interactive": { + "language": "pwsh" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Determining projects to restore...\n", + " All projects are up-to-date for restore.\n", + " GC.Analysis.API -> C:\\Users\\musharm\\source\\repos\\performance_oom\\artifacts\\bin\\GC.Analysis.API\\Release\\net8.0\\GC.Analysis.API.dll\n", + "\n", + "Build succeeded.\n", + " 0 Warning(s)\n", + " 0 Error(s)\n", + "\n", + "Time Elapsed 00:00:01.18\n" + ] + } + ], + "source": [ + "dotnet build -c Release \"..\\..\\GC.Analysis.API\" # /p:CustomTraceEvent=true and Optionally add: /p:PerfViewPath=C:\\\\Dev\\\\PerfView" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "#r \"..\\..\\..\\..\\..\\..\\artifacts\\bin\\GC.Analysis.API\\Release\\net8.0\\GC.Analysis.API.dll\"\n", + "\n", + "using GC.Analysis.API;\n", + "using GC.Analysis.API.DynamicEvents;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dynamic Event" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "Analyzer analyzer = new Analyzer(@\"C:\\Users\\musharm\\source\\repos\\performance\\artifacts\\Results\\2gb\\2gb.run.0.etlx\");\n", + "GCProcessData gcData = analyzer.GetProcessGCData(\"corerun\").First();" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "public static DynamicEventSchema OOMDetailsSchema = new DynamicEventSchema\n", + "{\n", + " DynamicEventName = \"OOMDetails\",\n", + " Fields = new List>\n", + " {\n", + " KeyValuePair.Create(\"version\", typeof(ushort)),\n", + " KeyValuePair.Create(\"GCIndex\", typeof(uint)),\n", + " KeyValuePair.Create(\"Allocated\", typeof(ushort)),\n", + " KeyValuePair.Create(\"Reserved\", typeof(ushort)),\n", + " KeyValuePair.Create(\"AllocSize\", typeof(uint)),\n", + " KeyValuePair.Create(\"Reason\", typeof(ushort)),\n", + " KeyValuePair.Create(\"FGM\", typeof(ushort)),\n", + " KeyValuePair.Create(\"Size\", typeof(uint)),\n", + " KeyValuePair.Create(\"AvailablePageFileMB\", typeof(uint)),\n", + " },\n", + " MaxOccurrence = 1000\n", + "};\n", + "\n", + "DynamicEventSchema.Add(OOMDetailsSchema);" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "ename": "Error", + "evalue": "System.Exception: Event OOMDetails does not have matching size\r\n at GC.Analysis.API.DynamicEvents.DynamicEventObject..ctor(GCDynamicEvent dynamicEvent, CompiledSchema schema) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 218\r\n at GC.Analysis.API.DynamicEvents.DynamicIndex..ctor(List`1 dynamicEvents) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 194\r\n at GC.Analysis.API.DynamicEvents.TraceGCExtensions.DynamicEvents(TraceGC traceGC) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 20\r\n at Submission#10.<>c.<>b__0_0(TraceGC gc)\r\n at GC.Analysis.API.GoodLinq.Select[T,R](IEnumerable`1 data, Func`2 map) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\Common.cs:line 98\r\n at Submission#10.<>d__0.MoveNext()\r\n--- End of stack trace from previous location ---\r\n at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)", + "output_type": "error", + "traceback": [ + "System.Exception: Event OOMDetails does not have matching size\r\n", + " at GC.Analysis.API.DynamicEvents.DynamicEventObject..ctor(GCDynamicEvent dynamicEvent, CompiledSchema schema) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 218\r\n", + " at GC.Analysis.API.DynamicEvents.DynamicIndex..ctor(List`1 dynamicEvents) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 194\r\n", + " at GC.Analysis.API.DynamicEvents.TraceGCExtensions.DynamicEvents(TraceGC traceGC) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 20\r\n", + " at Submission#10.<>c.<>b__0_0(TraceGC gc)\r\n", + " at GC.Analysis.API.GoodLinq.Select[T,R](IEnumerable`1 data, Func`2 map) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\Common.cs:line 98\r\n", + " at Submission#10.<>d__0.MoveNext()\r\n", + "--- End of stack trace from previous location ---\r\n", + " at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)" + ] + } + ], + "source": [ + "gcData.GCs.Select(gc => gc.DynamicEvents().OOMDetails) " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "dotnet_interactive": { + "language": "csharp" + }, + "polyglot_notebook": { + "kernelName": "csharp" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [ + { + "ename": "Error", + "evalue": "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference\r\n at CallSite.Target(Closure, CallSite, Object)\r\n at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)\r\n at Submission#8.<>d__0.MoveNext()\r\n--- End of stack trace from previous location ---\r\n at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)", + "output_type": "error", + "traceback": [ + "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference\r\n", + " at CallSite.Target(Closure, CallSite, Object)\r\n", + " at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)\r\n", + " at Submission#8.<>d__0.MoveNext()\r\n", + "--- End of stack trace from previous location ---\r\n", + " at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)" + ] + } + ], + "source": [ + "Console.WriteLine($\"Elapsed Time between GCs for GC#2: {gcData.GCs[1].DynamicEvents().SizeAdaptationSample.ElapsedTimeBetweenGCs}\");\n", + "Console.WriteLine($\"TotalSOHStableSize for GC#4: {gcData.GCs[3].DynamicEvents().SizeAdaptationTuning.TotalSOHStableSize}\");" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".NET (C#)", + "language": "C#", + "name": ".net-csharp" + }, + "language_info": { + "file_extension": ".cs", + "mimetype": "text/x-csharp", + "name": "C#", + "pygments_lexer": "csharp", + "version": "9.0" + }, + "orig_nbformat": 4, + "polyglot_notebook": { + "kernelInfo": { + "defaultKernelName": "csharp", + "items": [ + { + "aliases": [], + "name": "csharp" + } + ] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 65dd287f3a3e3459bcde38cdc3487f9434302a0d Mon Sep 17 00:00:00 2001 From: Mukund Raghav Sharma Date: Wed, 11 Dec 2024 08:19:10 -0800 Subject: [PATCH 2/3] Added the OOMDetails + Tuning Gen2 Dynamic Events --- .../DynamicEvents/DynamicEvents.cs | 1 + .../DynamicEvents/GCDynamicEvents.cs | 19 ++ .../Notebooks/Examples/OOM_Example.ipynb | 304 ------------------ 3 files changed, 20 insertions(+), 304 deletions(-) delete mode 100644 src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs index 8dd82481136..57d7f1b2806 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/DynamicEvents.cs @@ -33,6 +33,7 @@ public sealed class DynamicEventSchema { GCDynamicEvents.SizeAdaptationSampleSchema.DynamicEventName, Compile(GCDynamicEvents.SizeAdaptationSampleSchema) }, { GCDynamicEvents.SizeAdaptationTuningSchema.DynamicEventName, Compile(GCDynamicEvents.SizeAdaptationTuningSchema) }, { GCDynamicEvents.SizeAdaptationFullGCTuningSchema.DynamicEventName, Compile(GCDynamicEvents.SizeAdaptationFullGCTuningSchema) }, + { GCDynamicEvents.OOMDetailsSchema.DynamicEventName, Compile(GCDynamicEvents.OOMDetailsSchema) }, }; internal static bool allowPartialSchema; diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs index b6f882b6be2..2d6048d4099 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs @@ -62,5 +62,24 @@ internal static class GCDynamicEvents KeyValuePair.Create("GcPercent2", typeof(float)), } }; + + public static DynamicEventSchema OOMDetailsSchema = new DynamicEventSchema + { + DynamicEventName = "OOMDetails", + Fields = new List> + { + KeyValuePair.Create("version", typeof(ushort)), + KeyValuePair.Create("GCIndex", typeof(ulong)), + KeyValuePair.Create("Allocated", typeof(byte)), + KeyValuePair.Create("Reserved", typeof(byte)), + KeyValuePair.Create("AllocSize", typeof(ulong)), + KeyValuePair.Create("Reason", typeof(byte)), + KeyValuePair.Create("FailureGetMemory", typeof(byte)), + KeyValuePair.Create("Size", typeof(ulong)), + KeyValuePair.Create("IsLOH", typeof(byte)), + KeyValuePair.Create("MemoryLoad", typeof(uint)), + }, + MaxOccurrence = 1000 // TODO: This should be the max of the number of heaps allowed. + }; } } diff --git a/src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb b/src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb deleted file mode 100644 index cce28d96039..00000000000 --- a/src/benchmarks/gc/GC.Infrastructure/Notebooks/Examples/OOM_Example.ipynb +++ /dev/null @@ -1,304 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Custom Dynamic Event Example" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "dotnet_interactive": { - "language": "csharp" - }, - "vscode": { - "languageId": "polyglot-notebook" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
Installed Packages
  • Microsoft.Data.Analysis, 0.22.0
  • Microsoft.Diagnostics.Tracing.TraceEvent, 3.1.13
  • Newtonsoft.Json, 13.0.3
  • XPlot.Plotly, 4.0.6
  • XPlot.Plotly.Interactive, 4.0.7
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "Loading extensions from `Q:\\.tools\\.nuget\\packages\\microsoft.data.analysis\\0.22.0\\interactive-extensions\\dotnet\\Microsoft.Data.Analysis.Interactive.dll`" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "Loading extensions from `Q:\\.tools\\.nuget\\packages\\xplot.plotly.interactive\\4.0.7\\lib\\net7.0\\XPlot.Plotly.Interactive.dll`" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "Configuring PowerShell Kernel for XPlot.Plotly integration." - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "Installed support for XPlot.Plotly." - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#r \"nuget: Microsoft.Diagnostics.Tracing.TraceEvent, 3.1.13\"\n", - "// #r \"./TraceEvent.dll\" <- Here is how to add your custom TraceEvent.dll\n", - "\n", - "#r \"nuget: XPlot.Plotly\"\n", - "#r \"nuget: XPlot.Plotly.Interactive\"\n", - "#r \"nuget: Microsoft.Data.Analysis\"\n", - "#r \"nuget: Newtonsoft.Json\"\n", - "\n", - "using Etlx = Microsoft.Diagnostics.Tracing.Etlx;\n", - "using Microsoft.Data.Analysis;\n", - "using Microsoft.Diagnostics.Tracing.Analysis.GC;\n", - "using Microsoft.Diagnostics.Tracing.Analysis;\n", - "using Microsoft.Diagnostics.Tracing.Parsers.Clr;\n", - "using Microsoft.Diagnostics.Tracing;\n", - "using XPlot.Plotly;\n", - "\n", - "using System.IO;\n", - "using Newtonsoft.Json;" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "dotnet_interactive": { - "language": "pwsh" - }, - "vscode": { - "languageId": "polyglot-notebook" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Determining projects to restore...\n", - " All projects are up-to-date for restore.\n", - " GC.Analysis.API -> C:\\Users\\musharm\\source\\repos\\performance_oom\\artifacts\\bin\\GC.Analysis.API\\Release\\net8.0\\GC.Analysis.API.dll\n", - "\n", - "Build succeeded.\n", - " 0 Warning(s)\n", - " 0 Error(s)\n", - "\n", - "Time Elapsed 00:00:01.18\n" - ] - } - ], - "source": [ - "dotnet build -c Release \"..\\..\\GC.Analysis.API\" # /p:CustomTraceEvent=true and Optionally add: /p:PerfViewPath=C:\\\\Dev\\\\PerfView" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "dotnet_interactive": { - "language": "csharp" - }, - "vscode": { - "languageId": "polyglot-notebook" - } - }, - "outputs": [], - "source": [ - "#r \"..\\..\\..\\..\\..\\..\\artifacts\\bin\\GC.Analysis.API\\Release\\net8.0\\GC.Analysis.API.dll\"\n", - "\n", - "using GC.Analysis.API;\n", - "using GC.Analysis.API.DynamicEvents;" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Dynamic Event" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "dotnet_interactive": { - "language": "csharp" - }, - "polyglot_notebook": { - "kernelName": "csharp" - }, - "vscode": { - "languageId": "polyglot-notebook" - } - }, - "outputs": [], - "source": [ - "Analyzer analyzer = new Analyzer(@\"C:\\Users\\musharm\\source\\repos\\performance\\artifacts\\Results\\2gb\\2gb.run.0.etlx\");\n", - "GCProcessData gcData = analyzer.GetProcessGCData(\"corerun\").First();" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "dotnet_interactive": { - "language": "csharp" - }, - "polyglot_notebook": { - "kernelName": "csharp" - }, - "vscode": { - "languageId": "polyglot-notebook" - } - }, - "outputs": [], - "source": [ - "public static DynamicEventSchema OOMDetailsSchema = new DynamicEventSchema\n", - "{\n", - " DynamicEventName = \"OOMDetails\",\n", - " Fields = new List>\n", - " {\n", - " KeyValuePair.Create(\"version\", typeof(ushort)),\n", - " KeyValuePair.Create(\"GCIndex\", typeof(uint)),\n", - " KeyValuePair.Create(\"Allocated\", typeof(ushort)),\n", - " KeyValuePair.Create(\"Reserved\", typeof(ushort)),\n", - " KeyValuePair.Create(\"AllocSize\", typeof(uint)),\n", - " KeyValuePair.Create(\"Reason\", typeof(ushort)),\n", - " KeyValuePair.Create(\"FGM\", typeof(ushort)),\n", - " KeyValuePair.Create(\"Size\", typeof(uint)),\n", - " KeyValuePair.Create(\"AvailablePageFileMB\", typeof(uint)),\n", - " },\n", - " MaxOccurrence = 1000\n", - "};\n", - "\n", - "DynamicEventSchema.Add(OOMDetailsSchema);" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "dotnet_interactive": { - "language": "csharp" - }, - "polyglot_notebook": { - "kernelName": "csharp" - }, - "vscode": { - "languageId": "polyglot-notebook" - } - }, - "outputs": [ - { - "ename": "Error", - "evalue": "System.Exception: Event OOMDetails does not have matching size\r\n at GC.Analysis.API.DynamicEvents.DynamicEventObject..ctor(GCDynamicEvent dynamicEvent, CompiledSchema schema) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 218\r\n at GC.Analysis.API.DynamicEvents.DynamicIndex..ctor(List`1 dynamicEvents) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 194\r\n at GC.Analysis.API.DynamicEvents.TraceGCExtensions.DynamicEvents(TraceGC traceGC) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 20\r\n at Submission#10.<>c.<>b__0_0(TraceGC gc)\r\n at GC.Analysis.API.GoodLinq.Select[T,R](IEnumerable`1 data, Func`2 map) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\Common.cs:line 98\r\n at Submission#10.<>d__0.MoveNext()\r\n--- End of stack trace from previous location ---\r\n at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)", - "output_type": "error", - "traceback": [ - "System.Exception: Event OOMDetails does not have matching size\r\n", - " at GC.Analysis.API.DynamicEvents.DynamicEventObject..ctor(GCDynamicEvent dynamicEvent, CompiledSchema schema) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 218\r\n", - " at GC.Analysis.API.DynamicEvents.DynamicIndex..ctor(List`1 dynamicEvents) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 194\r\n", - " at GC.Analysis.API.DynamicEvents.TraceGCExtensions.DynamicEvents(TraceGC traceGC) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\DynamicEvents\\DynamicEvents.cs:line 20\r\n", - " at Submission#10.<>c.<>b__0_0(TraceGC gc)\r\n", - " at GC.Analysis.API.GoodLinq.Select[T,R](IEnumerable`1 data, Func`2 map) in C:\\Users\\musharm\\source\\repos\\performance_oom\\src\\benchmarks\\gc\\GC.Infrastructure\\GC.Analysis.API\\Common.cs:line 98\r\n", - " at Submission#10.<>d__0.MoveNext()\r\n", - "--- End of stack trace from previous location ---\r\n", - " at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)" - ] - } - ], - "source": [ - "gcData.GCs.Select(gc => gc.DynamicEvents().OOMDetails) " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "dotnet_interactive": { - "language": "csharp" - }, - "polyglot_notebook": { - "kernelName": "csharp" - }, - "vscode": { - "languageId": "polyglot-notebook" - } - }, - "outputs": [ - { - "ename": "Error", - "evalue": "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference\r\n at CallSite.Target(Closure, CallSite, Object)\r\n at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)\r\n at Submission#8.<>d__0.MoveNext()\r\n--- End of stack trace from previous location ---\r\n at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)", - "output_type": "error", - "traceback": [ - "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference\r\n", - " at CallSite.Target(Closure, CallSite, Object)\r\n", - " at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)\r\n", - " at Submission#8.<>d__0.MoveNext()\r\n", - "--- End of stack trace from previous location ---\r\n", - " at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)" - ] - } - ], - "source": [ - "Console.WriteLine($\"Elapsed Time between GCs for GC#2: {gcData.GCs[1].DynamicEvents().SizeAdaptationSample.ElapsedTimeBetweenGCs}\");\n", - "Console.WriteLine($\"TotalSOHStableSize for GC#4: {gcData.GCs[3].DynamicEvents().SizeAdaptationTuning.TotalSOHStableSize}\");" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".NET (C#)", - "language": "C#", - "name": ".net-csharp" - }, - "language_info": { - "file_extension": ".cs", - "mimetype": "text/x-csharp", - "name": "C#", - "pygments_lexer": "csharp", - "version": "9.0" - }, - "orig_nbformat": 4, - "polyglot_notebook": { - "kernelInfo": { - "defaultKernelName": "csharp", - "items": [ - { - "aliases": [], - "name": "csharp" - } - ] - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From bba9d6f1c76377a3d4c542abb27cb70ee302946a Mon Sep 17 00:00:00 2001 From: Mukund Raghav Sharma Date: Mon, 13 Jan 2025 14:13:17 -0800 Subject: [PATCH 3/3] Fixed up the events --- .../GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs index 2d6048d4099..798e7b894eb 100644 --- a/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs +++ b/src/benchmarks/gc/GC.Infrastructure/GC.Analysis.API/DynamicEvents/GCDynamicEvents.cs @@ -70,14 +70,13 @@ internal static class GCDynamicEvents { KeyValuePair.Create("version", typeof(ushort)), KeyValuePair.Create("GCIndex", typeof(ulong)), - KeyValuePair.Create("Allocated", typeof(byte)), - KeyValuePair.Create("Reserved", typeof(byte)), KeyValuePair.Create("AllocSize", typeof(ulong)), KeyValuePair.Create("Reason", typeof(byte)), KeyValuePair.Create("FailureGetMemory", typeof(byte)), KeyValuePair.Create("Size", typeof(ulong)), KeyValuePair.Create("IsLOH", typeof(byte)), KeyValuePair.Create("MemoryLoad", typeof(uint)), + KeyValuePair.Create("AvailablePageMemoryMB", typeof(ulong)), }, MaxOccurrence = 1000 // TODO: This should be the max of the number of heaps allowed. };