From 8901a0b2092b951b5048ac556f2909d3b7f04024 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 21 Oct 2021 21:52:22 +0200 Subject: [PATCH 01/12] [wasm] Add console version of browser-bench sample --- src/mono/sample/wasm/Directory.Build.targets | 2 +- .../sample/wasm/browser-bench/BenchTask.cs | 2 + src/mono/sample/wasm/browser-bench/Browser.cs | 13 +++ src/mono/sample/wasm/browser-bench/Console.cs | 74 ++++++++++++++++ src/mono/sample/wasm/browser-bench/Program.cs | 86 ++++++++++++------- .../Wasm.Browser.Bench.Sample.csproj | 3 + .../Wasm.Console.Bench.Sample.csproj | 20 +++++ .../sample/wasm/browser-bench/WebSocket.cs | 1 + src/mono/sample/wasm/browser-bench/index.html | 3 +- .../wasm/console/Wasm.Console.Sample.csproj | 1 + 10 files changed, 171 insertions(+), 34 deletions(-) create mode 100644 src/mono/sample/wasm/browser-bench/Browser.cs create mode 100644 src/mono/sample/wasm/browser-bench/Console.cs create mode 100644 src/mono/sample/wasm/browser-bench/Wasm.Console.Bench.Sample.csproj diff --git a/src/mono/sample/wasm/Directory.Build.targets b/src/mono/sample/wasm/Directory.Build.targets index bc7f6b24b0ba27..8f9214c2ff166a 100644 --- a/src/mono/sample/wasm/Directory.Build.targets +++ b/src/mono/sample/wasm/Directory.Build.targets @@ -14,7 +14,7 @@ - + diff --git a/src/mono/sample/wasm/browser-bench/BenchTask.cs b/src/mono/sample/wasm/browser-bench/BenchTask.cs index fd95e453b3127a..72c86e85e9711d 100644 --- a/src/mono/sample/wasm/browser-bench/BenchTask.cs +++ b/src/mono/sample/wasm/browser-bench/BenchTask.cs @@ -12,6 +12,8 @@ abstract class BenchTask readonly List results = new(); public Regex pattern; + public virtual bool BrowserOnly => false; + public async Task RunBatch(List results, int measurementIdx, int milliseconds = 5000) { var measurement = Measurements[measurementIdx]; diff --git a/src/mono/sample/wasm/browser-bench/Browser.cs b/src/mono/sample/wasm/browser-bench/Browser.cs new file mode 100644 index 00000000000000..3dcbe36a844b83 --- /dev/null +++ b/src/mono/sample/wasm/browser-bench/Browser.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Sample +{ + public partial class Test + { + public static int Main(string[] args) + { + return 0; + } + } +} diff --git a/src/mono/sample/wasm/browser-bench/Console.cs b/src/mono/sample/wasm/browser-bench/Console.cs new file mode 100644 index 00000000000000..005ba9df4f4f7b --- /dev/null +++ b/src/mono/sample/wasm/browser-bench/Console.cs @@ -0,0 +1,74 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +using Mono.Options; + +namespace Sample +{ + public partial class Test + { + static string tasksArg; + + static List ProcessArguments(string[] args) + { + var help = false; + var options = new OptionSet { + $"Usage: wa-info.exe OPTIONS* file.wasm [file2.wasm ...]", + "", + "Provides information about WebAssembly file(s)", + "", + "Copyright 2021 Microsoft Corporation", + "", + "Options:", + { "h|help|?", + "Show this message and exit", + v => help = v != null }, + { "t|tasks=", + "Filter comma separated tasks and its measurements matching, TASK[:REGEX][,TASK[:REGEX],...]. Example: -t Json:non,Exceptions:Inline", + v => tasksArg = v }, + }; + + var remaining = options.Parse(args); + + if (help || remaining.Count > 0) + { + options.WriteOptionDescriptions(Console.Out); + + Environment.Exit(0); + } + + return remaining; + } + + public static async Task Main(string[] args) + { + ProcessArguments(args); + + if (tasksArg != null) + SetTasks(tasksArg); + + string output; + + instance.formatter = new PlainFormatter(); + instance.tasks.RemoveAll(t => t.BrowserOnly); + + if (instance.tasks.Count < 1) + { + Console.WriteLine("No task(s) to run"); + Environment.Exit(0); + } + + do + { + output = await instance.RunTasks(); + Console.Write(output); + } while (!string.IsNullOrEmpty(output)); + + return 0; + } + } +} diff --git a/src/mono/sample/wasm/browser-bench/Program.cs b/src/mono/sample/wasm/browser-bench/Program.cs index 71e522649655b5..a9f7655ff9e362 100644 --- a/src/mono/sample/wasm/browser-bench/Program.cs +++ b/src/mono/sample/wasm/browser-bench/Program.cs @@ -11,24 +11,21 @@ namespace Sample { - public class Test + public partial class Test { - public static void Main(string[] args) - { - } - - BenchTask[] tasks = + List tasks = new() { new ExceptionsTask(), new JsonTask (), new WebSocketTask() }; - static Test instance = new Test (); + static Test instance = new Test(); + Formatter formatter = new HTMLFormatter(); [MethodImpl(MethodImplOptions.NoInlining)] public static Task RunBenchmark() { - return instance.RunTasks (); + return instance.RunTasks(); } [MethodImpl(MethodImplOptions.NoInlining)] @@ -46,14 +43,15 @@ public static void SetTasks(string taskNames) var idx = names[i].IndexOf(':'); string name; - if (idx == -1) { + if (idx == -1) + { name = names[i]; pattern = null; } else { name = names[i].Substring(0, idx); - pattern = new Regex (names[i][(idx + 1)..]); + pattern = new Regex(names[i][(idx + 1)..]); } var taskType = Type.GetType($"Sample.{name}Task"); @@ -62,10 +60,10 @@ public static void SetTasks(string taskNames) var task = (BenchTask)Activator.CreateInstance(taskType); task.pattern = pattern; - tasksList.Add (task); + tasksList.Add(task); } - instance.tasks = tasksList.ToArray (); + instance.tasks = tasksList; } int taskCounter = 0; @@ -80,11 +78,12 @@ BenchTask Task List results = new(); bool resultsReturned; - bool NextTask () + bool NextTask() { bool hasMeasurement; - do { - if (taskCounter == tasks.Length) + do + { + if (taskCounter == tasks.Count) return false; Task = tasks[taskCounter]; @@ -100,7 +99,7 @@ bool NextTask () return true; } - bool NextMeasurement () + bool NextMeasurement() { runIdx = 0; @@ -122,45 +121,46 @@ public async Task RunTasks() if (resultsReturned) return ""; - if (taskCounter == 0) { - NextTask (); - return "Benchmark started
"; + if (taskCounter == 0) + { + NextTask(); + return $"Benchmark started{formatter.NewLine}"; } if (measurementIdx == -1) return ResultsSummary(); - if (runIdx >= Task.Measurements [measurementIdx].NumberOfRuns && !NextMeasurement() && !NextTask ()) - return ResultsSummary(); + if (runIdx >= Task.Measurements[measurementIdx].NumberOfRuns && !NextMeasurement() && !NextTask()) + return ResultsSummary(); runIdx++; - return await Task.RunBatch(results, measurementIdx); + return $"{await Task.RunBatch(results, measurementIdx)}{formatter.NewLine}"; } - string ResultsSummary () + string ResultsSummary() { - Dictionary minTimes = new Dictionary (); + Dictionary minTimes = new Dictionary(); StringBuilder sb = new(); foreach (var result in results) { double t; var key = $"{result.taskName}, {result.measurementName}"; - t = result.span.TotalMilliseconds/result.steps; + t = result.span.TotalMilliseconds / result.steps; if (minTimes.ContainsKey(key)) - t = Math.Min (minTimes[key], t); + t = Math.Min(minTimes[key], t); minTimes[key] = t; } - sb.Append("

Summary

"); + sb.Append($"{formatter.NewLine}Summary{formatter.NewLine}"); foreach (var key in minTimes.Keys) { - sb.Append($"{key}: {minTimes [key]}ms
"); + sb.Append($"{key}: {minTimes[key]}ms{formatter.NewLine}"); } - sb.Append("

.md

| measurement | time |
|-:|-:|
"); + sb.Append($"{formatter.NewLine}.md{formatter.NewLine}{formatter.CodeStart}| measurement | time |{formatter.NewLine}|-:|-:|{formatter.NewLine}"); foreach (var key in minTimes.Keys) { var time = minTimes[key]; @@ -170,13 +170,37 @@ string ResultsSummary () time *= 1000; unit = "us"; } - sb.Append($"| {key.Replace('_',' '),38} | {time,10:F4}{unit} |
".Replace (" ", " ")); + sb.Append($"| {key.Replace('_', ' '),38} | {time,10:F4}{unit} |{formatter.NewLine}".Replace(" ", formatter.NonBreakingSpace)); } - sb.Append("
"); + sb.Append("{formatter.CodeEnd}"); resultsReturned = true; return sb.ToString(); } } + + public abstract class Formatter + { + public abstract string NewLine { get; } + public abstract string NonBreakingSpace { get; } + public abstract string CodeStart { get; } + public abstract string CodeEnd { get; } + } + + public class PlainFormatter : Formatter + { + override public string NewLine => "\n"; + override public string NonBreakingSpace => " "; + override public string CodeStart => ""; + override public string CodeEnd => ""; + } + + public class HTMLFormatter : Formatter + { + override public string NewLine => "
"; + override public string NonBreakingSpace => " "; + override public string CodeStart => ""; + override public string CodeEnd => ""; + } } diff --git a/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj b/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj index 01b36c00dc7ce2..86aae1dad6721e 100644 --- a/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj +++ b/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj @@ -2,14 +2,17 @@ true runtime.js + true + <_SampleProject>Wasm.Browser.Bench.Sample.csproj + <_SampleAssembly> Wasm.Browser.Bench.Sample.dll diff --git a/src/mono/sample/wasm/browser-bench/Wasm.Console.Bench.Sample.csproj b/src/mono/sample/wasm/browser-bench/Wasm.Console.Bench.Sample.csproj new file mode 100644 index 00000000000000..e9e461f5ba8923 --- /dev/null +++ b/src/mono/sample/wasm/browser-bench/Wasm.Console.Bench.Sample.csproj @@ -0,0 +1,20 @@ + + + true + $(MonoProjectRoot)\wasm\runtime-test.js + true + true + + + + <_SampleProject>Wasm.Console.Bench.Sample.csproj + <_SampleAssembly>Wasm.Console.Bench.Sample.dll + + + + + + + + + diff --git a/src/mono/sample/wasm/browser-bench/WebSocket.cs b/src/mono/sample/wasm/browser-bench/WebSocket.cs index e91d2391916510..d163537f7c593e 100644 --- a/src/mono/sample/wasm/browser-bench/WebSocket.cs +++ b/src/mono/sample/wasm/browser-bench/WebSocket.cs @@ -20,6 +20,7 @@ class WebSocketTask : BenchTask public override string Name => "WebSocket"; public override Measurement[] Measurements => measurements; + public override bool BrowserOnly => true; Measurement[] measurements; diff --git a/src/mono/sample/wasm/browser-bench/index.html b/src/mono/sample/wasm/browser-bench/index.html index 136e400e70c2ae..f70c38c091d51f 100644 --- a/src/mono/sample/wasm/browser-bench/index.html +++ b/src/mono/sample/wasm/browser-bench/index.html @@ -41,10 +41,9 @@ promise.then(ret => { document.getElementById("out").innerHTML += ret; if (ret.length > 0) { - document.getElementById("out").innerHTML += "
"; setTimeout(function () { yieldBench(); }, 0); } else { - document.getElementById("out").innerHTML += "
Finished"; + document.getElementById("out").innerHTML += "Finished"; } }); } diff --git a/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj b/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj index 7097ef20ab9bd6..bef2564ad4ac5a 100644 --- a/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj +++ b/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj @@ -7,6 +7,7 @@ <_SampleProject>Wasm.Console.Sample.csproj + <_SampleAssembly> Wasm.Console.Sample.dll From 2daf4a05a79da14f42b6ca9a9cea2ac9790ec34e Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 21 Oct 2021 22:00:59 +0200 Subject: [PATCH 02/12] Don't generate v8 script for browser project --- .../sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj b/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj index 86aae1dad6721e..3808cd218336c2 100644 --- a/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj +++ b/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj @@ -2,7 +2,6 @@ true runtime.js - true From 6a494144e012afc2d11a2654dad7927819a49194 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 21 Oct 2021 22:05:01 +0200 Subject: [PATCH 03/12] Fix option set --- src/mono/sample/wasm/browser-bench/Console.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mono/sample/wasm/browser-bench/Console.cs b/src/mono/sample/wasm/browser-bench/Console.cs index 005ba9df4f4f7b..6adb5ecf736bc6 100644 --- a/src/mono/sample/wasm/browser-bench/Console.cs +++ b/src/mono/sample/wasm/browser-bench/Console.cs @@ -17,9 +17,7 @@ static List ProcessArguments(string[] args) { var help = false; var options = new OptionSet { - $"Usage: wa-info.exe OPTIONS* file.wasm [file2.wasm ...]", - "", - "Provides information about WebAssembly file(s)", + "Simple mono wasm benchmark", "", "Copyright 2021 Microsoft Corporation", "", From e22c2e91f106aea586733af085de971a8fbe55bf Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 12:48:50 +0100 Subject: [PATCH 04/12] Changes for linux/mac --- .../browser-bench/{ => Console}/Console.cs | 0 .../wasm/browser-bench/Console/Makefile | 12 +++++ .../Wasm.Console.Bench.Sample.csproj | 3 +- src/mono/sample/wasm/browser-bench/README.md | 45 +++++++++++++++++++ .../Wasm.Browser.Bench.Sample.csproj | 2 +- src/mono/sample/wasm/console/Makefile | 1 + src/mono/sample/wasm/wasm.mk | 4 +- 7 files changed, 63 insertions(+), 4 deletions(-) rename src/mono/sample/wasm/browser-bench/{ => Console}/Console.cs (100%) create mode 100644 src/mono/sample/wasm/browser-bench/Console/Makefile rename src/mono/sample/wasm/browser-bench/{ => Console}/Wasm.Console.Bench.Sample.csproj (91%) create mode 100644 src/mono/sample/wasm/browser-bench/README.md diff --git a/src/mono/sample/wasm/browser-bench/Console.cs b/src/mono/sample/wasm/browser-bench/Console/Console.cs similarity index 100% rename from src/mono/sample/wasm/browser-bench/Console.cs rename to src/mono/sample/wasm/browser-bench/Console/Console.cs diff --git a/src/mono/sample/wasm/browser-bench/Console/Makefile b/src/mono/sample/wasm/browser-bench/Console/Makefile new file mode 100644 index 00000000000000..bab3c8cdf9b89f --- /dev/null +++ b/src/mono/sample/wasm/browser-bench/Console/Makefile @@ -0,0 +1,12 @@ +TOP=../../../../../.. + +include ../../wasm.mk + +ifneq ($(AOT),) +override MSBUILD_ARGS+=/p:RunAOTCompilation=true +endif + +PROJECT_NAME=Wasm.Console.Bench.Sample.csproj +CONSOLE_DLL=Wasm.Console.Bench.Sample.dll + +run: run-console diff --git a/src/mono/sample/wasm/browser-bench/Wasm.Console.Bench.Sample.csproj b/src/mono/sample/wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj similarity index 91% rename from src/mono/sample/wasm/browser-bench/Wasm.Console.Bench.Sample.csproj rename to src/mono/sample/wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj index e9e461f5ba8923..a422bcfc6f94ff 100644 --- a/src/mono/sample/wasm/browser-bench/Wasm.Console.Bench.Sample.csproj +++ b/src/mono/sample/wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj @@ -14,7 +14,8 @@ - + + diff --git a/src/mono/sample/wasm/browser-bench/README.md b/src/mono/sample/wasm/browser-bench/README.md new file mode 100644 index 00000000000000..39134baf772fd9 --- /dev/null +++ b/src/mono/sample/wasm/browser-bench/README.md @@ -0,0 +1,45 @@ +## Simple wasm benchmark sample app + +Runs various performance measurements. It is intended as a quick tool to measure mono/wasm performance +in dotnet/runtime repo, using in-tree runtime. Can be used to check performance impact of runtime changes +and the summary is provided in [.md](https://guides.github.com/features/mastering-markdown/) markdown format, +suitable for commit messages and PR descriptions. + +Browser and console versions are available. + +### Running the benchmark + +To run the benchmark on linux/mac: + + make build + make run + +can be used in the browser-bench/ and also in the browser-bench/Console/. + +Example console output: + + > make run + console.debug: MONO_WASM: Initializing mono runtime + console.debug: MONO_WASM: ICU data archive(s) loaded, disabling invariant mode + console.debug: mono_wasm_runtime_ready fe00e07a-5519-4dfe-b35a-f867dbaf2e28 + console.info: Initializing..... + Benchmark started + Exceptions, NoExceptionHandling count: 8344090, per call: 6.807213249138013E-05ms, total: 0.568s + Exceptions, NoExceptionHandling count: 8500347, per call: 6.940893118833855E-05ms, total: 0.59s + ... + .md + | measurement | time | + |-:|-:| + | Exceptions, NoExceptionHandling | 0.0680us | + | Exceptions, TryCatch | 0.0723us | + | Exceptions, TryCatchThrow | 0.0035ms | + | Exceptions, TryCatchFilter | 0.0848us | + | Exceptions, TryCatchFilterInline | 0.0659us | + | Exceptions, TryCatchFilterThrow | 0.0046ms | + | Exceptions, TryCatchFilterThrowApplies | 0.0036ms | + | Json, non-ASCII text serialize | 15.3855ms | + | Json, non-ASCII text deserialize | 24.7299ms | + | Json, small serialize | 0.2980ms | + | Json, small deserialize | 0.5080ms | + | Json, large serialize | 95.3333ms | + | Json, large deserialize | 141.4737ms | diff --git a/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj b/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj index 3808cd218336c2..0428181aade2bb 100644 --- a/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj +++ b/src/mono/sample/wasm/browser-bench/Wasm.Browser.Bench.Sample.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/mono/sample/wasm/console/Makefile b/src/mono/sample/wasm/console/Makefile index d68cd314be01af..20c9da20ad0be5 100644 --- a/src/mono/sample/wasm/console/Makefile +++ b/src/mono/sample/wasm/console/Makefile @@ -11,5 +11,6 @@ DOTNET_MONO_LOG_LEVEL=--setenv=MONO_LOG_LEVEL=debug endif PROJECT_NAME=Wasm.Console.Sample.csproj +CONSOLE_DLL=Wasm.Console.Sample.dll run: run-console diff --git a/src/mono/sample/wasm/wasm.mk b/src/mono/sample/wasm/wasm.mk index c9bbdd00a41d03..1a34376dbc26df 100644 --- a/src/mono/sample/wasm/wasm.mk +++ b/src/mono/sample/wasm/wasm.mk @@ -26,8 +26,8 @@ run-browser: echo "The tool dotnet-serve could not be found. Install with: $(DOTNET) tool install --global dotnet-serve"; \ exit 1; \ else \ - $(DOTNET) serve -d:bin/$(CONFIG)/AppBundle -p:8000; \ + $(DOTNET) serve -d:bin/$(CONFIG)/AppBundle -o -p:8000; \ fi run-console: - cd bin/$(CONFIG)/AppBundle && ~/.jsvu/v8 --stack-trace-limit=1000 --single-threaded --expose_wasm runtime.js -- $(DOTNET_MONO_LOG_LEVEL) --run Wasm.Console.Sample.dll + cd bin/$(CONFIG)/AppBundle && ~/.jsvu/v8 --stack-trace-limit=1000 --single-threaded --expose_wasm runtime.js -- $(DOTNET_MONO_LOG_LEVEL) --run $(CONSOLE_DLL) From 2810dae1eff8ee08fe4e6a2332526d8033fdfb78 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 12:54:14 +0100 Subject: [PATCH 05/12] Add link to bench sample README --- src/mono/wasm/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mono/wasm/README.md b/src/mono/wasm/README.md index c4ad2cf2edb793..6d2ad61e085eab 100644 --- a/src/mono/wasm/README.md +++ b/src/mono/wasm/README.md @@ -155,6 +155,10 @@ The samples in `src/mono/sample/wasm` can be build and run like this: To build and run the samples with AOT, add `/p:RunAOTCompilation=true` to the above command lines. +* bench sample + +Also check [bench](../sample/wasm/browser-bench/README.md) sample to measure mono/wasm runtime performance. + ### Upgrading Emscripten Bumping Emscripten version involves these steps: From 1c543264ae61f0a5d2eed4070332e15eff06e07e Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 13:01:55 +0100 Subject: [PATCH 06/12] Pass ARGS to the console version Add info about filtering and options to the README --- src/mono/sample/wasm/browser-bench/README.md | 20 ++++++++++++++++++++ src/mono/sample/wasm/wasm.mk | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/mono/sample/wasm/browser-bench/README.md b/src/mono/sample/wasm/browser-bench/README.md index 39134baf772fd9..b7272aadf60d9e 100644 --- a/src/mono/sample/wasm/browser-bench/README.md +++ b/src/mono/sample/wasm/browser-bench/README.md @@ -43,3 +43,23 @@ Example console output: | Json, small deserialize | 0.5080ms | | Json, large serialize | 95.3333ms | | Json, large deserialize | 141.4737ms | + +### Filter jobs/measurements + +The `-t` option can be used to run subset of jobs/measurements like this: + + make run ARGS="-t Json:non,Exceptions:Inline" + +### Console options + + > make run ARGS=-h + ... + Simple mono wasm benchmark + + Copyright 2021 Microsoft Corporation + + Options: + -h, --help, -? Show this message and exit + -t, --tasks=VALUE Filter comma separated tasks and its measurements + matching, TASK[:REGEX][,TASK[:REGEX],...]. + Example: -t Json:non,Exceptions:Inline diff --git a/src/mono/sample/wasm/wasm.mk b/src/mono/sample/wasm/wasm.mk index 1a34376dbc26df..fb11cf97570352 100644 --- a/src/mono/sample/wasm/wasm.mk +++ b/src/mono/sample/wasm/wasm.mk @@ -30,4 +30,4 @@ run-browser: fi run-console: - cd bin/$(CONFIG)/AppBundle && ~/.jsvu/v8 --stack-trace-limit=1000 --single-threaded --expose_wasm runtime.js -- $(DOTNET_MONO_LOG_LEVEL) --run $(CONSOLE_DLL) + cd bin/$(CONFIG)/AppBundle && ~/.jsvu/v8 --stack-trace-limit=1000 --single-threaded --expose_wasm runtime.js -- $(DOTNET_MONO_LOG_LEVEL) --run $(CONSOLE_DLL) $(ARGS) From 2104aab648c427430e78e9c22bff51bac74d2c14 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 13:07:00 +0100 Subject: [PATCH 07/12] Show how the table will looks like --- src/mono/sample/wasm/browser-bench/README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/mono/sample/wasm/browser-bench/README.md b/src/mono/sample/wasm/browser-bench/README.md index b7272aadf60d9e..df7c8e8b1ed744 100644 --- a/src/mono/sample/wasm/browser-bench/README.md +++ b/src/mono/sample/wasm/browser-bench/README.md @@ -44,6 +44,26 @@ Example console output: | Json, large serialize | 95.3333ms | | Json, large deserialize | 141.4737ms | +The `.md` output will look like this: + +| measurement | time | +|-:|-:| +| Exceptions, NoExceptionHandling | 0.0680us | +| Exceptions, TryCatch | 0.0723us | +| Exceptions, TryCatchThrow | 0.0035ms | +| Exceptions, TryCatchFilter | 0.0848us | +| Exceptions, TryCatchFilterInline | 0.0659us | +| Exceptions, TryCatchFilterThrow | 0.0046ms | +| Exceptions, TryCatchFilterThrowApplies | 0.0036ms | +| Json, non-ASCII text serialize | 15.3855ms | +| Json, non-ASCII text deserialize | 24.7299ms | +| Json, small serialize | 0.2980ms | +| Json, small deserialize | 0.5080ms | +| Json, large serialize | 95.3333ms | +| Json, large deserialize | 141.4737ms | + +Multiple results can be also easily combined together in text editor to have a table with measurements next to each other for comparison. + ### Filter jobs/measurements The `-t` option can be used to run subset of jobs/measurements like this: From 2a2e8c9b5231796dcb16c0578db6fed37108aa43 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 17:51:59 +0100 Subject: [PATCH 08/12] Do not sign the assembly To avoid CSC : error CS8002: Referenced assembly 'Mono.Options, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null' does not have a strong name. --- .../wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mono/sample/wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj b/src/mono/sample/wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj index a422bcfc6f94ff..d60474926aa917 100644 --- a/src/mono/sample/wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj +++ b/src/mono/sample/wasm/browser-bench/Console/Wasm.Console.Bench.Sample.csproj @@ -9,6 +9,7 @@ <_SampleProject>Wasm.Console.Bench.Sample.csproj <_SampleAssembly>Wasm.Console.Bench.Sample.dll + False From e55e42fd9f6e1f5518af60a660e4c161eee84f10 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 18:27:15 +0100 Subject: [PATCH 09/12] Add examples how to run it on windows --- src/mono/sample/wasm/Directory.Build.targets | 2 +- src/mono/sample/wasm/browser-bench/README.md | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/mono/sample/wasm/Directory.Build.targets b/src/mono/sample/wasm/Directory.Build.targets index 8f9214c2ff166a..3ddadf53edc593 100644 --- a/src/mono/sample/wasm/Directory.Build.targets +++ b/src/mono/sample/wasm/Directory.Build.targets @@ -14,7 +14,7 @@ - + diff --git a/src/mono/sample/wasm/browser-bench/README.md b/src/mono/sample/wasm/browser-bench/README.md index df7c8e8b1ed744..84fd53fa5d928e 100644 --- a/src/mono/sample/wasm/browser-bench/README.md +++ b/src/mono/sample/wasm/browser-bench/README.md @@ -11,11 +11,15 @@ Browser and console versions are available. To run the benchmark on linux/mac: - make build - make run + > make build + > make run can be used in the browser-bench/ and also in the browser-bench/Console/. +To run the benchmark on windows: + + > dotnet build /t:RunSample + Example console output: > make run @@ -66,9 +70,12 @@ Multiple results can be also easily combined together in text editor to have a t ### Filter jobs/measurements -The `-t` option can be used to run subset of jobs/measurements like this: +The `-t` option can be used to run subset of jobs/measurements like this, 1st line linux/mac, 2nd line windows: + + > make run ARGS="-t Json:non,Exceptions:Inline" + > dotnet build /v:n /t:RunSample /p:Args="-t Json:non%2cExceptions:Inline" - make run ARGS="-t Json:non,Exceptions:Inline" +Note the escaped `,` character (`%2c`) in the dotnet property above. ### Console options From e4c45c4ae77aa8bd9dc67522304bcc757d8a39a0 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 18:34:19 +0100 Subject: [PATCH 10/12] Fix interpolated string --- src/mono/sample/wasm/browser-bench/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/sample/wasm/browser-bench/Program.cs b/src/mono/sample/wasm/browser-bench/Program.cs index a9f7655ff9e362..441a5b85105117 100644 --- a/src/mono/sample/wasm/browser-bench/Program.cs +++ b/src/mono/sample/wasm/browser-bench/Program.cs @@ -172,7 +172,7 @@ string ResultsSummary() } sb.Append($"| {key.Replace('_', ' '),38} | {time,10:F4}{unit} |{formatter.NewLine}".Replace(" ", formatter.NonBreakingSpace)); } - sb.Append("{formatter.CodeEnd}"); + sb.Append($"{formatter.CodeEnd}"); resultsReturned = true; From c9f61612e9b4d2f05ed19a169edfe5247df66f59 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Thu, 4 Nov 2021 18:36:10 +0100 Subject: [PATCH 11/12] Improve formatting --- src/mono/sample/wasm/browser-bench/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/sample/wasm/browser-bench/README.md b/src/mono/sample/wasm/browser-bench/README.md index 84fd53fa5d928e..3f4f7950779024 100644 --- a/src/mono/sample/wasm/browser-bench/README.md +++ b/src/mono/sample/wasm/browser-bench/README.md @@ -14,7 +14,7 @@ To run the benchmark on linux/mac: > make build > make run -can be used in the browser-bench/ and also in the browser-bench/Console/. +can be used in the `browser-bench/` and also in the `browser-bench/Console/`. To run the benchmark on windows: From f6ab77a273cd8513a106eb7ebf96b7084efb479f Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Mon, 8 Nov 2021 09:56:23 +0100 Subject: [PATCH 12/12] Remove unwanted space --- src/mono/sample/wasm/console/Wasm.Console.Sample.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj b/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj index bef2564ad4ac5a..237718ebecb449 100644 --- a/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj +++ b/src/mono/sample/wasm/console/Wasm.Console.Sample.csproj @@ -7,7 +7,7 @@ <_SampleProject>Wasm.Console.Sample.csproj - <_SampleAssembly> Wasm.Console.Sample.dll + <_SampleAssembly>Wasm.Console.Sample.dll