-
Notifications
You must be signed in to change notification settings - Fork 5.1k
Description
After running benchmarks for 3.1 vs 5.0 using "Ubuntu arm64 Qualcomm Machines" owned by the JIT Team, I've found few regressions related to Utf8Encoding
. They are alll reproducible and I've verified that it's not a matter of loop alignment (by running them with --envVars COMPlus_JitAlignLoops:1
).
It looks like it's ARM64 specific regression, I was not able to reproduce it for ARM (the 32 bit variant).
Repro
git clone https://github.com/dotnet/performance.git
python3 ./performance/scripts/benchmarks_ci.py -f netcoreapp3.1 netcoreapp5.0 --architecture arm64 --filter Perf_Utf8Encoding
BenchmarkDotNet=v0.12.1.1405-nightly, OS=ubuntu 16.04
Unknown processor
[Host] : .NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), Arm64 RyuJIT
Job-VTSQOV : .NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), Arm64 RyuJIT
Job-RAMSQZ : .NET Core 5.0.0 (CoreCLR 5.0.20.41714, CoreFX 5.0.20.41714), Arm64 RyuJIT
Method | Runtime | Input | Mean | Ratio | Allocated |
---|---|---|---|---|---|
GetByteCount | .NET Core 3.1 | EnglishAllAscii | 38.00 us | 1.00 | - |
GetByteCount | .NET Core 5.0 | EnglishAllAscii | 40.66 us | 1.07 | - |
GetBytes | .NET Core 3.1 | EnglishAllAscii | 101.09 us | 1.00 | 163840 B |
GetBytes | .NET Core 5.0 | EnglishAllAscii | 104.96 us | 1.04 | 163855 B |
GetString | .NET Core 3.1 | EnglishAllAscii | 103.47 us | 1.00 | 327648 B |
GetString | .NET Core 5.0 | EnglishAllAscii | 95.76 us | 0.93 | 327677 B |
GetByteCount | .NET Core 3.1 | EnglishMostlyAscii | 117.50 us | 1.00 | - |
GetByteCount | .NET Core 5.0 | EnglishMostlyAscii | 221.40 us | 1.88 | - |
GetBytes | .NET Core 3.1 | EnglishMostlyAscii | 273.49 us | 1.00 | 169880 B |
GetBytes | .NET Core 5.0 | EnglishMostlyAscii | 377.67 us | 1.38 | 169895 B |
GetString | .NET Core 3.1 | EnglishMostlyAscii | 262.55 us | 1.00 | 327656 B |
GetString | .NET Core 5.0 | EnglishMostlyAscii | 250.18 us | 0.95 | 327685 B |
GetByteCount | .NET Core 3.1 | Chinese | 53.34 us | 1.00 | - |
GetByteCount | .NET Core 5.0 | Chinese | 90.21 us | 1.69 | - |
GetBytes | .NET Core 3.1 | Chinese | 245.94 us | 1.00 | 177752 B |
GetBytes | .NET Core 5.0 | Chinese | 279.62 us | 1.14 | 177768 B |
GetString | .NET Core 3.1 | Chinese | 373.80 us | 1.00 | 150112 B |
GetString | .NET Core 5.0 | Chinese | 358.11 us | 0.96 | 150126 B |
GetByteCount | .NET Core 3.1 | Cyrillic | 45.35 us | 1.00 | - |
GetByteCount | .NET Core 5.0 | Cyrillic | 76.01 us | 1.68 | - |
GetBytes | .NET Core 3.1 | Cyrillic | 193.34 us | 1.00 | 100880 B |
GetBytes | .NET Core 5.0 | Cyrillic | 222.10 us | 1.15 | 100889 B |
GetString | .NET Core 3.1 | Cyrillic | 262.69 us | 1.00 | 130856 B |
GetString | .NET Core 5.0 | Cyrillic | 259.83 us | 0.99 | 130868 B |
GetByteCount | .NET Core 3.1 | Greek | 58.36 us | 1.00 | - |
GetByteCount | .NET Core 5.0 | Greek | 97.41 us | 1.67 | - |
GetBytes | .NET Core 3.1 | Greek | 275.88 us | 1.00 | 129248 B |
GetBytes | .NET Core 5.0 | Greek | 314.00 us | 1.14 | 129260 B |
GetString | .NET Core 3.1 | Greek | 394.55 us | 1.00 | 164264 B |
GetString | .NET Core 5.0 | Greek | 394.35 us | 1.00 | 164278 B |
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository