BenchmarkDotNet v0.13.2
Highlights
In BenchmarkDotNet v0.13.2, we have implemented support for:
- .NET 7
- NativeAOT
- .NET Framework 4.8.1
We have also introduced new features and improvements including:
- Possibility to hide selected columns,
- Allocation Ratio column,
- Logging progress and estimated finish time,
- ARM64 support for
BenchmarkDotNet.Diagnostics.Windows
package, - Printing Hardware Intrinsics information,
- Glob filters support for DisassemblyDiagnoser.
Of course, this release includes dozens of other improvements and bug fixes!
Our special thanks go to @mawosoft, @YegorStepanov and @radical who fixed a LOT of really nasty bugs.
Supported technologies
.NET 7 and .NET Framework 4.8.1
.NET 4.8.1 has been released earlier this month, while .NET 7 should land in autumn this year. Now you can use BenchmarkDotNet to compare both!
BenchmarkDotNet=v0.13.1.1845-nightly, OS=Windows 11 (10.0.22622.575)
Microsoft SQ1 3.0 GHz, 1 CPU, 8 logical and 8 physical cores
.NET SDK=7.0.100-preview.6.22352.1
[Host] : .NET 7.0.0 (7.0.22.32404), Arm64 RyuJIT AdvSIMD
Job-QJVIDT : .NET 7.0.0 (7.0.22.32404), Arm64 RyuJIT AdvSIMD
Job-FNNXOY : .NET Framework 4.8.1 (4.8.9032.0), Arm64 RyuJIT
Method | Runtime | Mean | Allocated |
---|---|---|---|
BinaryTrees_2 | .NET 7.0 | 193.6 ms | 227.33 MB |
BinaryTrees_2 | .NET Framework 4.8.1 | 192.8 ms | 228.01 MB |
Credit for adding .NET 7 support in #1816 goes to @am11. @adamsitnik implemented .NET 4.8.1 support in #2044 and #2067. Big thanks to @MichalPetryka who was using preview versions of BenchmarkDotNet and reported a bug related to .NET 4.8.1 support: #2059 that got fixed before we released a new version.
NativeAOT
We are really excited to see the experimental CoreRT project grow and become officially supported by Microsoft (under new name: NativeAOT)! You can read more about it here. Implementing and improving the support was a combined effort of multiple contributors that spawned across multiple repositories:
- @MichalStrehovsky: #66290 in dotnet/runtime, #2020 in dotnet/BenchmarkDotNet, #2046 in dotnet/BenchmarkDotNet
- @hez2010: #66650 in dotnet/runtime
- @Beau-Gosse-dev: #1955 in dotnet/BenchmarkDotNet
- @adamsitnik: #1960 in dotnet/BenchmarkDotNet, #1965 in dotnet/BenchmarkDotNet, #1972 in dotnet/BenchmarkDotNet, #1973 in dotnet/BenchmarkDotNet, #1994 in dotnet/BenchmarkDotNet, #1997 in dotnet/BenchmarkDotNet, #2045 in dotnet/BenchmarkDotNet, #2068 in dotnet/BenchmarkDotNet
- @kant2002: #1976 in dotnet/BenchmarkDotNet, #1979 in dotnet/BenchmarkDotNet
- @jkotas: #68038 in dotnet/runtime, #68142 in dotnet/runtime, #68249 in dotnet/runtime, #68308 in dotnet/runtime, #68375 in dotnet/runtime
- @MichalPetryka: #2065 in dotnet/BenchmarkDotNet
As every AOT solution, NativeAOT has some limitations like limited reflection support or lack of dynamic assembly loading. Because of that, the host process (what you run from command line) is never an AOT process, but just a regular .NET process. This process (called Host process) uses reflection to read benchmarks metadata (find all [Benchmark]
methods etc.), generates a new project that references the benchmarks and compiles it using ILCompiler. The boilerplate code is not using reflection, so the project is built with TrimmerDefaultAction=link
(we have greatly reduced build time thanks to that). Such compilation produces a native executable, which is later started by the Host process. This process (called Benchmark or Child process) performs the actual benchmarking and reports the results back to the Host process. By default BenchmarkDotNet uses the latest version of Microsoft.DotNet.ILCompiler
to build the NativeAOT benchmark according to this instructions. Moreover, BenchmarkDotNet by default uses current machines CPU features (change: #1994, discussion: #2061) and if you don't like this behavior, you can disable it.
This is why you need to:
- install pre-requisites required by NativeAOT compiler
- target .NET to be able to run NativeAOT benchmarks (example:
<TargetFramework>net7.0</TargetFramework>
in the .csproj file) - run the app as a .NET process (example:
dotnet run -c Release -f net7.0
). - specify the NativeAOT runtime in an explicit way, either by using console line arguments
--runtimes nativeaot7.0
(the recommended approach), or by using[SimpleJob]
attribute or by using the fluent Job config APIJob.ShortRun.With(NativeAotRuntime.Net70)
:
dotnet run -c Release -f net7.0 --runtimes nativeaot7.0
For more examples please go to docs.
BenchmarkDotNet=v0.13.1.1845-nightly, OS=Windows 11 (10.0.22000.856/21H2)
AMD Ryzen Threadripper PRO 3945WX 12-Cores, 1 CPU, 24 logical and 12 physical cores
.NET SDK=7.0.100-rc.1.22423.16
[Host] : .NET 7.0.0 (7.0.22.42223), X64 RyuJIT AVX2
Job-KDVXET : .NET 7.0.0 (7.0.22.42223), X64 RyuJIT AVX2
Job-HFRAGK : .NET 7.0.0-rc.1.22424.9, X64 NativeAOT AVX2
Method | Runtime | Mean | Ratio | Allocated |
---|---|---|---|---|
BinaryTrees_2 | .NET 7.0 | 95.06 ms | 1.00 | 227.33 MB |
BinaryTrees_2 | NativeAOT 7.0 | 90.32 ms | 0.96 | 227.33 MB |
Some of .NET features are not supported by Native AOT, that is why you may want to filter them out using new [AotFilter]
attribute:
[AotFilter("Currently not supported due to missing metadata.")]
public class Xml_FromStream<T>
New features and improvements
Hiding Columns
In #1621 @marcnet80 has reduced the number of columns displayed when multiple runtimes are being compared.
In #1890 @YegorStepanov has implemented a set of new APIs that allow for hiding columns. It's also exposed via -h
and --hide
command line arguments.
[MemoryDiagnoser] // adds Gen0, Gen1, Gen2 and Allocated Bytes columns
[HideColumns(Column.Gen0, Column.Gen1, Column.Gen2)] // dont display GenX columns
public class IntroHidingColumns
{
[Benchmark]
public byte[] AllocateArray() => new byte[100_000];
}
Sample results without [HideColumns]
:
Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
---|---|---|---|---|---|---|---|
AllocateArray | 3.303 us | 0.0465 us | 0.0435 us | 31.2462 | 31.2462 | 31.2462 | 97.69 KB |
With:
Method | Mean | Error | StdDev | Allocated |
---|---|---|---|---|
AllocateArray | 3.489 us | 0.0662 us | 0.0763 us | 97.69 KB |
Imagine how much time @YegorStepanov has saved to all the people who so far were removing the columns manually from the results before publishing them on GitHub!
Allocation Ratio Column
In #1859 @YegorStepanov has added Allocation Ratio Column. It's enabled by default when MemoryDiagnoser
is used and one of the benchmarks is marked as [Benchmark(Baseline = true)]
or when there are multuple jobs defined and one of them is marked as baseline.
[MemoryDiagnoser]
public class AllocationColumnSample
{
[Benchmark(Baseline = true)]
[Arguments("test")]
public string Builder(string value)
{
StringBuilder sb = new (value);
for (int i = 0; i < 10; i++)
sb.Append(value);
return sb.ToString();
}
[Benchmark]
[Arguments("test")]
public string Concatenation(string value)
{
string result = value;
for (int i = 0; i < 10; i++)
result += value;
return result;
}
}
Method | value | Mean | Error | StdDev | Ratio | Gen 0 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|
Builder | test | 127.9 ns | 0.49 ns | 0.43 ns | 1.00 | 0.0544 | 456 B | 1.00 |
Concatenation | test | 120.2 ns | 0.94 ns | 0.88 ns | 0.94 | 0.0908 | 760 B | 1.67 |
Progress and estimated finish time
In #1909 @adamsitnik has added logging of progress and estimated finish time.
// ** Remained 5211 (99.9%) benchmark(s) to run. Estimated finish 2022-08-25 22:26 (9h 7m from now) **
arm64 support for BenchmarkDotNet.Diagnostics.Windows package
Due to the update to TraceEvent 3.0 BenchmarkDotNet.Diagnostics.Windows
package has now arm64 support. Which means that you can use EtwProfiler
and other ETW-based diagnosers on Windows arm64.
It would not be possible without @brianrob who implemented arm64 support for TraceEvent in #1533!
Hardware Intrinsics information
In #2051 @adamsitnik has extended the hardware information printed in the Summary table with Hardware Intrinsics information.
Sine the space in Summary table is quite limited, we full information is printed only in the log:
Special thanks to @tannergooding who provided a lot of very valuable feedback and @MichalPetryka who contributed an improvement #2066 for older runtimes.
Other improvements
- WASM toolchain has received a lot of improvements from various .NET Team members: #1769, #1936, #1938, #1982.
- Dependencies and TFMs updates: #1805, #1978, #2012, #2019, #2035.
- Ensure proper SummaryStyle handling implemented by @mawosoft in #1828.
- Preserving
EnablePreviewFeatures
project setting which gives the possibility to benchmark preview .NET features. Implemented by @kkokosa in #1842. - CI: Using non-deprecated macOS pool on Azure Pipelines, implemented by @akoeplinger in #1847
- CI: Updating Cake to 2.0.0, adopting frosting project style. Implemented by @AndreyAkinshin in #1865.
- Detecting ReSharper's Dynamic Program Analysis. Implemented by @adamsitnik in #1874.
- Preventing benchmark failure when some of the exporters fail. Implemented by @epeshk in #1902.
- Don't use the diagnosers when benchmarking has failed. Implemented by @adamsitnik in #1903.
- Ensuring the default order of benchmarks is the same as declared in source code. Implemented by @adamsitnik in #1907.
- Making
BuildTimeout
configurable. Implemented by @adamsitnik in #1906. - Notify users about private methods with Setup/Cleanup attributes. Implemented by @epeshk in #1912.
- Don't run Roslyn Analyzers for the generated code. Implemented by @adamsitnik in #1917.
- Ensure
WorkloadActionUnroll
and similar are optimized if possible. Implemented by @AndyAyersMS in #1935. - Don't use blocking acknowledgments when there is no need to. Implemented by @adamsitnik in #1940.
- Executor: Don't use Process.ExitCode, unless the process has exited. Implemented by @radical in #1947.
- Revise heuristic for initial jitting. Implemented by @AndyAyersMS in #1949.
- Allow logging build commands output. Implemented by @radical in #1950.
- Change Mono AOT mode to Normal AOT with LLVM JIT fall back. Implemented by @fanyang-mono in #1990.
Glob filters support for DisassemblyDiagnoser
So far, the disassembler was always loading the type that was generated by BDN, searching for the benchmark method, disassembling it and when encountered direct method calls, disassembling the called methods as well (if their depth was lesser or equal to max configured depth).
This was working fine, but only for direct method calls. For indirect, the disassembly was incomplete.
In #2072 @adamsitnik has added the possibility to filter methods disassembled by the DisassemblyDiagnoser
.
The users can now pass --disasmFilter $globPattern
and it's going to be applied to full signatures of all methods available for disassembling. Examples:
--disasmFilter *System.Text*
- disassemble allSystem.Text
methods.--disasmFilter *
- disassemble all possible methods.
Moreover, ClrMD was updated to v2 (#2040) and few disassembler bugs have been fixed (#2075, #2078). We are expecting that the disassembler will be more reliable now.
Docs and Samples improvements
Big thanks to @SnakyBeaky, @Distinctlyminty, @asaf92, @adamsitnik and @eiriktsarpalis who have improved our docs, samples and error messages!
#1776, #1797, #1850, #1861, #1939, #1974, #1997, #2042, #2050, #2068.
Bug fixes
- WASM: #1811, #1846, #1916, #1926, #1932.
- Diagnoser-provided Analysers weren't automatically added to Config. Fixed by @mawosoft in #1790.
- Exportes could been duplicated. Fixed by @workgroupengineering in #1796.
- Small bug in SummaryStyle. Fixed by @mawosoft in #1801.
InvalidOperationException/NullReferenceException
inSmartParaemter
. Fixed by @mawosoft in #1810.- Failures caused by colons in benchmark name. Fixed by @ronbrogan in #1823.
- Some benchmark arugments were not properly escaped and were causing process launcher to crush. Fixed by @adamsitnik in #1841
- Invalid size specifiers for Memory and Disassembly diagnosers. Fixed by @YegorStepanov in #1854 and #1855.
- Respect LogicalGroup order in DefaultOrderer. Fixed by @AndreyAkinshin in #1866.
- Endless loop in user interaction with redirected input. Fixed by @tmds in #.
- Broken power plan support. Fixed by @YegorStepanov in #1885.
BytesAllocatedPerOperation
was not being output by the JSON and XML exporters. Fixed by #martincostello in #1919.- Incorrect default InvocationCount in the summary table. Fixed by @AndreyAkinshin in #1929.
- Failed build output was printed in reverse order. Fixed by @radical in #1945.
- Build failures due to
NETSDK1150
. Fixed by @OlegOLK in #1981. MetricCoumn
was not respecting provided units when formatting values. Fixed by @mawosoft in #2033.- Generating invalid code that was causing benchmark failures. Fixed by @mawosoft in #2041.
- CI: non-master build branches were publishing artifacts to the CI feed. Fixed by @mawosoft in #2047.
- Comments in the project files were causing build failures. Fixed by @mawosoft in #2056.
Milestone details
In the v0.13.2 scope, 50 issues were resolved and 124 pull requests were merged. This release includes 147 commits by 34 contributors.
Resolved issues (50)
- #299 Add API to remove columns for baseline comparison (assignee: @AndreyAkinshin)
- #384 Print Vector
.Count as part of machine info (assignee: @adamsitnik) - #722 Add scaled column for Allocated Memory
- #837 Problems with default UnrollFactor in V0.11.0 (assignee: @adamsitnik)
- #1177 Public types missing from reference assemblies don't work with ParamsSource
- #1506 BenchmarkDotNet does not force to High Performance Mode during running (assignee: @YegorStepanov)
- #1603 Don't display Job and Toolchain column when running benchmarks for multiple runtimes
- #1669 --buildTimeout does not seem to work (assignee: @adamsitnik)
- #1680 Cannot override RD.xml for NativeAOT
- #1711 Add support for IBM Z architecture (assignee: @adamsitnik)
- #1727 Unhelpful rounding in MemoryDiagnoser
- #1753 "call: command not found" in .sh build script (assignee: @AndreyAkinshin)
- #1755 EventPipeProfiler: File names are very verbose
- #1756 EventPipeProfile: speedscope.app cannot parse result file (assignee: @adamsitnik)
- #1774 Ability to compare --corerun with --runtimes (assignee: @adamsitnik)
- #1775 Please add an easy way to remove columns
- #1789 Small bug in ImmutableConfigbuilder (assignee: @mawosoft)
- #1794 typo in error message
- #1800 Small bug in SummaryStyle (assignee: @mawosoft)
- #1803 Benchmark exception stops entire suite run (assignee: @adamsitnik)
- #1809 Exception when using ParamsSource with (null) objects
- #1812 Invalid codegen for Enumerable.Empty returned from ParamsSource
- #1819 How to change exporter output path?
- #1836 [Bug]
System.InvalidOperationException: There is an error in XML document (0, 0).
- #1857 Github actions ubuntu-latest "Unable to load shared library 'advapi32.dll' or one of its dependencies" when profiling dotnet 5
- #1864 Is there a way to join summaries as if the benchmarks were run separately? (assignee: @AndreyAkinshin)
- #1871 Detect ReSharper's Dynamic Program Analysis (assignee: @adamsitnik)
- #1872 BenchmarkDontNet should make allowance for projects where Preview Features are enabled
- #1887 MonoAotLLVM runtime is not actually AOTing things (assignee: @naricc)
- #1900 Failed to benchmark .NET 7 in release mode
- #1908 BenchmarkRunner.RunSource and BenchmarkRunner.RunUrl doesn't work
- #1929 Incorrect default InvocationCount in the summary table (assignee: @AndreyAkinshin)
- #1934 Ensure WorkloadActionUnroll and similar are optimized if possible
- #1937 PR builds should not be published to BDN nightly feed (assignee: @mawosoft)
- #1943 GitHub Actions Windows CI leg failing due to lack of native tools (assignee: @adamsitnik)
- #1948 questions to help with future PRs
- #1957 Broken pipe (assignee: @adamsitnik)
- #1977 More Data for JSON and XML Export
- #1989 Way to summarize all the params results (assignee: @YegorStepanov)
- #1992 API Docs on website empty (assignee: @AndreyAkinshin)
- #2000 DisassemblyDiagnoser broken on Linux (assignee: @adamsitnik)
- #2009 Cleanup the dependencies (assignee: @martincostello)
- #2011 Release-only build error when using ParamsSource with a LINQ method: Cannot implicitly convert type 'object' (assignee: @mawosoft)
- #2016 Support for .NET 7?
- #2028 Trying to build BDN on a windows arm64 host (assignee: @adamsitnik)
- #2039 Support .NET Framework 4.8.1 (assignee: @adamsitnik)
- #2055 Comment after
breaks generated project - #2059 BenchmarkDotNet misreports .Net Framework as 4.8.1 (assignee: @adamsitnik)
- #2063 BenchmarkDotNet nightly fails to disassemble .Net 7.0 properly
- #2074 DisassemblyDiagnoser producing invalid disassembly (assignee: @adamsitnik)
Merged pull requests (124)
- #1621 Hide columns for multiple runtime (by @marcnet80)
- #1769 Make wasm-interpreter work like wasm-aot (by @naricc)
- #1776 Clarify effects of IterationSetup on UnrollFactor and InvocationCount (by @SnakyBeaky)
- #1790 Bugfix in ImmutableConfigBuilder. Fixes #1789 (by @mawosoft)
- #1796 fixes(configuration): Not unique exporter for exporter type (by @workgroupengineering)
- #1797 Update DotNetCliCommandExecutor.cs (by @Distinctlyminty)
- #1801 Include RatioStyle in SummaryStyle.Equals()/GetHashCode(). Fixes #1800. (by @mawosoft)
- #1805 Update PackageReference for System.Management to latest (5.0.0). (by @mawosoft)
- #1810 Fix null reference exceptions in SmartParameter. Fixes #1809 (by @mawosoft)
- #1811 [WASM][AOT] Do not include KernelTraceControl in WasmAssembliesToBundle (by @naricc)
- #1816 Add net70 runtime support (by @am11)
- #1823 Replace colon if present in folder name (by @ronbrogan)
- #1828 Ensure proper SummaryStyle handling (by @mawosoft)
- #1835 Enable mono llvmaot tool chain to work with net7 (by @naricc)
- #1841 Fix argument escaping (by @adamsitnik)
- #1842 Preserve EnablePreviewFeatures csproj setting (by @kkokosa)
- #1846 [wasm] fix perf after test renames (by @pavelsavara)
- #1847 Use non-deprecated macOS pool on Azure Pipelines (by @akoeplinger)
- #1848 align both Executors to use the same timeout (2s) (by @adamsitnik)
- #1850 Added exporter custom path to docs #1819 (by @asaf92)
- #1854 Fix size specifier (by @YegorStepanov)
- #1855 Change DisassemblyDiagnoser to use byte unit always (by @YegorStepanov)
- #1858 Bugfix for merged PR #1855 (by @mawosoft)
- #1859 Add Allocation Ratio column (by @YegorStepanov)
- #1861 JitDiagnosers should print an error when run on non-Windows OS (by @adamsitnik)
- #1865 Bump Cake to 2.0.0, adopt frosting project style (by @AndreyAkinshin)
- #1866 Respect LogicalGroup order in DefaultOrderer (see #1864) (by @AndreyAkinshin)
- #1870 UserInteraction: don't loop when reaching the input end. (by @tmds)
- #1873 add EnablePreviewFeatures to the list of settings copied by BDN to the auto-generated project (by @adamsitnik)
- #1874 disable ReSharper's Dynamic Program Analysis by default (by @adamsitnik)
- #1885 Comeback of power management (by @YegorStepanov)
- #1888 Added IntermediateOutputPath option to MonoAotCompiler task parameters (by @naricc)
- #1890 Hiding columns (by @YegorStepanov)
- #1896 Fix warnings (by @adamsitnik)
- #1897 set TreatWarningsAsErrors to true (by @adamsitnik)
- #1902 Handled exceptions from exporters in CompositeExporter (by @epeshk)
- #1903 don't use diagnosers when running the benchmark has failed (by @adamsitnik)
- #1906 Improve BuildTimeout (by @adamsitnik)
- #1907 ensure the default order of benchmarks is the same as declared in source code (by @adamsitnik)
- #1909 Log progress and estimated finish time (by @adamsitnik)
- #1910 Make FromUrl and FromSource more friendly (by @YegorStepanov)
- #1912 Notified users about private methods with Setup/Cleanup attributes (by @epeshk)
- #1915 JsonExporter: make Json export more extensible. (by @ptr1120)
- #1916 [WASM] Fix rename of main.js to test-main.js (by @naricc)
- #1917 Don't run Analyzers for the generated project + Roslyn workaround (by @adamsitnik)
- #1919 Restore BytesAllocatedPerOperation for JSON and XML (by @martincostello)
- #1921 Improve failure handling and finish time estimation (by @adamsitnik)
- #1926 Fix typo in WasmCsProj.txt (by @lewing)
- #1930 Display correct default InvocationCount in SummaryTable, fixes #1929 (by @AndreyAkinshin)
- #1932 [wasm] Set the right runtime moniker (by @radekdoulik)
- #1935 Fix optimization of action methods for coreclr (by @AndyAyersMS)
- #1936 [wasm] Improve the autogenerated project (by @radical)
- #1938 [wasm] Add a
--wasmDataDir
parameter (by @radical) - #1939 Update contributing docs (by @adamsitnik)
- #1940 Don't use blocking acknowledgments when there is no need to (by @adamsitnik)
- #1945 AsyncProcessOutputReader: Use ConcurrentQueue instead of ConcurrentStack (by @radical)
- #1946 improve error message for users who pass path to Core_Root instead of CoreRun (by @adamsitnik)
- #1947 Executor: Don't use Process.ExitCode, unless the process has exited (by @radical)
- #1949 Revise heuristic for initial jitting. (by @AndyAyersMS)
- #1950 DotNetCli*: Allow logging command output (by @radical)
- #1953 add possibility to enable build output logging via command line args (by @adamsitnik)
- #1955 Cleaning up argument spacing in CLI calls. Add output path for publish. CoreRT (by @Beau-Gosse-dev)
- #1958 fix broken pipe issue (by @adamsitnik)
- #1959 add
--justBuild
for users who want to reuse code produced by BDN without running the benchmarks (by @adamsitnik) - #1960 Improve support for NativeAOT (by @adamsitnik)
- #1961 disable AwaitingTasksShouldNotInterfereAllocationResults test (by @adamsitnik)
- #1965 Rename CoreRT to NativeAOT (by @adamsitnik)
- #1966 Actually AOT things in AOT mode; prevent JIT fall back (by @naricc)
- #1969 Fixed FreeBSD shared library extension in MonoAOTLLVM tool chain. (by @naricc)
- #1970 Add new
--generateBinLog
to generate msbuild binlogs, with names (by @radical) - #1972 [NativeAOT] Set TrimmerDefaultAction to link (by @adamsitnik)
- #1973 don't place DynamicallyAccessedMembers on an array (by @adamsitnik)
- #1974 Update ArtifactFileNameHelper error message (by @eiriktsarpalis)
- #1975 Addressing code review suggestions (by @adamsitnik)
- #1976 Add support for Rd.xml file around project file (by @kant2002)
- #1978 Migrate from .NET 5 to .NET 6.0 (by @kant2002)
- #1979 Remove CPP codegen for NativeAOT (by @kant2002)
- #1981 Fix for issue NETSDK1150 (by @OlegOLK)
- #1982 DotNetCliCommand: Add new
RetryFailedBuildWithNoDeps
property (by @radical) - #1984 Reduce generated code size (by @adamsitnik)
- #1985 don't emit debug symbols on platforms where it does not work well (by @adamsitnik)
- #1986 the CI must run net6.0, not net5.0 tests (by @adamsitnik)
- #1987 Fix AppVeyor build (by @adamsitnik)
- #1988 re-enable NativeAOT tests on GitHub Actions Windows (by @adamsitnik)
- #1990 [Mono] Change AOT mode to Normal AOT with LLVM JIT fall back (by @fanyang-mono)
- #1994 NativeAOT: IlcOptimizationPreference & IlcInstructionSet (by @adamsitnik)
- #1996 use AnyCPU for S390x (by @adamsitnik)
- #1997 Update NativeAOT docs, fix the support for local NativeAOT builds (by @adamsitnik)
- #2002 when user specifies both --runtimes and --corerun, multiple independent jobs should be created (by @adamsitnik)
- #2006 when Host process is not .NET Core, CoreRunToolchain should use latest available TFM (by @adamsitnik)
- #2008 Use PackageIcon property (by @martincostello)
- #2012 Cleanup dependencies and add net6.0 TFM (by @martincostello)
- #2019 Update Iced to its latest version. (by @teo-tsirpanis)
- #2020 Opt out of metadata trimming (by @MichalStrehovsky)
- #2023 don't run NativeAOT tests on AppVeyor Windows (by @adamsitnik)
- #2029 don't emit debug symbols for samples and test projects (by @adamsitnik)
- #2030 update TraceEvent to 3.0.1 to have a proper ARM64 support for Diagnostics package (by @adamsitnik)
- #2033 Bugfix MetricColumn: Respect unit when formatting values. (by @mawosoft)
- #2035 net461->net462 in Samples, Diagnosers, Tests (by @AndreyAkinshin)
- #2040 Port the .NET (Core) disassembler to ClrMd v2 (by @adamsitnik)
- #2041 Bugfix SmartParameter source code generation (by @mawosoft)
- #2042 Fix WmicCpuInfoProvider documentation (by @msitt)
- #2043 restore Microsoft.DotNet.PlatformAbstraction dependency (by @adamsitnik)
- #2044 add .NET 4.8.1 support (by @adamsitnik)
- #2045 adopt to recent NativeAOT changes (by @adamsitnik)
- #2046 Make a bit of BenchmarkDotNet trimmable (by @MichalStrehovsky)
- #2047 Restrict what's published to AppVeyor NuGet feed (BDN nightly) (by @mawosoft)
- #2050 Fix DocFx configuration and build (by @mawosoft)
- #2051 extend printed Runtime Info with simple Hardware Intrinsics information (by @adamsitnik)
- #2052 Address code review feedback (by @adamsitnik)
- #2056 Bugfix copied project settings (by @mawosoft)
- #2065 Add serialize to NativeAOT (by @MichalPetryka)
- #2066 Print Vector width in summary on older runtimes (by @MichalPetryka)
- #2067 fix .NET 4.8.1 detection (by @adamsitnik)
- #2068 print error when users try DisassemblyDiagnoser with NativeAOT (by @adamsitnik)
- #2071 use ClrMd v2 disassembler on Windows whenever possible (by @adamsitnik)
- #2072 Add glob filters support to disassembler to allow disassembling specific methods (by @adamsitnik)
- #2073 add two fallbacks to CoreRun copying (by @adamsitnik)
- #2075 Fix disassembler (by @adamsitnik)
- #2078 More disassembler improvements (by @adamsitnik)
- #2079 fix the CI (by @adamsitnik)
- #2081 JsonExporter: make Json export more extensible. (by @ptr1120)
- #2082 remove last warning (by @adamsitnik)
- #2084 Release notes for 0.13.2 (by @adamsitnik)
Commits (147)
- 4de165 Postrelease v0.13.1 update (by @AndreyAkinshin)
- 74e3c4 Make wasm-interpreter work like wasm-aot (#1769) (by @naricc)
- 1a8296 Better snap support, fix #1753 (by @AndreyAkinshin)
- aa9167 Clarify effects of IterationSetup on UnrollFactor and InvocationCount (#1776) (by @SnakyBeaky)
- 937865 Set allow unsafe blocks to true. (#1779) (by @naricc)
- e08b79 Bugfix in ImmutableConfigBuilder. Fixes #1789 (#1790) (by @mawosoft)
- 156fd6 Fix an logger message typo in the DotNetCliCommandExecutor Execute method, fi... (by @Distinctlyminty)
- d312ed Include RatioStyle in SummaryStyle.Equals()/GetHashCode(). Fixes #1800. (#1801) (by @mawosoft)
- 38b99b Update PackageReference for System.Management to latest (5.0.0). (#1805) (by @mawosoft)
- e9a569 [WASM][AOT] Do not include KernelTraceControl in WasmAssembliesToBundle (#1811) (by @naricc)
- 80044a Fix null reference exceptions in SmartParameter. Fixes #1809 (#1810) (by @mawosoft)
- 273113 Add tests for the case when ParamsSource contains null (by @AndreyAkinshin)
- a5176a Add net7.0 runtime support (#1816) (by @am11)
- 7e757d Replace colon if present in folder name (#1823) (by @ronbrogan)
- 24e041 Use non-deprecated Azure Pipelines Ubuntu pool (#1829) (by @akoeplinger)
- beb543 Enable mono llvmaot tool chain to work with net7 (#1835) (by @naricc)
- 8a88b4 Ensure proper SummaryStyle handling (#1828) (by @mawosoft)
- 559d18 Fix argument escaping (#1841) (by @adamsitnik)
- 5927a6 Preserve EnablePreviewFeatures csproj setting (#1842) (by @kkokosa)
- db0a88 [wasm] fix perf after test renames (#1846) (by @pavelsavara)
- dddc1e Use non-deprecated macOS pool on Azure Pipelines (#1847) (by @akoeplinger)
- e62dc2 align both Executors to use the same timeout (2s) (#1848) (by @adamsitnik)
- 7d5a8f Added exporter custom path to docs #1819 (#1850) (by @asaf92)
- 7b0211 Fix size specifier (#1854), fixes #1727 (by @YegorStepanov)
- 34817b Change DisassemblyDiagnoser to use byte unit always (#1855) (by @YegorStepanov)
- 0c03e8 Bugfix for merged PR #1855 (#1858) (by @mawosoft)
- f00f7c JitDiagnosers should print an error when run on non-Windows OS (#1861) (by @adamsitnik)
- 956051 Add Allocation Ratio column (#1859) (by @YegorStepanov)
- 42c718 Categories should have the highest priority in logical group order, fixes #1864 (by @AndreyAkinshin)
- 6f6de0 Introduce BenchmarkRunner.Run(Type[] types) (by @AndreyAkinshin)
- 408786 Use Cake.FileHelpers 4.0.1 (by @AndreyAkinshin)
- 130f0f Additional diagnostics in WindowsDisassembler (see #1836) (by @AndreyAkinshin)
- 189e68 Fix GroupExporterTest (by @AndreyAkinshin)
- 61c447 Remove travis badges (by @AndreyAkinshin)
- e17992 Bump Cake to 2.0.0, adopt frosting project style (#1865) (by @AndreyAkinshin)
- bb180a Remove .travis.yml (by @AndreyAkinshin)
- f188f7 Respect LogicalGroup order in DefaultOrderer (see #1864) (#1866) (by @AndreyAkinshin)
- 7e19f3 Enable GitHub actions (by @AndreyAkinshin)
- ed53a3 Add GitHub Actions build status badge (by @AndreyAkinshin)
- 195cfd Support Windows 11 in OsBrandStringHelper (by @AndreyAkinshin)
- 5145d1 Fix documentation build tasks (by @AndreyAkinshin)
- 988dbf Update docs/articles/contributing/documentation.md (by @AndreyAkinshin)
- f17453 UserInteraction: don't loop when reaching the input end. (#1870) (by @tmds)
- 23d115 force High Performance Mode by default, fixes #1506 (#1885) (by @YegorStepanov)
- 328573 Added IntermediateOutputPath option to MonoAotCompiler task parameters (#1888) (by @naricc)
- 26ed31 set JETBRAINS_DPA_AGENT_ENABLE by default to 0 to disable ReSharper's Dynamic... (by @adamsitnik)
- 625b2c Fix warnings (#1896) (by @adamsitnik)
- 4b8821 Handled exceptions from exporters in CompositeExporter. Preventing benchmark ... (by @epeshk)
- 6ca6c6 don't use diagnosers when running the benchmark has failed (#1903) (by @adamsitnik)
- 6d2739 Improve BuildTimeout (#1906) (by @adamsitnik)
- 3ea212 ensure the default order of benchmarks is the same as declared in source code... (by @adamsitnik)
- 05bb3d Log progress and estimated finish time (#1909) (by @adamsitnik)
- 11751a Don't run Analyzers for the generated project + Roslyn workaround (#1917) (by @adamsitnik)
- 80f45c [WASM] Fix rename of main.js to test-main.js (#1916) (by @naricc)
- 32bb2d Improve failure handling and finish time estimation (#1921) (by @adamsitnik)
- 9ff0f9 Restore BytesAllocatedPerOperation for JSON and XML (#1919) (by @martincostello)
- 569f4f Add macOS Monterey test case in OsBrandStringTests (by @AndreyAkinshin)
- 63c0ce Notified users about private methods with Setup/Cleanup attributes (#1912) (by @epeshk)
- c1f210 fixes(configuration): Not unique exporter for exporter type (#1796) (by @workgroupengineering)
- bd0872 Rollback logicalGroupRules to List (by @AndreyAkinshin)
- c303ad Fix typo in WasmCsProj (#1926) (by @lewing)
- f1aefb Display correct default InvocationCount in SummaryTable, fixes #1929 (#1930) (by @AndreyAkinshin)
- ca5103 [wasm] Set the right runtime moniker (#1932) (by @radekdoulik)
- fa5984 [wasm] Improve the autogenerated project (#1936) (by @radical)
- b78ec9 Fix optimization of action methods for coreclr (#1935) (by @AndyAyersMS)
- 13f4ea Don't use blocking acknowledgments when there is no need to (#1940) (by @adamsitnik)
- 8ce19e [wasm] Add a
--wasmDataDir
parameter (#1938) (by @radical) - 9b990d AsyncProcessOutputReader: Use ConcurrentQueue instead of ConcurrentStack (#1945) (by @radical)
- 937311 Revise heuristic for initial jitting. (#1949) (by @AndyAyersMS)
- 228a6a improve error message for users who pass path to Core_Root instead of CoreRun... (by @adamsitnik)
- 1d34f8 DotNetCli*: Allow logging command output (#1950) (by @radical)
- 01ead5 Executor: Don't use Process.ExitCode, unless the process has exited (#1947) (by @radical)
- 8e3d13 add possibility to enable build output logging via command line args (#1953) (by @adamsitnik)
- 6fa333 Cleaning up argument spacing in CLI calls. Add output path for publish. CoreR... (by @Beau-Gosse-dev)
- 010ac2 don't redirect standard input and don't write Acknowledgment to it if acknowl... (by @adamsitnik)
- d66289 Improve support for NativeAOT (#1960) (by @adamsitnik)
- 0868da disable AwaitingTasksShouldNotInterfereAllocationResults for InProcess toolch... (by @adamsitnik)
- 41a151 Rename CoreRT to NativeAOT (#1965) (by @adamsitnik)
- 9c1c27 [Mono] Actually AOT things in AOT mode; prevent JIT fall back (#1966) (by @naricc)
- ed6529 Fixed FreeBSD shared library extension in MonoAOTLLVM tool chain. (#1969) (by @naricc)
- 19679d Set TrimmerDefaultAction to link to ensure that trimmer only analyzes the par... (by @adamsitnik)
- e2d41b don't place DynamicallyAccessedMembers on an array (#1973) (by @adamsitnik)
- 09d939 Update ArtifaceFileNameHelper error message (#1974) (by @eiriktsarpalis)
- cac918 Add new
--generateBinLog
to generate msbuild binlogs, with names (#1970) (by @radical) - 5f0db4 Add support for LoongArch64. (#1971) (by @LuckyXu-HF)
- 56556a Add support for Rd.xml file around project file (#1976) (by @kant2002)
- 804ed9 Remove CPP codegen for NativeAOT (#1979) (by @kant2002)
- 190d07 Fix for issue NETSDK1150 (#1981) (by @OlegOLK)
- a57819 Migrate from .NET 5 to .NET 6.0 (#1978) (by @kant2002)
- 74086a Addressing code review suggestions (#1975) (by @adamsitnik)
- 5fdafb Update contributing docs (#1939) (by @adamsitnik)
- ca43aa DotNetCliCommand: Add new
RetryFailedBuildWithNoDeps
property (#1982) (by @radical) - bbe6ab Reduce generated code size (#1984) (by @adamsitnik)
- 31de77 the CI must run net6.0, not net5.0 tests (#1986) (by @adamsitnik)
- 554127 Fix AppVeyor build (#1987) (by @adamsitnik)
- a0035f re-enable NativeAOT tests on GitHub Actions Windows (#1988) (by @adamsitnik)
- 163f40 don't emit debug symbols (#1985) (by @adamsitnik)
- 35ba9d Change aot mode to normal aot with LLVM JIT fall back (#1990) (by @fanyang-mono)
- 1c935d NativeAOT: IlcOptimizationPreference & IlcInstructionSet (#1994) (by @adamsitnik)
- c165ba use AnyCPU for S390x, fixes #1711 (#1996) (by @adamsitnik)
- f4e8de Update NativeAOT docs, fix the support for local NativeAOT builds (#1997) (by @adamsitnik)
- 9e173d Fix typo in README (by @AndreyAkinshin)
- a79881 when user specifies both --runtimes and --corerun, multiple independent jobs ... (by @adamsitnik)
- 5e6275 when Host process is not .NET Core, CoreRunToolchain should use latests avail... (by @adamsitnik)
- b09431 Opt out of metadata trimming (#2020) (by @MichalStrehovsky)
- 5448d4 Update Iced to its latest version. (#2019) (by @teo-tsirpanis)
- fcda33 Use PackageIcon property (#2008) (by @martincostello)
- 72fce9 don't run NativeAOT tests on AppVeyor, as one of them takes 3 minutes and we ... (by @adamsitnik)
- 14f9cf don't emit debug symbols for samples and test projects as it breaks arm64 win... (by @adamsitnik)
- fd4a9c update TraceEvent to 3.0.1 to have a proper ARM64 support for Diagnostics pac... (by @adamsitnik)
- 8deec6 Bugfix MetricColumn: Respect unit when formatting values. (by @mawosoft)
- 9216a7 Add MetricColumnTests (by @AndreyAkinshin)
- 23f995 net461->net462 in Samples, Diagnosers, Tests (#2035) (by @AndreyAkinshin)
- 762b76 Cleanup dependencies and add net6.0 TFM (#2012) (by @martincostello)
- d24ea3 Port the .NET (Core) disassembler to ClrMd v2 (#2040) (by @adamsitnik)
- 6eb280 Fix WmicCpuInfoProvider comment (#2042) (by @msitt)
- f72e61 restore Microsoft.DotNet.PlatformAbstraction dependency (#2043) (by @adamsitnik)
- 99ef3f add .NET 4.8.1 support (#2044) (by @adamsitnik)
- 118135 adopt to recent NativeAOT changes (#2045) (by @adamsitnik)
- 96b376 Make a bit of BenchmarkDotNet trimmable (#2046) (by @MichalStrehovsky)
- e4ff20 Bugfix SmartParameter source code generation (#2041) (by @mawosoft)
- 461b70 Added the kernel keyword as a parameter to the ETWConfig (#2049) (by @mrsharm)
- d6020e Restrict what's published to AppVeyor NuGet feed (BDN nightly) (#2047) (by @mawosoft)
- 32ddeb provide Hardware Intrinsics information (#2051) (by @adamsitnik)
- 2e943e Fix DocFx configuration and build (by @mawosoft)
- 8c963b Reverting DocFX_Build dependency on Build (by @mawosoft)
- 48ecbc add missing hardware intrinsic info (#2052) (by @adamsitnik)
- b4c44c Bugfix copied project settings (#2056) (by @mawosoft)
- 2dc6c9 Add serialize to NativeAOT (#2065) (by @MichalPetryka)
- 7fb872 Print Vector width in summary on older runtimes (#2066) (by @MichalPetryka)
- 8e355b fix .NET 4.8.1 detection (#2067) (by @adamsitnik)
- 0f457d print error when users try DisassemblyDiagnoser with NativeAOT (#2068) (by @adamsitnik)
- b79282 use ClrMd2Disassembler on Windows whenever possible (#2071) (by @adamsitnik)
- a5b0e9 Add glob filters support to disassembler to allow disassembling specific meth... (by @adamsitnik)
- cab43e add two fallbacks to CoreRun copying (#2073) (by @adamsitnik)
- 4924f0 Fix few new disassembler bugs caused by update to ClrMd v2 (#2075) (by @adamsitnik)
- c99ba3 More disassembler improvements (#2078) (by @adamsitnik)
- 6bb61c Make FromUrl and FromSource more friendly (#1910) (by @YegorStepanov)
- 387ca0 fix the CI (#2079) (by @adamsitnik)
- 52d770 set TreatWarningsAsErrors to true (#1897) (by @adamsitnik)
- a11b49 JsonExporter: make Json export more extensible. (#2081) (by @ptr1120)
- 1424cf remove last warning that happens during pack command for master branch build ... (by @adamsitnik)
- 838000 Hide columns for multiple runtime (#1621) (by @marcnet80)
- 8ec00d Hiding columns (#1890) (by @YegorStepanov)
- e0dbce Release notes for 0.13.2 (#2084) (by @adamsitnik)
- f6f335 Prepare v0.13.2 changelog (by @AndreyAkinshin)
- 186998 Set library version: 0.13.2 (by @AndreyAkinshin)
Contributors (34)
- Adam Sitnik (@adamsitnik)
- Adeel Mujahid (@am11)
- Alexander Köplinger (@akoeplinger)
- Andrey Akinshin (@AndreyAkinshin)
- Andrii Kurdiumov (@kant2002)
- Andy Ayers (@AndyAyersMS)
- Ankit Jain (@radical)
- Asaf Agami (@asaf92)
- Beau Gosse (@Beau-Gosse-dev)
- Eirik Tsarpalis (@eiriktsarpalis)
- Evgeny Peshkov (@epeshk)
- Fan Yang (@fanyang-mono)
- James MIllar (@Distinctlyminty)
- Konrad Kokosa (@kkokosa)
- Larry Ewing (@lewing)
- marcnet80 (@marcnet80)
- Marland Sitt (@msitt)
- Martin Costello (@martincostello)
- Matthias Wolf (@mawosoft)
- Michał Petryka (@MichalPetryka)
- Michal Strehovský (@MichalStrehovsky)
- Mukund Raghav Sharma (Moko) (@mrsharm)
- Nathan Ricci (@naricc)
- OlegOLK (@OlegOLK)
- Oriol Mesa (@SnakyBeaky)
- Pavel Savara (@pavelsavara)
- Peter Bruch (@ptr1120)
- Radek Doulik (@radekdoulik)
- Ron Brogan (@ronbrogan)
- Theodore Tsirpanis (@teo-tsirpanis)
- Tom Deseyn (@tmds)
- workgroupengineering (@workgroupengineering)
- Xu Liangyu (@LuckyXu-HF)
- Yegor Stepanov (@YegorStepanov)
Thank you very much!
Additional details
Date: August 26, 2022
Milestone: v0.13.2 (List of commits)
NuGet Packages: