Skip to content

Merge feature/use-dllimport-generator to main - #59579

Merged
safern merged 180 commits into
mainfrom
feature/use-dllimport-generator
Oct 18, 2021
Merged

Merge feature/use-dllimport-generator to main#59579
safern merged 180 commits into
mainfrom
feature/use-dllimport-generator

Conversation

@jkoritzinsky

@jkoritzinskyjkoritzinsky commented Sep 24, 2021

Copy link
Copy Markdown
Member

Merge the DllImportGenerator experiment to the main branch for .NET 7.

This should be merged with "Create a merge commit"

ASP.NET JSON macro-benchmark: #59579 (comment)
Libraries micro-benchmarks: #59579 (comment)

Items we will address once the initial merge happens: #60212

cc @stephentoub

AaronRobinsonMSFTand others added 30 commits July 12, 2020 17:52
 - Includes identification of GeneratedDllImportAttribute
- Generation of enclosing types for partial methods
- Basic tests for compilation of generation code
Commit migrated from dotnet/runtimelab@56076d3
 calls directly to the real DllImport from the generated one.
Add test for handling RefKind (i.e. in, ref, out).
Commit migrated from dotnet/runtimelab@3670643
 - User defined source needs to be "correct"
Commit migrated from dotnet/runtimelab@f9f705c
It is interesting to step into the generated method and observe the UX.
Commit migrated from dotnet/runtimelab@35c9adc
* Update readme with existing experiments
* Add "CreateAnExperiment.md"
Commit migrated from dotnet/runtimelab@542dd85
the attribute name.
Add test cases for compilation failures.
Commit migrated from dotnet/runtimelab@d2f6f5a
…melab#36)
* Collect DllImport details through Roslyn semantic model
Create an assembly that provides the GeneratedDllImportAttribute
which allows use of the semantic model.
* Collect MarshalAsAttribute data
* Collect MarshalAsAttribute data
Convert P/Invoke centric data structures to handle positional
type information for managed/unmanaged scenarios.
Commit migrated from dotnet/runtimelab@21e634e
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
Commit migrated from dotnet/runtimelab@e50c8c2
… analyzer that validates manual usage. (dotnet/runtimelab#61)
Co-authored-by: Elinor Fung <elfung@microsoft.com>
Commit migrated from dotnet/runtimelab@05d6ef2
* Use DNNE to create native testing assets
Instead of relying on a native project use DNNE to generate
native exports for managed binaries. This allows us to avoid
writing native code for testing code generation.
* Add *.binlog to .gitignore
* Force 'UseAppHost' to fix scenario on macOS.
* Consume support in DNNE for adding native binary to project.
Commit migrated from dotnet/runtimelab@415c6ca
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
Commit migrated from dotnet/runtimelab@2cde5aa
* Rename DllImportGenerator.Test to DllImportGenerator.UnitTests
* Create an integration tests project.
Update the SLN file.
Remove SafeHandle test from Demo project.
* Update readme.md
Make the Demo project a user friendly example for learning about the methodology.
Commit migrated from dotnet/runtimelab@778ecfa
* Boolean and Delegate tests
Updated to DNNE 1.0.12 with support for C# function pointers.
Renamed CBoolMarshaller to ByteBoolMarshaller.
Added integration tests for all bool marshaller types.
Added integration tests for delegates.
Style nits.
Commit migrated from dotnet/runtimelab@6c980df
* Support for char marshaller.
Avoid supporting the built-in semantics for ANSI marshalling of char.
Propagate the CharSet down to the marshallers.
Convert the MarshallingGenerators.TryCreate() to a MarshallingGenerators.Create() function throwing an exception.
* Add a compatibility document.
* Add testing for char marshalling.
Commit migrated from dotnet/runtimelab@be3f4e8
* Fix some warnings about analyzer authoring
Commit migrated from dotnet/runtimelab@c89fc41
@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

I've run the ASP.NET JSON macrobenchmark on this branch and compared it to main, and we see a minor performance improvement in steady state performance with this branch.

Baseline
Details
application
CPU Usage (%)97
Cores usage (%)1,166
Working Set (MB)182
Private Memory (MB)771
Build Time (ms)13,179
Start Time (ms)184
Published Size (KB)109,864
.NET Core SDK Version5.0.401
ASP.NET Core Version5.0.10+b92c9f5
.NET Runtime Version7.0.0-alpha.1.21507.12+8fdd22d
load
CPU Usage (%)62
Cores usage (%)745
Working Set (MB)50
Private Memory (MB)358
Build Time (ms)7,140
Start Time (ms)0
Published Size (KB)76,412
.NET Core SDK Version3.1.413
ASP.NET Core Version3.1.19+b908e91
.NET Runtime Version3.1.19+aae0024
First Request (ms)123
Requests/sec469,558
Requests7,090,260
Mean latency (ms)0.79
Max latency (ms)48.15
Bad responses0
Socket errors0
Read throughput (MB/s)68.07
Latency 50th (ms)0.50
Latency 75th (ms)0.58
Latency 90th (ms)0.72
Latency 99th (ms)10.98
This PR
Details
application
CPU Usage (%)97
Cores usage (%)1,168
Working Set (MB)185
Private Memory (MB)733
Build Time (ms)10,301
Start Time (ms)197
Published Size (KB)110,366
.NET Core SDK Version5.0.401
ASP.NET Core Version5.0.10+b92c9f5
.NET Runtime Version7.0.0-alpha.1.21507.14+78f4fa8
load
CPU Usage (%)63
Cores usage (%)754
Working Set (MB)38
Private Memory (MB)358
Start Time (ms)0
First Request (ms)129
Requests/sec471,137
Requests7,114,106
Mean latency (ms)0.78
Max latency (ms)52.35
Bad responses0
Socket errors0
Read throughput (MB/s)68.30
Latency 50th (ms)0.50
Latency 75th (ms)0.58
Latency 90th (ms)0.71
Latency 99th (ms)10.73

@AaronRobinsonMSFT

Copy link
Copy Markdown
Member

/cc @davidfowl#59579 (comment).

@elinor-fungelinor-fung mentioned this pull request Oct 9, 2021
13 tasks
@elinor-fung

elinor-fung commented Oct 11, 2021

Copy link
Copy Markdown
Member

Ran some of the microbenchmarks that hit updated p/invokes to check that we aren't regressing them.

On Windows with --statisticalTest 3%:

Perf_Console
MethodToolchainMeanErrorStdDevMedianMinMaxRatioMannWhitney(3%)Gen 0Allocated
OpenStandardInputfeature465.5 ns3.82 ns3.39 ns464.6 ns461.4 ns471.8 ns0.94Faster0.003840 B
OpenStandardInputbase493.2 ns1.57 ns1.39 ns493.2 ns491.2 ns496.0 ns1.00Base0.003940 B
OpenStandardOutputfeature1,050.9 ns6.94 ns6.15 ns1,051.0 ns1,042.6 ns1,060.5 ns0.96Faster0.004240 B
OpenStandardOutputbase1,098.1 ns1.99 ns1.66 ns1,098.4 ns1,095.8 ns1,100.5 ns1.00Base0.004440 B
OpenStandardErrorfeature23,686.2 ns78.54 ns69.63 ns23,675.9 ns23,565.2 ns23,805.7 ns0.98Same-40 B
OpenStandardErrorbase24,148.1 ns316.41 ns295.97 ns24,303.0 ns23,675.7 ns24,635.0 ns1.00Base-40 B
ForegroundColorfeature29,121.9 ns126.05 ns111.74 ns29,074.5 ns28,981.6 ns29,375.7 ns1.00Same--
ForegroundColorbase29,149.9 ns110.07 ns85.93 ns29,153.1 ns28,959.7 ns29,245.5 ns1.00Base--
BackgroundColorfeature29,188.3 ns120.56 ns100.67 ns29,158.4 ns29,078.6 ns29,426.3 ns1.01Same--
BackgroundColorbase29,024.7 ns226.00 ns211.40 ns28,966.0 ns28,715.5 ns29,518.7 ns1.00Base--
ResetColorfeature59,375.2 ns324.11 ns303.17 ns59,520.3 ns58,880.4 ns59,755.8 ns0.99Same--
ResetColorbase59,806.7 ns318.83 ns282.63 ns59,828.1 ns59,342.5 ns60,241.2 ns1.00Base--
Perf_Directory
MethodToolchainUnrollFactordepthMeanErrorStdDevMedianMinMaxRatioMannWhitney(3%)RatioSDGen 0Allocated
CreateDirectoryfeature1?283,874.21 ns14,099.292 ns15,671.326 ns285,210.00 ns235,240.00 ns305,010.00 ns0.99Same0.02-505 B
CreateDirectorybase1?290,341.43 ns3,783.882 ns3,354.313 ns289,750.00 ns286,340.00 ns299,080.00 ns1.00Base0.00-505 B
GetCurrentDirectoryfeature16?90.49 ns0.596 ns0.558 ns90.18 ns89.95 ns91.62 ns1.00Same0.010.0344272 B
GetCurrentDirectorybase16?90.49 ns1.231 ns1.151 ns90.44 ns89.11 ns93.02 ns1.00Base0.000.0346272 B
Existsfeature16?26,077.67 ns131.351 ns116.440 ns26,074.80 ns25,900.00 ns26,274.42 ns1.00Same0.01--
Existsbase16?25,989.24 ns215.599 ns201.671 ns25,985.35 ns25,691.92 ns26,291.26 ns1.00Base0.00--
EnumerateFilesfeature16?4,336,182.60 ns79,847.239 ns74,689.157 ns4,307,796.88 ns4,234,362.50 ns4,500,879.69 ns1.01Same0.02171.87501,440,232 B
EnumerateFilesbase16?4,285,867.50 ns58,142.587 ns54,386.612 ns4,282,982.81 ns4,218,610.94 ns4,405,396.88 ns1.00Base0.00171.87501,440,232 B
RecursiveCreateDeleteDirectoryfeature16103,686,270.12 ns119,939.923 ns138,122.994 ns3,680,808.12 ns3,497,893.75 ns3,881,205.00 ns0.99Same0.03-7,742 B
RecursiveCreateDeleteDirectorybase16103,717,791.75 ns129,918.681 ns149,614.547 ns3,742,108.12 ns3,488,150.00 ns3,940,530.00 ns1.00Base0.00-7,742 B
RecursiveCreateDeleteDirectoryfeature1610041,018,445.00 ns1,651,380.584 ns1,901,732.337 ns40,158,666.67 ns38,694,600.00 ns43,999,733.33 ns1.02Same0.08-140,000 B
RecursiveCreateDeleteDirectorybase1610040,353,405.83 ns1,560,227.910 ns1,796,760.781 ns40,095,491.67 ns38,437,150.00 ns43,621,866.67 ns1.00Base0.00-140,000 B
Perf_File
MethodToolchainUnrollFactorsizeMeanErrorStdDevMedianMinMaxRatioMannWhitney(3%)RatioSDGen 0Allocated
Deletefeature1?109.12 us9.975 us9.797 us104.48 us100.89 us129.64 us0.87Same0.22--
Deletebase1?143.20 us38.592 us44.442 us109.50 us102.20 us199.93 us1.00Base0.00--
Existsfeature16?26.53 us0.190 us0.178 us26.47 us26.26 us26.90 us0.99Same0.01--
Existsbase16?26.91 us0.390 us0.346 us26.88 us26.57 us27.89 us1.00Base0.00--
AppendAllLinesfeature16?221.01 us3.334 us2.603 us220.87 us216.85 us224.15 us0.99Same0.021.00009,713 B
AppendAllLinesbase16?224.88 us5.938 us6.839 us221.51 us218.03 us243.97 us1.00Base0.001.00009,713 B
AppendAllLinesAsyncfeature16?266.06 us8.875 us9.865 us269.06 us244.00 us276.86 us1.00Same0.041.000010,627 B
AppendAllLinesAsyncbase16?267.16 us11.859 us13.657 us268.06 us239.66 us284.31 us1.00Base0.001.000010,627 B
AppendAllTextfeature16100208.66 us7.385 us8.209 us209.33 us197.94 us220.97 us0.98Same0.06-6,576 B
AppendAllTextbase16100212.99 us7.043 us8.110 us210.16 us204.64 us231.85 us1.00Base0.00-6,577 B
WriteAllTextfeature16100266.53 us11.947 us13.759 us270.47 us240.71 us295.40 us1.02Same0.09-6,576 B
WriteAllTextbase16100262.02 us18.577 us21.394 us258.04 us235.76 us305.24 us1.00Base0.00-6,576 B
AppendAllTextAsyncfeature16100251.18 us7.161 us7.960 us252.15 us238.78 us264.99 us1.01Same0.031.000010,587 B
AppendAllTextAsyncbase16100248.02 us7.745 us8.920 us244.84 us239.25 us271.33 us1.00Base0.001.000010,586 B
WriteAllTextAsyncfeature16100343.71 us11.069 us11.844 us344.33 us321.57 us365.14 us1.03Same0.041.329810,649 B
WriteAllTextAsyncbase16100335.50 us7.129 us8.209 us332.34 us325.52 us349.60 us1.00Base0.00-10,649 B
WriteAllBytesfeature16512272.19 us7.498 us8.334 us269.19 us258.25 us292.12 us1.02Same0.05-72 B
WriteAllBytesbase16512267.74 us6.677 us6.856 us266.54 us257.50 us284.77 us1.00Base0.00-73 B
WriteAllBytesAsyncfeature16512328.12 us17.210 us19.819 us326.91 us298.52 us366.07 us1.01Same0.07-649 B
WriteAllBytesAsyncbase16512324.08 us16.843 us19.397 us317.69 us297.70 us361.70 us1.00Base0.00-649 B
WriteAllBytesfeature164096287.40 us16.217 us18.675 us286.88 us262.03 us326.18 us0.99Same0.06-73 B
WriteAllBytesbase164096287.68 us16.221 us18.030 us288.82 us261.35 us331.26 us1.00Base0.00-73 B
WriteAllBytesAsyncfeature164096365.82 us13.814 us15.908 us365.66 us334.53 us399.09 us1.00Same0.06-650 B
WriteAllBytesAsyncbase164096364.59 us17.086 us18.992 us362.19 us325.49 us398.63 us1.00Base0.00-649 B
AppendAllTextfeature1610000423.26 us19.209 us21.351 us427.24 us391.04 us464.37 us0.97Same0.081.00009,683 B
AppendAllTextbase1610000438.79 us13.168 us14.090 us438.49 us417.40 us467.63 us1.00Base0.001.00009,682 B
WriteAllTextfeature1610000382.03 us21.358 us22.853 us374.52 us358.25 us435.63 us1.02Same0.07-9,681 B
WriteAllTextbase1610000374.07 us7.467 us7.668 us372.23 us364.05 us389.75 us1.00Base0.00-9,681 B
AppendAllTextAsyncfeature1610000520.84 us19.473 us21.644 us523.96 us487.78 us571.48 us0.98Same0.051.000011,051 B
AppendAllTextAsyncbase1610000530.96 us20.371 us23.459 us529.09 us493.09 us565.34 us1.00Base0.001.000011,050 B
WriteAllTextAsyncfeature1610000498.27 us19.384 us20.740 us503.71 us452.50 us521.62 us1.00Same0.05-11,243 B
WriteAllTextAsyncbase1610000498.91 us9.625 us9.003 us497.24 us484.46 us516.01 us1.00Base0.00-11,269 B
WriteAllBytesfeature1616384303.08 us6.006 us5.899 us304.15 us292.08 us311.03 us1.01Same0.06-73 B
WriteAllBytesbase1616384300.79 us12.978 us13.886 us301.87 us265.23 us325.34 us1.00Base0.00-73 B
WriteAllBytesAsyncfeature1616384367.98 us19.476 us22.428 us365.41 us328.34 us407.87 us0.97Same0.08-649 B
WriteAllBytesAsyncbase1616384379.02 us22.577 us25.094 us375.69 us325.64 us435.90 us1.00Base0.00-649 B
WriteAllTextfeature16100000555.62 us57.620 us66.355 us520.80 us492.23 us737.46 us0.86Faster0.11-9,681 B
WriteAllTextbase16100000644.68 us20.548 us22.839 us643.18 us610.06 us695.49 us1.00Base0.00-9,681 B
WriteAllTextAsyncfeature161000001,128.82 us45.530 us48.716 us1,130.30 us1,045.36 us1,214.43 us1.00Same0.05-14,594 B
WriteAllTextAsyncbase161000001,133.95 us37.446 us41.621 us1,121.61 us1,089.03 us1,231.48 us1.00Base0.00-14,604 B
WriteAllBytesfeature161048576532.48 us11.637 us13.401 us525.80 us518.26 us561.06 us1.00Same0.04-73 B
WriteAllBytesbase161048576533.17 us13.248 us14.725 us523.78 us519.21 us573.24 us1.00Base0.00-73 B
WriteAllBytesAsyncfeature161048576622.87 us13.173 us14.095 us621.44 us595.94 us649.70 us1.00Same0.03-650 B
WriteAllBytesAsyncbase161048576623.23 us12.784 us14.722 us624.29 us602.51 us648.39 us1.00Base0.00-650 B
WriteAllBytesfeature1610485760099,986.22 us452.014 us352.903 us100,013.60 us99,350.15 us100,425.40 us1.00Same0.01-312 B
WriteAllBytesbase1610485760099,953.53 us1,276.552 us1,131.630 us99,265.80 us98,608.20 us102,158.32 us1.00Base0.00-192 B
WriteAllBytesAsyncfeature1610485760099,485.94 us537.831 us449.113 us99,481.25 us98,826.15 us100,359.60 us1.00Same0.01-1,032 B
WriteAllBytesAsyncbase1610485760099,388.34 us561.578 us497.824 us99,418.80 us98,555.95 us100,157.70 us1.00Base0.00-1,200 B
Perf_FileStream
MethodToolchainfileSizeuserBufferSizeoptionsMeanErrorStdDevMedianMinMaxRatioMannWhitney(3%)RatioSDGen 0Gen 1Allocated
Readfeature10241024None47,794.05 ns227.282 ns201.480 ns47,714.12 ns47,526.33 ns48,179.18 ns1.02Same0.000.37990.19004,352 B
Readbase10241024None46,951.04 ns201.537 ns178.657 ns47,005.25 ns46,556.87 ns47,247.77 ns1.00Base0.000.37540.18774,352 B
Writefeature10241024None305,581.68 ns8,076.317 ns8,641.569 ns305,307.09 ns294,740.75 ns322,471.15 ns1.01Same0.03--4,353 B
Writebase10241024None301,607.63 ns9,747.681 ns10,429.909 ns296,891.45 ns291,708.96 ns328,317.69 ns1.00Base0.00--4,353 B
ReadAsyncfeature10241024None99,006.78 ns614.988 ns513.543 ns98,937.14 ns98,297.32 ns100,139.20 ns1.00Same0.010.4464-5,032 B
ReadAsyncbase10241024None98,838.24 ns494.220 ns438.113 ns98,780.69 ns98,243.79 ns99,720.19 ns1.00Base0.000.4112-5,032 B
WriteAsyncfeature10241024None302,551.16 ns7,206.689 ns7,711.076 ns299,142.73 ns295,134.01 ns323,079.81 ns1.00Same0.03--4,441 B
WriteAsyncbase10241024None301,759.14 ns5,757.147 ns5,912.166 ns299,084.20 ns293,709.55 ns313,665.33 ns1.00Base0.00--4,441 B
Readfeature10241024Asynchronous61,503.87 ns241.833 ns226.210 ns61,507.32 ns61,047.34 ns61,834.20 ns1.02Same0.010.48830.24414,600 B
Readbase10241024Asynchronous60,333.19 ns334.215 ns296.273 ns60,181.68 ns59,942.25 ns60,827.78 ns1.00Base0.000.48260.24134,600 B
Writefeature10241024Asynchronous307,968.95 ns7,437.158 ns8,266.382 ns307,194.58 ns297,219.81 ns328,075.24 ns1.01Same0.05--4,601 B
Writebase10241024Asynchronous304,637.32 ns10,983.654 ns11,752.386 ns299,274.88 ns293,945.75 ns337,416.27 ns1.00Base0.00--4,601 B
ReadAsyncfeature10241024Asynchronous112,855.84 ns370.930 ns309.744 ns112,928.10 ns112,259.12 ns113,184.67 ns1.00Same0.010.4562-5,240 B
ReadAsyncbase10241024Asynchronous112,933.25 ns544.579 ns509.400 ns112,988.41 ns112,094.66 ns113,696.57 ns1.00Base0.000.5040-5,240 B
WriteAsyncfeature10241024Asynchronous310,737.12 ns10,981.809 ns12,206.252 ns304,619.25 ns297,157.88 ns339,849.12 ns1.02Same0.04--4,689 B
WriteAsyncbase10241024Asynchronous304,420.95 ns7,463.836 ns7,986.220 ns303,457.55 ns293,542.33 ns316,344.34 ns1.00Base0.00--4,689 B
OpenClosefeature1024?None35,581.11 ns226.056 ns211.453 ns35,623.35 ns35,210.17 ns35,922.22 ns1.01Same0.01--232 B
OpenClosebase1024?None35,173.23 ns354.616 ns314.358 ns35,049.88 ns34,858.76 ns35,886.75 ns1.00Base0.00--232 B
LockUnlockfeature1024?None50,770.28 ns297.896 ns264.077 ns50,745.32 ns50,421.32 ns51,277.67 ns1.00Same0.01--232 B
LockUnlockbase1024?None50,587.82 ns92.514 ns86.538 ns50,609.70 ns50,398.05 ns50,698.46 ns1.00Base0.00--232 B
SeekForwardfeature1024?None48,110.49 ns155.350 ns137.714 ns48,054.85 ns47,968.79 ns48,377.90 ns1.00Same0.00--232 B
SeekForwardbase1024?None48,215.66 ns199.936 ns166.955 ns48,240.50 ns47,906.73 ns48,536.56 ns1.00Base0.00--232 B
SeekBackwardfeature1024?None52,836.99 ns150.125 ns140.427 ns52,804.29 ns52,668.22 ns53,187.94 ns1.00Same0.00--232 B
SeekBackwardbase1024?None52,777.42 ns219.029 ns194.164 ns52,762.42 ns52,385.80 ns53,196.57 ns1.00Base0.00--232 B
ReadBytefeature1024?None49,935.65 ns389.576 ns364.410 ns49,791.28 ns49,425.30 ns50,557.01 ns0.99Same0.010.39810.19904,352 B
ReadBytebase1024?None50,330.85 ns454.515 ns379.540 ns50,171.43 ns50,006.81 ns51,192.96 ns1.00Base0.000.39680.19844,352 B
WriteBytefeature1024?None314,657.72 ns13,023.384 ns14,997.749 ns312,058.23 ns297,619.39 ns349,290.05 ns1.01Same0.07--4,353 B
WriteBytebase1024?None314,501.40 ns11,378.459 ns12,647.127 ns311,988.52 ns297,434.31 ns343,106.51 ns1.00Base0.00--4,353 B
Flushfeature1024?None3,237,858.80 ns143,741.617 ns159,768.426 ns3,245,419.27 ns3,023,394.27 ns3,591,735.94 ns1.02Same0.06--4,357 B
Flushbase1024?None3,167,053.18 ns116,539.181 ns124,695.618 ns3,196,320.31 ns3,000,535.42 ns3,463,610.42 ns1.00Base0.00--4,357 B
FlushAsyncfeature1024?None4,478,112.19 ns253,693.020 ns292,153.259 ns4,460,757.29 ns4,086,268.75 ns5,116,643.75 ns0.95Same0.0720.8333-160,464 B
FlushAsyncbase1024?None4,698,127.42 ns153,635.456 ns176,926.819 ns4,680,718.75 ns4,286,986.72 ns4,976,757.03 ns1.00Base0.0015.6250-160,460 B
CopyToFilefeature1024?None363,877.64 ns7,017.834 ns7,509.004 ns360,500.99 ns356,932.24 ns379,581.82 ns1.00Same0.03--4,585 B
CopyToFilebase1024?None364,418.84 ns6,836.340 ns6,714.200 ns361,284.16 ns358,203.49 ns375,509.16 ns1.00Base0.00--4,585 B
CopyToFileAsyncfeature1024?None388,035.74 ns9,439.182 ns10,099.819 ns383,378.58 ns376,286.43 ns407,513.41 ns0.97Same0.05--5,450 B
CopyToFileAsyncbase1024?None399,489.82 ns17,557.558 ns18,786.391 ns392,544.61 ns380,803.12 ns449,202.50 ns1.00Base0.00--5,450 B
OpenClosefeature1024?Asynchronous38,789.89 ns190.496 ns168.870 ns38,777.86 ns38,417.71 ns39,080.26 ns1.02Same0.01--264 B
OpenClosebase1024?Asynchronous38,007.81 ns148.759 ns131.871 ns38,005.33 ns37,805.99 ns38,215.50 ns1.00Base0.00--264 B
LockUnlockfeature1024?Asynchronous56,649.42 ns268.105 ns250.785 ns56,627.13 ns56,304.19 ns57,232.34 ns1.00Same0.01--264 B
LockUnlockbase1024?Asynchronous56,790.68 ns258.810 ns242.091 ns56,803.34 ns56,277.01 ns57,132.87 ns1.00Base0.00--264 B
SeekForwardfeature1024?Asynchronous54,038.02 ns167.530 ns148.511 ns54,014.25 ns53,852.23 ns54,358.37 ns0.99Same0.00--264 B
SeekForwardbase1024?Asynchronous54,431.38 ns236.613 ns209.752 ns54,388.09 ns54,083.16 ns54,810.03 ns1.00Base0.00--264 B
SeekBackwardfeature1024?Asynchronous61,239.18 ns268.935 ns251.562 ns61,290.36 ns60,835.55 ns61,655.96 ns1.01Same0.00--264 B
SeekBackwardbase1024?Asynchronous60,375.97 ns215.129 ns167.959 ns60,411.86 ns60,087.43 ns60,641.39 ns1.00Base0.00--264 B
ReadBytefeature1024?Asynchronous61,200.25 ns213.688 ns189.429 ns61,223.98 ns60,816.81 ns61,456.18 ns0.99Same0.010.49020.24514,600 B
ReadBytebase1024?Asynchronous61,662.07 ns529.772 ns469.629 ns61,580.35 ns61,078.89 ns62,683.22 ns1.00Base0.000.49210.24614,600 B
WriteBytefeature1024?Asynchronous329,226.06 ns13,108.738 ns14,570.327 ns323,057.55 ns312,361.59 ns368,330.08 ns1.02Same0.04--4,601 B
WriteBytebase1024?Asynchronous321,888.53 ns8,009.344 ns8,569.909 ns319,918.36 ns311,797.27 ns343,429.69 ns1.00Base0.00--4,601 B
Flushfeature1024?Asynchronous10,002,648.51 ns240,941.656 ns267,806.012 ns10,005,769.57 ns9,591,347.83 ns10,388,052.17 ns1.00Same0.03--225,601 B
Flushbase1024?Asynchronous9,968,961.84 ns237,758.937 ns264,268.429 ns9,956,518.75 ns9,506,181.25 ns10,384,840.62 ns1.00Base0.00--225,592 B
FlushAsyncfeature1024?Asynchronous15,240,391.15 ns428,163.447 ns493,073.663 ns15,200,392.31 ns14,576,930.77 ns16,473,907.69 ns0.99Same0.05--160,715 B
FlushAsyncbase1024?Asynchronous15,385,865.83 ns498,370.460 ns573,924.163 ns15,192,320.83 ns14,808,191.67 ns16,715,100.00 ns1.00Base0.00--160,720 B
CopyToFileAsyncfeature1024?Asynchronous468,274.20 ns4,549.166 ns3,551.690 ns468,612.68 ns460,876.29 ns474,611.03 ns1.00Same0.03--6,058 B
CopyToFileAsyncbase1024?Asynchronous468,939.73 ns10,358.942 ns11,513.936 ns464,406.61 ns454,497.68 ns488,769.46 ns1.00Base0.00--6,058 B
Readfeature1048576512None805,271.17 ns2,957.504 ns2,766.451 ns806,676.25 ns801,152.50 ns808,796.25 ns1.02Same0.01--4,354 B
Readbase1048576512None786,338.46 ns3,898.361 ns3,455.795 ns788,230.00 ns779,907.50 ns789,842.81 ns1.00Base0.00--4,354 B
Writefeature1048576512None2,111,978.38 ns140,500.774 ns156,166.238 ns2,077,657.14 ns1,881,303.57 ns2,442,628.57 ns0.98Same0.11--4,356 B
Writebase1048576512None2,181,868.15 ns157,531.012 ns168,556.418 ns2,148,627.68 ns1,986,307.14 ns2,644,975.00 ns1.00Base0.00--4,356 B
ReadAsyncfeature1048576512None1,354,084.62 ns12,624.489 ns11,808.955 ns1,350,196.88 ns1,338,895.83 ns1,371,312.50 ns1.02Same0.03--4,992 B
ReadAsyncbase1048576512None1,330,649.70 ns26,514.425 ns29,470.713 ns1,337,540.62 ns1,289,075.00 ns1,375,676.04 ns1.00Base0.00--4,994 B
WriteAsyncfeature1048576512None3,186,907.12 ns197,629.292 ns211,461.128 ns3,214,451.56 ns2,845,384.38 ns3,701,545.31 ns1.05Same0.11--4,984 B
WriteAsyncbase1048576512None3,054,810.39 ns185,845.950 ns190,850.108 ns3,090,664.06 ns2,736,831.25 ns3,394,660.94 ns1.00Base0.00--4,998 B
Readfeature1048576512Asynchronous2,411,859.82 ns14,855.955 ns13,169.417 ns2,417,098.21 ns2,385,900.00 ns2,429,957.14 ns1.00Same0.01--59,687 B
Readbase1048576512Asynchronous2,405,879.67 ns12,823.517 ns10,708.217 ns2,407,523.21 ns2,385,833.93 ns2,425,958.04 ns1.00Base0.00--59,688 B
Writefeature1048576512Asynchronous3,860,794.39 ns138,385.893 ns142,112.124 ns3,892,740.62 ns3,601,750.00 ns4,169,771.88 ns1.00Same0.05--59,692 B
Writebase1048576512Asynchronous3,850,331.34 ns112,590.880 ns115,622.545 ns3,893,675.00 ns3,596,137.50 ns4,008,271.88 ns1.00Base0.00--59,692 B
ReadAsyncfeature1048576512Asynchronous3,888,748.26 ns89,472.642 ns95,734.725 ns3,887,691.67 ns3,742,387.50 ns4,118,560.42 ns1.00Same0.02--5,252 B
ReadAsyncbase1048576512Asynchronous3,868,889.73 ns28,648.586 ns25,396.225 ns3,858,753.91 ns3,839,125.00 ns3,931,876.56 ns1.00Base0.00--5,239 B
WriteAsyncfeature1048576512Asynchronous6,356,087.84 ns195,068.198 ns224,640.827 ns6,344,102.70 ns6,013,148.65 ns6,831,421.62 ns0.96Same0.03--5,461 B
WriteAsyncbase1048576512Asynchronous6,599,772.22 ns147,781.828 ns158,124.900 ns6,634,431.25 ns6,253,975.00 ns6,862,602.08 ns1.00Base0.00--5,375 B
Readfeature10485764096None754,079.49 ns5,527.520 ns4,900.002 ns752,247.77 ns747,665.77 ns762,145.54 ns1.01Same0.01--234 B
Readbase10485764096None749,345.76 ns1,878.969 ns1,569.024 ns749,619.35 ns745,657.14 ns751,992.86 ns1.00Base0.00--234 B
Writefeature10485764096None2,022,701.59 ns77,129.669 ns82,527.882 ns2,018,416.07 ns1,919,032.14 ns2,193,852.68 ns0.93Faster0.06--236 B
Writebase10485764096None2,178,365.18 ns139,863.819 ns149,652.720 ns2,127,929.91 ns2,001,677.68 ns2,539,576.79 ns1.00Base0.00--236 B
ReadAsyncfeature10485764096None971,686.77 ns6,107.310 ns5,712.781 ns971,464.06 ns963,068.36 ns981,896.88 ns1.01Same0.01--723 B
ReadAsyncbase10485764096None961,802.37 ns8,917.671 ns8,341.595 ns960,276.95 ns949,815.23 ns979,311.33 ns1.00Base0.00--723 B
WriteAsyncfeature10485764096None2,453,478.01 ns109,070.224 ns116,703.918 ns2,474,889.06 ns2,235,471.88 ns2,663,180.21 ns0.94Same0.10--733 B
WriteAsyncbase10485764096None2,696,384.11 ns266,037.215 ns306,368.852 ns2,515,109.38 ns2,416,722.92 ns3,345,884.38 ns1.00Base0.00--728 B
Appendfeature10485764096DeleteOnClose2,147,201.93 ns114,052.497 ns122,034.894 ns2,127,302.68 ns1,973,035.27 ns2,375,529.91 ns1.00Same0.08--236 B
Appendbase10485764096DeleteOnClose2,155,341.93 ns111,434.561 ns119,233.732 ns2,123,872.66 ns1,973,098.44 ns2,477,187.50 ns1.00Base0.00--236 B
Readfeature10485764096Asynchronous2,427,303.19 ns32,621.312 ns28,917.943 ns2,424,706.70 ns2,376,183.04 ns2,473,919.64 ns1.03Same0.02--55,568 B
Readbase10485764096Asynchronous2,366,349.81 ns19,543.233 ns17,324.567 ns2,366,288.84 ns2,342,508.93 ns2,402,070.54 ns1.00Base0.00--55,568 B
Writefeature10485764096Asynchronous3,844,096.96 ns194,887.219 ns216,616.628 ns3,840,785.94 ns3,476,854.69 ns4,243,960.94 ns0.97Same0.07--55,572 B
Writebase10485764096Asynchronous3,987,810.20 ns228,035.533 ns253,460.890 ns3,989,446.88 ns3,642,431.25 ns4,478,782.81 ns1.00Base0.00--55,572 B
ReadAsyncfeature10485764096Asynchronous3,662,512.68 ns68,915.959 ns61,092.202 ns3,653,790.00 ns3,573,685.00 ns3,777,246.25 ns0.99Same0.02--939 B
ReadAsyncbase10485764096Asynchronous3,709,300.50 ns67,238.123 ns62,894.582 ns3,676,957.50 ns3,636,277.50 ns3,818,272.50 ns1.00Base0.00--939 B
WriteAsyncfeature10485764096Asynchronous5,831,316.46 ns230,353.783 ns265,275.759 ns5,813,307.29 ns5,398,906.25 ns6,356,104.17 ns0.96Same0.06--944 B
WriteAsyncbase10485764096Asynchronous6,091,471.06 ns270,557.066 ns289,493.030 ns6,125,859.38 ns5,632,775.00 ns6,717,779.17 ns1.00Base0.00--944 B
AppendAsyncfeature10485764096DeleteOnClose, Asynchronous6,000,890.86 ns230,208.120 ns246,320.109 ns6,036,430.21 ns5,362,935.42 ns6,308,154.17 ns1.01Same0.07--944 B
AppendAsyncbase10485764096DeleteOnClose, Asynchronous5,957,676.54 ns222,699.461 ns247,529.861 ns5,876,233.33 ns5,567,022.92 ns6,526,445.83 ns1.00Base0.00--944 B
Read_NoBufferingfeature104857616384None261,687.52 ns1,500.661 ns1,403.720 ns261,142.29 ns260,038.12 ns264,243.65 ns1.00Same0.01--169 B
Read_NoBufferingbase104857616384None262,823.68 ns1,244.338 ns1,163.955 ns262,944.70 ns261,321.08 ns264,579.56 ns1.00Base0.00--169 B
Write_NoBufferingfeature104857616384None1,161,379.83 ns37,360.338 ns39,975.143 ns1,159,073.80 ns1,102,235.58 ns1,256,773.56 ns1.01Same0.05--170 B
Write_NoBufferingbase104857616384None1,151,391.47 ns53,497.212 ns54,937.698 ns1,139,090.62 ns1,075,524.55 ns1,262,736.61 ns1.00Base0.00--170 B
ReadAsync_NoBufferingfeature104857616384None372,957.27 ns7,427.204 ns6,947.411 ns372,089.43 ns363,434.38 ns384,427.68 ns1.01Same0.03--569 B
ReadAsync_NoBufferingbase104857616384None368,584.87 ns5,534.715 ns4,906.381 ns367,273.21 ns362,704.61 ns379,329.91 ns1.00Base0.00--569 B
WriteAsync_NoBufferingfeature104857616384None1,280,234.84 ns66,291.878 ns68,076.878 ns1,267,913.94 ns1,181,300.48 ns1,457,015.87 ns1.00Same0.09--572 B
WriteAsync_NoBufferingbase104857616384None1,296,192.60 ns79,336.013 ns84,888.645 ns1,273,094.23 ns1,186,918.75 ns1,486,636.54 ns1.00Base0.00--572 B
Write_NoBuffering_PreallocationSizefeature104857616384None852,228.25 ns16,173.965 ns15,129.137 ns850,202.30 ns834,593.09 ns890,437.17 ns1.01Same0.03---
Write_NoBuffering_PreallocationSizebase104857616384None842,174.79 ns16,164.266 ns13,497.894 ns835,911.81 ns828,001.39 ns869,674.65 ns1.00Base0.00---
Read_NoBufferingfeature104857616384Asynchronous655,252.68 ns7,461.083 ns6,614.056 ns655,757.94 ns645,989.84 ns667,402.86 ns1.01Same0.03--14,026 B
Read_NoBufferingbase104857616384Asynchronous652,845.31 ns15,706.271 ns18,087.366 ns650,496.09 ns624,000.52 ns684,182.03 ns1.00Base0.00--14,026 B
Write_NoBufferingfeature104857616384Asynchronous1,656,573.75 ns72,340.359 ns74,288.222 ns1,644,886.88 ns1,543,862.50 ns1,818,801.88 ns1.04Same0.06--14,029 B
Write_NoBufferingbase104857616384Asynchronous1,597,993.89 ns59,369.636 ns63,524.846 ns1,578,353.44 ns1,492,581.88 ns1,746,371.88 ns1.00Base0.00--14,029 B
ReadAsync_NoBufferingfeature104857616384Asynchronous1,059,561.10 ns14,414.628 ns12,778.192 ns1,057,265.00 ns1,034,439.58 ns1,085,392.50 ns1.01Same0.02--779 B
ReadAsync_NoBufferingbase104857616384Asynchronous1,052,386.56 ns11,299.116 ns10,569.200 ns1,053,511.25 ns1,036,529.58 ns1,075,979.17 ns1.00Base0.00--780 B
WriteAsync_NoBufferingfeature104857616384Asynchronous2,174,548.87 ns49,331.444 ns54,831.770 ns2,159,867.86 ns2,099,317.86 ns2,256,354.46 ns1.04Same0.04--783 B
WriteAsync_NoBufferingbase104857616384Asynchronous2,100,521.29 ns63,077.287 ns70,110.238 ns2,099,020.54 ns1,998,760.71 ns2,241,258.04 ns1.00Base0.00--783 B
WriteAsync_NoBuffering_PreallocationSizefeature104857616384Asynchronous1,889,718.91 ns35,184.725 ns36,132.122 ns1,901,418.06 ns1,815,089.58 ns1,954,740.28 ns0.97Same0.04---
WriteAsync_NoBuffering_PreallocationSizebase104857616384Asynchronous1,954,547.51 ns51,845.481 ns57,626.115 ns1,943,088.89 ns1,872,472.22 ns2,077,129.86 ns1.00Base0.00---
CopyToFilefeature1048576?None878,168.09 ns20,911.412 ns21,474.480 ns877,402.30 ns846,164.14 ns923,324.34 ns1.00Same0.05--467 B
CopyToFilebase1048576?None879,725.35 ns37,373.469 ns39,989.193 ns867,079.17 ns841,259.38 ns979,771.88 ns1.00Base0.00--467 B
CopyToFileAsyncfeature1048576?None1,014,425.22 ns39,369.980 ns40,430.071 ns1,002,705.42 ns949,874.58 ns1,099,800.42 ns1.01Same0.07--1,485 B
CopyToFileAsyncbase1048576?None1,010,409.77 ns43,084.312 ns47,888.099 ns1,007,455.86 ns956,250.00 ns1,108,585.55 ns1.00Base0.00--1,484 B
CopyToFileAsyncfeature1048576?Asynchronous1,316,047.61 ns23,413.973 ns18,280.090 ns1,311,840.10 ns1,286,410.42 ns1,350,338.54 ns1.00Same0.02--2,054 B
CopyToFileAsyncbase1048576?Asynchronous1,318,048.09 ns14,292.640 ns11,158.753 ns1,317,561.46 ns1,300,718.23 ns1,336,801.56 ns1.00Base0.00--2,054 B
Readfeature1048576004096None94,224,746.43 ns722,218.574 ns640,227.954 ns94,412,937.50 ns93,113,850.00 ns95,007,075.00 ns1.03Same0.01--352 B
Readbase1048576004096None91,406,312.50 ns316,920.514 ns280,941.781 ns91,490,412.50 ns90,895,075.00 ns91,838,075.00 ns1.00Base0.00--534 B
Writefeature1048576004096None193,722,472.22 ns23,915,698.424 ns25,589,529.372 ns192,766,250.00 ns153,413,400.00 ns245,223,100.00 ns0.93Same0.25--712 B
Writebase1048576004096None209,466,635.00 ns35,803,866.563 ns41,231,785.977 ns196,838,400.00 ns151,984,700.00 ns302,618,900.00 ns1.00Base0.00--2,832 B
ReadAsyncfeature1048576004096None109,077,284.62 ns1,097,202.764 ns916,214.000 ns109,334,350.00 ns108,005,050.00 ns110,862,500.00 ns1.00Same0.01--1,104 B
ReadAsyncbase1048576004096None108,858,396.43 ns382,658.441 ns339,216.741 ns108,789,450.00 ns108,207,800.00 ns109,361,100.00 ns1.00Base0.00--1,104 B
WriteAsyncfeature1048576004096None227,018,440.00 ns35,404,879.206 ns40,772,311.544 ns229,792,100.00 ns182,094,800.00 ns311,534,400.00 ns1.07Same0.17--1,776 B
WriteAsyncbase1048576004096None218,388,422.22 ns22,674,363.556 ns24,261,314.970 ns219,625,900.00 ns183,155,800.00 ns273,067,000.00 ns1.00Base0.00--1,488 B
Readfeature1048576004096Asynchronous252,923,938.46 ns898,777.432 ns750,519.862 ns252,857,200.00 ns251,157,100.00 ns253,746,200.00 ns1.00Same0.01--5,531,352 B
Readbase1048576004096Asynchronous253,877,753.33 ns2,982,661.333 ns2,789,983.262 ns254,312,200.00 ns247,425,900.00 ns257,734,800.00 ns1.00Base0.00--5,532,488 B
Writefeature1048576004096Asynchronous402,580,825.00 ns43,241,364.563 ns49,796,819.735 ns386,590,600.00 ns326,987,300.00 ns490,653,900.00 ns1.03Same0.21--5,541,832 B
Writebase1048576004096Asynchronous399,992,805.00 ns39,536,495.084 ns45,530,286.532 ns387,832,750.00 ns334,263,500.00 ns486,904,300.00 ns1.00Base0.00--5,532,664 B
ReadAsyncfeature1048576004096Asynchronous382,516,046.67 ns7,185,570.792 ns6,721,387.377 ns381,487,500.00 ns370,730,600.00 ns393,315,800.00 ns1.02Same0.02--4,152 B
ReadAsyncbase1048576004096Asynchronous373,614,440.00 ns5,341,845.121 ns4,996,765.241 ns373,754,300.00 ns367,584,600.00 ns382,869,400.00 ns1.00Base0.00--2,472 B
WriteAsyncfeature1048576004096Asynchronous578,869,400.00 ns37,553,265.788 ns43,246,396.726 ns579,466,300.00 ns496,098,000.00 ns665,653,800.00 ns0.94Same0.11--5,504 B
WriteAsyncbase1048576004096Asynchronous622,093,645.00 ns39,911,327.034 ns45,961,943.563 ns616,034,600.00 ns547,796,400.00 ns719,184,300.00 ns1.00Base0.00--3,688 B
Read_NoBufferingfeature10485760016384None37,410,353.57 ns224,786.252 ns199,267.157 ns37,451,575.00 ns37,141,050.00 ns37,753,800.00 ns1.01Same0.01--396 B
Read_NoBufferingbase10485760016384None36,901,617.14 ns294,585.395 ns275,555.361 ns36,893,414.29 ns36,554,942.86 ns37,426,157.14 ns1.00Base0.00--237 B
Write_NoBufferingfeature10485760016384None59,609,682.14 ns1,149,331.170 ns1,018,852.146 ns59,434,050.00 ns58,350,475.00 ns61,712,875.00 ns0.96Same0.03--288 B
Write_NoBufferingbase10485760016384None61,685,770.31 ns1,802,437.356 ns1,770,234.491 ns61,411,837.50 ns59,715,875.00 ns65,583,300.00 ns1.00Base0.00--1,114 B
ReadAsync_NoBufferingfeature10485760016384None42,971,505.13 ns241,665.443 ns201,801.590 ns42,954,100.00 ns42,556,566.67 ns43,339,016.67 ns0.99Same0.01--877 B
ReadAsync_NoBufferingbase10485760016384None43,167,833.33 ns418,817.784 ns391,762.415 ns43,247,466.67 ns42,638,883.33 ns44,060,816.67 ns1.00Base0.00--696 B
WriteAsync_NoBufferingfeature10485760016384None67,394,141.67 ns1,569,220.425 ns1,679,048.274 ns67,055,000.00 ns65,438,025.00 ns71,107,100.00 ns0.99Same0.04--1,750 B
WriteAsync_NoBufferingbase10485760016384None68,068,523.61 ns2,984,491.488 ns3,193,372.456 ns67,074,400.00 ns65,034,550.00 ns75,968,450.00 ns1.00Base0.00--1,602 B
Write_NoBuffering_PreallocationSizefeature10485760016384None51,119,603.85 ns362,507.878 ns302,710.496 ns51,137,625.00 ns50,507,150.00 ns51,546,425.00 ns1.01Same0.01---
Write_NoBuffering_PreallocationSizebase10485760016384None50,841,844.64 ns582,627.784 ns516,484.355 ns50,732,287.50 ns50,295,750.00 ns52,166,250.00 ns1.00Base0.00---
Read_NoBufferingfeature10485760016384Asynchronous84,522,456.67 ns873,713.413 ns817,272.069 ns84,176,125.00 ns83,510,650.00 ns86,351,800.00 ns1.01Same0.01--1,382,974 B
Read_NoBufferingbase10485760016384Asynchronous83,869,947.92 ns625,860.100 ns488,630.398 ns83,913,825.00 ns82,821,475.00 ns84,876,400.00 ns1.00Base0.00--1,382,792 B
Write_NoBufferingfeature10485760016384Asynchronous115,158,592.11 ns4,579,217.629 ns5,089,788.262 ns113,061,500.00 ns109,513,750.00 ns126,676,550.00 ns0.99Same0.06--1,384,860 B
Write_NoBufferingbase10485760016384Asynchronous117,220,297.06 ns5,827,298.367 ns5,984,206.390 ns115,471,150.00 ns110,291,100.00 ns130,435,850.00 ns1.00Base0.00--1,383,948 B
ReadAsync_NoBufferingfeature10485760016384Asynchronous132,965,167.86 ns1,403,376.349 ns1,244,056.579 ns133,329,775.00 ns130,807,800.00 ns134,741,300.00 ns1.02Same0.01--1,688 B
ReadAsync_NoBufferingbase10485760016384Asynchronous129,961,196.15 ns1,425,126.839 ns1,190,045.455 ns129,748,500.00 ns128,371,300.00 ns132,348,350.00 ns1.00Base0.00--1,160 B
WriteAsync_NoBufferingfeature10485760016384Asynchronous169,568,685.00 ns8,217,657.250 ns9,463,466.310 ns170,281,450.00 ns155,281,200.00 ns190,523,500.00 ns1.00Same0.05--1,544 B
WriteAsync_NoBufferingbase10485760016384Asynchronous169,294,370.00 ns5,286,827.091 ns6,088,317.940 ns168,534,500.00 ns157,309,900.00 ns179,270,700.00 ns1.00Base0.00--4,168 B
WriteAsync_NoBuffering_PreallocationSizefeature10485760016384Asynchronous143,548,615.79 ns2,743,390.637 ns3,049,271.424 ns143,190,900.00 ns139,451,800.00 ns149,736,400.00 ns0.97Same0.03---
WriteAsync_NoBuffering_PreallocationSizebase10485760016384Asynchronous147,782,808.33 ns2,874,676.002 ns2,244,357.934 ns147,805,850.00 ns143,348,200.00 ns151,241,200.00 ns1.00Base0.00---
CopyToFilefeature104857600?None64,210,432.69 ns1,116,444.732 ns932,281.915 ns63,950,050.00 ns63,215,450.00 ns66,575,400.00 ns1.01Same0.02--668 B
CopyToFilebase104857600?None63,208,091.67 ns1,162,039.243 ns1,086,972.228 ns62,767,275.00 ns61,836,250.00 ns65,164,900.00 ns1.00Base0.00--668 B
CopyToFileAsyncfeature104857600?None70,442,667.31 ns1,001,086.490 ns835,952.559 ns70,248,750.00 ns69,255,050.00 ns72,619,625.00 ns0.99Same0.02--1,756 B
CopyToFileAsyncbase104857600?None71,104,023.61 ns1,413,300.305 ns1,512,215.492 ns70,739,125.00 ns69,306,800.00 ns74,570,350.00 ns1.00Base0.00--5,854 B
CopyToFileAsyncfeature104857600?Asynchronous108,894,796.15 ns880,047.422 ns734,879.455 ns108,942,550.00 ns107,932,200.00 ns110,536,400.00 ns1.00Same0.01--2,600 B
CopyToFileAsyncbase104857600?Asynchronous108,693,046.15 ns1,008,272.065 ns841,952.839 ns108,679,900.00 ns107,281,750.00 ns110,529,250.00 ns1.00Base0.00--2,600 B
GetLengthfeature??Read45.57 ns0.130 ns0.101 ns45.57 ns45.43 ns45.73 ns1.00Same0.00---
GetLengthbase??Read45.42 ns0.157 ns0.139 ns45.45 ns45.19 ns45.71 ns1.00Base0.00---
GetLengthfeature??Write1,821.11 ns5.103 ns4.774 ns1,821.63 ns1,814.99 ns1,832.43 ns1.00Same0.00---
GetLengthbase??Write1,826.95 ns6.196 ns5.795 ns1,828.86 ns1,813.60 ns1,832.08 ns1.00Base0.00---
Perf_Hashing
MethodToolchainMeanErrorStdDevMedianMinMaxRatioMannWhitney(3%)RatioSDAllocated
Sha1feature180.9 ms1.40 ms1.31 ms180.5 ms179.6 ms183.4 ms1.00Same0.01576 B
Sha1base180.6 ms1.23 ms1.09 ms180.3 ms179.5 ms182.8 ms1.00Base0.00576 B
Sha256feature447.6 ms2.95 ms2.76 ms448.0 ms444.2 ms452.8 ms1.00Same0.014,200 B
Sha256base447.2 ms2.27 ms1.89 ms446.3 ms444.9 ms451.9 ms1.00Base0.003,944 B
Sha384feature266.3 ms2.68 ms2.51 ms266.3 ms263.3 ms272.0 ms0.95Faster0.024,216 B
Sha384base281.2 ms3.20 ms3.00 ms280.6 ms277.5 ms285.7 ms1.00Base0.003,976 B
Sha512feature267.3 ms2.23 ms2.08 ms267.6 ms263.6 ms269.6 ms0.94Faster0.034,264 B
Sha512base285.2 ms8.49 ms9.08 ms280.7 ms277.6 ms309.1 ms1.00Base0.001,352 B
Perf_NamedPipeStream
MethodToolchainsizeOptionsMeanErrorStdDevMedianMinMaxRatioMannWhitney(3%)RatioSDAllocated
ReadWritefeature1000000None153.5 us1.85 us1.54 us153.3 us151.0 us156.5 us0.99Same0.031 B
ReadWritebase1000000None155.6 us3.94 us4.38 us155.0 us150.0 us164.7 us1.00Base0.001 B
ReadWriteAsyncfeature1000000None195.1 us11.62 us13.38 us200.5 us164.4 us209.9 us1.05Same0.12401 B
ReadWriteAsyncbase1000000None186.4 us12.70 us14.62 us186.7 us162.4 us208.0 us1.00Base0.00401 B
ReadWritefeature1000000Asynchronous226.3 us1.99 us1.86 us226.1 us223.3 us229.8 us1.00Same0.01353 B
ReadWritebase1000000Asynchronous225.9 us1.38 us1.22 us225.6 us224.5 us228.3 us1.00Base0.00353 B
ReadWriteAsyncfeature1000000Asynchronous201.0 us3.15 us2.63 us201.8 us192.6 us202.6 us0.98Same0.021 B
ReadWriteAsyncbase1000000Asynchronous205.7 us1.15 us1.07 us205.6 us204.1 us207.7 us1.00Base0.001 B
SslStreamTests
MethodToolchainprotocolMeanErrorStdDevMedianMinMaxRatioMannWhitney(3%)RatioSDGen 0Allocated
DefaultHandshakeContextIPv4Asyncfeature?19,621.84 us122.995 us102.707 us19,610.68 us19,499.85 us19,784.67 us1.01Same0.01-17,293 B
DefaultHandshakeContextIPv4Asyncbase?19,501.38 us88.755 us74.114 us19,482.19 us19,403.14 us19,693.31 us1.00Base0.00-17,376 B
DefaultHandshakeContextIPv6Asyncfeature?19,566.52 us88.361 us82.653 us19,549.09 us19,464.19 us19,719.18 us1.00Same0.01-17,293 B
DefaultHandshakeContextIPv6Asyncbase?19,611.11 us88.456 us82.742 us19,585.61 us19,492.93 us19,783.74 us1.00Base0.00-17,293 B
DefaultHandshakeIPv4Asyncfeature?19,605.73 us74.391 us69.585 us19,592.37 us19,519.21 us19,733.02 us1.00Same0.01-18,385 B
DefaultHandshakeIPv4Asyncbase?19,561.50 us56.590 us47.255 us19,554.16 us19,478.55 us19,646.75 us1.00Base0.00-18,406 B
DefaultHandshakeIPv6Asyncfeature?19,608.79 us63.459 us56.254 us19,598.75 us19,530.24 us19,728.67 us1.00Same0.00-18,403 B
DefaultHandshakeIPv6Asyncbase?19,685.98 us100.609 us89.187 us19,670.42 us19,554.86 us19,853.57 us1.00Base0.00-18,403 B
WriteReadAsyncfeature?44.26 us0.256 us0.240 us44.18 us43.95 us44.80 us1.00Same0.01--
WriteReadAsyncbase?44.41 us0.164 us0.154 us44.42 us44.16 us44.73 us1.00Base0.00--
ReadWriteAsyncfeature?55.11 us0.646 us0.604 us55.26 us54.21 us56.05 us1.01Same0.010.0400336 B
ReadWriteAsyncbase?54.63 us0.308 us0.257 us54.66 us54.13 us55.09 us1.00Base0.000.0400337 B
ConcurrentReadWritefeature?69.93 us1.351 us1.387 us69.78 us67.59 us72.46 us0.96Same0.030.0200255 B
ConcurrentReadWritebase?72.81 us1.417 us1.575 us72.09 us70.87 us75.78 us1.00Base0.000.0400397 B
ConcurrentReadWriteLargeBufferfeature?77.60 us2.922 us3.000 us76.86 us74.64 us84.74 us0.98Same0.05-190 B
ConcurrentReadWriteLargeBufferbase?79.07 us2.479 us2.652 us78.13 us76.16 us86.28 us1.00Base0.00-226 B
HandshakeContosoAsyncfeatureTls1219,532.94 us103.514 us96.827 us19,508.72 us19,407.70 us19,736.12 us1.01Same0.01-19,853 B
HandshakeContosoAsyncbaseTls1219,398.35 us103.881 us92.088 us19,350.18 us19,302.12 us19,571.13 us1.00Base0.00-19,853 B
HandshakeECDSA256CertAsyncfeatureTls127,072.83 us32.142 us30.065 us7,087.34 us7,021.41 us7,108.41 us1.00Same0.01-18,416 B
HandshakeECDSA256CertAsyncbaseTls127,062.98 us49.105 us43.531 us7,047.70 us7,016.76 us7,164.05 us1.00Base0.00-18,423 B
HandshakeRSA1024CertAsyncfeatureTls126,356.77 us44.771 us41.879 us6,346.90 us6,307.94 us6,429.49 us1.00Same0.01-18,605 B
HandshakeRSA1024CertAsyncbaseTls126,341.40 us66.056 us61.789 us6,313.69 us6,265.78 us6,499.12 us1.00Base0.00-18,604 B
HandshakeRSA2048CertAsyncfeatureTls128,542.91 us61.772 us57.782 us8,543.93 us8,469.27 us8,634.13 us1.00Same0.01-18,998 B
HandshakeRSA2048CertAsyncbaseTls128,510.36 us45.630 us42.682 us8,506.02 us8,462.29 us8,616.71 us1.00Base0.00-18,998 B
HandshakeRSA4096CertAsyncfeatureTls1219,637.15 us39.985 us37.402 us19,635.46 us19,582.85 us19,703.58 us1.00Same0.01-19,813 B
HandshakeRSA4096CertAsyncbaseTls1219,735.36 us140.278 us124.353 us19,709.62 us19,552.78 us19,909.09 us1.00Base0.00-19,813 B

The file system ones I ran a bunch of times - from the historical results, it seems like there is quite a bit of variation. I had a mix of test cases flagged faster / slower, but not the same test case consistently.

@jkoritzinsky
jkoritzinsky marked this pull request as ready for review October 11, 2021 18:20
@kasperk81

Copy link
Copy Markdown
Contributor

Is there a document stating short intro, rationale and/or benefit of this feature? The disadvantages appear to be: it increases code size in this repository, increases compiled assembly size and there is no significant gain in performance either.

@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

@kasperk81 here's the overall design doc for the feature: https://github.com/dotnet/runtime/blob/main/docs/design/features/source-generator-pinvokes.md

The primary benefits of this feature are: better diagnostics (the marshalling stubs are actually debuggable), better AOT and linker compatibility (the AOT compiler doesn't need to hard-code implicit dependencies that the runtime uses to implement the built-in marshalling), and easier evolution (moving the marshalling infrastructure to run at compile time makes it easier for us to fix bugs since changes don't affect every P/Invoke that the user's application uses, even ones they didn't write).

@AaronRobinsonMSFT

Copy link
Copy Markdown
Member

and there is no significant gain in performance either.

@kasperk81 This is a short term and intentional non-goal. The reasoning is we want to ensure a high level of confidence and compatibility for v1. To that end we did do some optimizations, but very few. As we gain confidence with how this methodology works we are free to try optimizations that are targeted as opposed to the "everyone gets it" design with the built-in system. As we get further into .NET 7 and onto .NET 8 we are considering opportunities for better performance in this area.

@jkoritzinsky

Copy link
Copy Markdown
MemberAuthor

It looks like something from #59590 might have broken this PR. I'll take a look probably after the hackathon.

cc: @VSadov if you get a chance to take a look sooner, I'd appreciate it.

@elinor-fung

elinor-fung commented Oct 12, 2021

Copy link
Copy Markdown
Member

@VSadov - looks like things are failing across the board (not just in this PR) - not sure why the CI in #59590 didn't fail 😕

 Assert failure(PID 1208 [0x000004b8], Thread: 4164 [0x1044]): m_pLayoutLock->IsWriterLock()
CORECLR! PEImage::LoadFlat + 0x1B5 (0x00007ffc`f01b98e5)
CORECLR! AssemblyNative::LoadFromStream + 0x186 (0x00007ffc`f0295e66)
SYSTEM.PRIVATE.CORELIB! <no symbol> + 0x0 (0x00007ffc`ef763fd0)
SYSTEM.PRIVATE.CORELIB! <no symbol> + 0x0 (0x00007ffc`ef78be3a)
<no module>! <no symbol> + 0x0 (0x00007ffc`90cfd4f7)
<no module>! <no symbol> + 0x0 (0x000002a6`3d50a398)
File: D:\a\_work\1\s\src\coreclr\vm\peimage.cpp Line: 797
Image: C:\h\w\9F0308EC\p\corerun.exe
 Assert failure(PID 2756 [0x00000ac4], Thread: 3364 [0x0d24]): m_pLayoutLock->IsWriterLock()
CORECLR! PEImage::LoadImageW + 0x497 (0x00007ffc`f01ba1e7)
CORECLR! AssemblyNative::LoadFromInMemoryModule + 0x143 (0x00007ffc`f0294b03)
SYSTEM.PRIVATE.CORELIB! <no symbol> + 0x0 (0x00007ffc`ef764049)
SYSTEM.PRIVATE.CORELIB! <no symbol> + 0x0 (0x00007ffc`ef7640f9)
SYSTEM.PRIVATE.CORELIB! <no symbol> + 0x0 (0x00007ffc`ef8598be)
<no module>! <no symbol> + 0x0 (0x00007ffc`90cfc847)
IJWNATIVECALLINGMANAGEDDLL! <no symbol> + 0x0 (0x00007ffd`09190000)
<no module>! <no symbol> + 0x0 (0x000002c7`56feda9c)
File: D:\a\_work\1\s\src\coreclr\vm\peimage.cpp Line: 797
Image: C:\h\w\9F0308EC\p\corerun.exe

@elinor-fung

Copy link
Copy Markdown
Member

/azp run runtime

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

AaronRobinsonMSFTand others added 3 commits October 13, 2021 17:59
…60374)
* Update StructMarshalling.md with details
Co-authored-by: Elinor Fung <elfung@microsoft.com>
Co-authored-by: Jeremy Koritzinsky <jekoritz@microsoft.com>
* Remove dotnet-experimental feed from NuGet.config
* Revert changes to solution files and restore configs

@AaronRobinsonMSFTAaronRobinsonMSFT left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@safern

Copy link
Copy Markdown
Member

Merging with a merge commit as it was requested to preserve the history of commits coming from the experiment.

@safern
safern merged commit b201a16 into mainOct 18, 2021
@jkoritzinsky
jkoritzinsky deleted the feature/use-dllimport-generator branch October 18, 2021 23:13
@ghostghost locked as resolved and limited conversation to collaborators Nov 18, 2021
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Runtime.InteropServicessource-generatorIndicates an issue with a source generator feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@jkoritzinsky@am11@jkotas@AaronRobinsonMSFT@elinor-fung@kasperk81@safern@kant2002