AdaptiveConsulting / Aeron.NET

Efficient reliable UDP unicast, UDP multicast, and IPC message transport - .NET port of Aeron
Apache License 2.0
483 stars 93 forks source link

.NET 6.0 Update #118

Open welly87 opened 2 years ago

welly87 commented 2 years ago

Hi @JPWatson

I try to upgrade to netstandard and netcore3.1 to net6.0 then i run IpcThroughput

here's the result before upgrading

Duration 1,000ms - 10,062,930 messages - 322,013,760 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,063,976 messages - 322,047,232 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,065,513 messages - 322,096,416 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,057,301 messages - 321,833,632 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,057,799 messages - 321,849,568 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,060,503 messages - 321,936,096 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,062,570 messages - 322,002,240 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,062,352 messages - 321,995,264 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,059,734 messages - 321,911,488 bytes, GC0 0, GC1 0, GC2 0

then after upgrading

Duration 1,000ms - 9,474,969 messages - 303,199,008 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,474,044 messages - 303,169,408 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,471,702 messages - 303,094,464 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,473,014 messages - 303,136,448 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,475,162 messages - 303,205,184 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,474,305 messages - 303,177,760 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,432,768 messages - 301,848,576 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,465,044 messages - 302,881,408 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,467,925 messages - 302,973,600 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 9,468,866 messages - 303,003,712 bytes, GC0 0, GC1 0, GC2 0

The environment i use is Amazon Linux 2022 on Graviton3 (ARM Neoverse V1) AWS c7g.

Looks weird. Will try to find out. It's also resulting the same stuff even after i try to disable/enable PGO and Tiered Compilation.

  1. Is that why you don't upgrade the dotnet and still use it for old .NET version?
  2. seems currently it's windows only? I might send pull request for Linux if that's interest you

Cheers

welly87 commented 2 years ago

btw, after trying brute force for JIT runtime parameters finally arrived with this env var 🤣

export DOTNET_TieredPGO=1
export DOTNET_TieredCompilation=1

now i got better result i gues😄

Duration 1,000ms - 10,210,707 messages - 326,742,624 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,210,836 messages - 326,746,752 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,211,970 messages - 326,783,040 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,212,156 messages - 326,788,992 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,209,112 messages - 326,691,584 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,207,238 messages - 326,631,616 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,211,890 messages - 326,780,480 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,211,263 messages - 326,760,416 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,209,094 messages - 326,691,008 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,210,013 messages - 326,720,416 bytes, GC0 0, GC1 0, GC2 0
Duration 1,000ms - 10,210,616 messages - 326,739,712 bytes, GC0 0, GC1 0, GC2 0
JPWatson commented 2 years ago

Interesting results. Thanks, @welly87.

Is that why you don't upgrade the dotnet and still use it for old .NET version?

Targetting the lowest common denominator from a library perspective so I hadn't got around to testing the latest and greatest .net version.

seems currently it's windows only? I might send pull request for Linux if that's interest you

We've got builds running on both windows and linux. What are you seeing that's windows only?

welly87 commented 2 years ago

basically first time i clone the repo and run IpcThrougput it show error

❯ Samples/Adaptive.Aeron.Samples.IpcThroughput/bin/Release/net6.0/Adaptive.Aeron.Samples.IpcThroughput
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at HardwareInformation.MachineInformationGatherer.GatherInformation(Boolean skipClockspeedTest, Boolean invalidateCache, ILogger`1 logger)
   at Adaptive.Aeron.Samples.Common.ComputerSpecifications..ctor() in /home/ec2-user/Aeron.NET/src/Samples/Adaptive.Aeron.Samples.Common/ComputerSpecifications.cs:line 51
   at Adaptive.Aeron.Samples.Common.ComputerSpecifications.Dump() in /home/ec2-user/Aeron.NET/src/Samples/Adaptive.Aeron.Samples.Common/ComputerSpecifications.cs:line 93
   at Adaptive.Aeron.Samples.IpcThroughput.IpcThroughput.Main() in /home/ec2-user/Aeron.NET/src/Samples/Adaptive.Aeron.Samples.IpcThroughput/IpcThroughput.cs:line 37

i try to restore the the nuget package but seems it can't resolve the HardwareInformation dependencies. It builds fine but have runtime errors. So i just commented this line

// ComputerSpecifications.Dump();

just to make the runtime happy....

welly87 commented 2 years ago

another stuff that seems funny is when running on dotnet3.1 on Amazon Linux 2022/Graviton3 seems that nunit runner throw SSL errors when dotnet test (even if it's there)

The active test run was aborted. Reason: Test host process crashed : No usable version of libssl was found

Test Run Aborted with error System.Exception: One or more errors occurred.
 ---> System.Exception: Unable to read beyond the end of the stream.
   at System.IO.BinaryReader.Read7BitEncodedInt()
   at System.IO.BinaryReader.ReadString()
   at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.LengthPrefixCommunicationChannel.NotifyDataAvailable()
   at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TcpClientExtensions.MessageLoopAsync(TcpClient client, ICommunicationChannel channel, Action`1 errorHandler, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---.

but after i upgrade to .NET 6.0 it's magically disappeared. The good stuff is .NET getting better and better each release.

Passed!  - Failed:     0, Passed:   225, Skipped:     0, Total:   225, Duration: 354 ms - /home/ec2-user/Aeron.NET/src/Adaptive.Agrona.Tests/bin/Debug/net6.0/Adaptive.Agrona.Tests.dll (net6.0)
  Adaptive.Aeron.Tests -> /home/ec2-user/Aeron.NET/src/Adaptive.Aeron.Tests/bin/Debug/net6.0/Adaptive.Aeron.Tests.dll
Test run for /home/ec2-user/Aeron.NET/src/Adaptive.Aeron.Tests/bin/Debug/net6.0/Adaptive.Aeron.Tests.dll (.NETCoreApp,Version=v6.0)
Microsoft (R) Test Execution Command Line Tool Version 17.3.0 (arm64)
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
  Skipped ShouldAllowConcludeOfClonedContext [< 1 ms]
  Skipped ShouldNotAllowConcludeMoreThanOnce [< 1 ms]
  Skipped BasicMessageTest [4 ms]
welly87 commented 2 years ago

I push my experiment here if you want to take a look

https://github.com/welly87/Aeron.NET/

and put some notes here

https://github.com/welly87/Aeron.NET/blob/master/graviton.md

JPWatson commented 2 years ago

Thanks, @welly87. I will take a look asap.