Open adamsitnik opened 2 years ago
Using the python script mentioned above is great to quickly get a 32 bit version of the SDK, but once you get it you might want to experiment with some changes locally.
When python script fails, it's going to print the path to the folder with auto-generated project. In the example below it's D:\projects\performance\artifacts\bin\MicroBenchmarks\Release\net7.0\b5b91f91-ffea-42f8-b3c4-564a95dfa491
:
You can modify the project (to apply some extra settings? use a local buld of Roslyn?) and build it using the downloaded SDK:
.\performance\tools\dotnet\x86\dotnet.exe build -c Release -f net7.0 D:\projects\performance\artifacts\bin\MicroBenchmarks\Release\net7.0\b5b91f91-ffea-42f8-b3c4-564a95dfa491\BenchmarkDotNet.Autogenerated.csproj
By doing that you get only the MSBuild output without BDN or python script noise.
One potential work around is to disable analyzers. (That seems to allow compilation to succeed.)
I've tried that by using the following settings for 6.0:
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
<RunAnalyzers>false</RunAnalyzers>
but it failed with:
\x86\sdk\6.0.103\Roslyn\Microsoft.CSharp.Core.targets(75,5): error MSB6006: "csc.dll" exited with code -107374079
-107374079
is STATUS_STACK_BUFFER_OVERRUN
?
will try with 7.0 next
With 7.0 I get the same error:
x86\sdk\7.0.100-preview.1.22077.12\Roslyn\Microsoft.CSharp.Core.targets(75,5): error MSB6006: "csc.dll" exited with code -1073740791.
Update: I was able to get it working, I needed to remove:
<DebugType>pdbonly</DebugType>
<DebugSymbols>true</DebugSymbols>
I'm able to hit the OutOfMemoryException
with -netcoreapp3.1
, -net6.0
and -net7.0
, with at least one analyzer assembly. With /skipanalyzers+
, the compile succeeds.
/debug-
/debug:embedded
/filealign:512
/optimize+
/analyzerconfig:<root>\artifacts\obj\BenchmarkDotNet.Autogenerated\Release\netcoreapp3.1\BenchmarkDotNet.Autogenerated.GeneratedMSBuildEditorConfig.editorconfig
/analyzer:<packages>\microsoft.codeanalysis.analyzers\2.6.1\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll
It happened again, so I've reduced the produced code size and we are again unblocked for a while: https://github.com/dotnet/BenchmarkDotNet/pull/1984
BenchmarkDotNet generates a project with boilerplate code that takes care of all common benchmarking pitfalls. In dotnet/performance repository we have more than 4 thousand benchmarks and when we are using 32 bit SDK to build the auto-generated project, it fails with OOM in Roslyn. Initially, I thought that it was caused by the fact that the generated project contains a single source file with more than 3 million lines of code. So I've changed BDN implementation to don't store more than 100 generated types in a single source file: https://github.com/dotnet/BenchmarkDotNet/pull/1914. The problem is that it did not help, I am still getting OOM.
Any help (including workarounds) would be much appreciated as it's currently blocking us from ensuring that we are shipping .NET 7 preview 1 without performance regressions.
cc @danmoseley @AndyAyersMS who has hit this issue recently
Version Used: x86,
4.1.6.6811
part of the7.0.100-preview.2.22102.6 SDK
but it's reproducible with older versions as well (6.0)Steps to Reproduce:
Expected Behavior: It works fine.
Actual Behavior: It throws OOM.
Full stack trace: