-
Notifications
You must be signed in to change notification settings - Fork 5.2k
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_Utf8EncodingBenchmarkDotNet=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