Closed pmaytak closed 1 month ago
The benchmarks were run on the feature branch https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/2817 which includes improvements to Base64Url related logic (for both, .NET 9 and < .NET 8 via Microsoft.Bcl.Memory version 9.0.0-rc.1.24431.7). The benchmarks ran were chosen to show typical end-to-end scenarios.
Method | Compile | Runtime | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 8 | .NET 8 | 29.80 μs | 1.00 | 0.078 μs | 0.169 μs | 29.96 μs | 30.05 μs | 30.38 μs | 0.4272 | - | 7.23 KB | 1.00 |
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 8 | .NET 9 | 27.91 μs | 0.937 | 0.065 μs | 0.142 μs | 28.16 μs | 28.17 μs | 28.19 μs | 0.4272 | - | 7.2 KB | 0.996 |
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 9 | .NET 9 | 27.86 μs | 0.935 | 0.072 μs | 0.156 μs | 28.08 μs | 28.11 μs | 28.13 μs | 0.4272 | - | 7.2 KB | 0.996 |
Method | Compile | Runtime | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JsonWebTokenHandler_ValidateJWEAsync | .NET 8 | .NET 8 | 36.19 μs | 1.00 | 0.091 μs | 0.191 μs | 36.41 μs | 36.47 μs | 36.82 μs | 0.8545 | 0.1221 | 15.83 KB | 1.00 |
JsonWebTokenHandler_ValidateJWEAsync | .NET 8 | .NET 9 | 34.26 μs | 0.947 | 0.115 μs | 0.247 μs | 34.54 μs | 34.72 μs | 34.84 μs | 0.8545 | 0.1221 | 15.84 KB | 1.001 |
JsonWebTokenHandler_ValidateJWEAsync | .NET 9 | .NET 9 | 34.19 μs | 0.945 | 0.114 μs | 0.249 μs | 34.50 μs | 34.54 μs | 34.76 μs | 0.8545 | 0.1221 | 15.84 KB | 1.001 |
Method | Compile | Runtime | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SHRHandler_ValidateSignedHttpRequestAsync | .NET 8 | .NET 8 | 72.61 μs | 1.00 | 0.091 μs | 0.202 μs | 72.86 μs | 72.92 μs | 73.15 μs | 0.7324 | - | 15.45 KB | 1.00 |
SHRHandler_ValidateSignedHttpRequestAsync | .NET 8 | .NET 9 | 70.10 μs | 0.965 | 0.091 μs | 0.201 μs | 70.31 μs | 70.40 μs | 70.72 μs | 0.7324 | - | 15.4 KB | 0.997 |
SHRHandler_ValidateSignedHttpRequestAsync | .NET 9 | .NET 9 | 69.87 μs | 0.962 | 0.097 μs | 0.200 μs | 70.13 μs | 70.17 μs | 70.38 μs | 0.7324 | - | 15.4 KB | 0.997 |
Same results but as an image (easier to read).
Benchmark info for all the runs:
BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.4169/23H2/2023Update/SunValley3) (Hyper-V)
AMD EPYC 7763, 1 CPU, 16 logical and 8 physical cores
.NET SDK 9.0.100-rc.1.24452.12
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
MediumRun : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
Job=MediumRun MaxAbsoluteError=10.0000 ms Runtime=.NET 8.0
IterationCount=15 LaunchCount=4 WarmupCount=10
----
BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.4169/23H2/2023Update/SunValley3) (Hyper-V)
AMD EPYC 7763, 1 CPU, 16 logical and 8 physical cores
.NET SDK 9.0.100-rc.1.24452.12
[Host] : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
MediumRun : .NET 9.0.0 (9.0.24.43107), X64 RyuJIT AVX2
Job=MediumRun MaxAbsoluteError=10.0000 ms Runtime=.NET 9.0
IterationCount=15 LaunchCount=4 WarmupCount=10
----
BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.4169/23H2/2023Update/SunValley3) (Hyper-V)
AMD EPYC 7763, 1 CPU, 16 logical and 8 physical cores
.NET SDK 9.0.100-rc.1.24452.12
[Host] : .NET 9.0.0 (9.0.24.43107), X64 RyuJIT AVX2
MediumRun : .NET 9.0.0 (9.0.24.43107), X64 RyuJIT AVX2
Job=MediumRun MaxAbsoluteError=10.0000 ms Runtime=.NET 9.0
IterationCount=15 LaunchCount=4 WarmupCount=10
These benchmarks were run on the dev branch (without Base64Url related improvements).
Method | Compile | Runtime | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 8 | .NET 8 | 31.52 μs | 1.00 | 0.062 μs | 0.136 μs | 31.68 μs | 31.75 μs | 31.85 μs | 0.4272 | - | 7.23 KB | 1.00 |
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 8 | .NET 9 | 29.78 μs | 0.945 | 0.088 μs | 0.192 μs | 30.03 μs | 30.13 μs | 30.47 μs | 0.3662 | - | 7.2 KB | 0.996 |
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 9 | .NET 9 | 30.20 μs | 0.958 | 0.462 μs | 0.986 μs | 31.85 μs | 31.94 μs | 32.10 μs | 0.3662 | - | 7.2 KB | 0.996 |
Method | Compile | Runtime | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JsonWebTokenHandler_ValidateJWEAsync | .NET 8 | .NET 8 | 38.58 μs | 1.00 | 0.137 μs | 0.303 μs | 38.98 μs | 39.11 μs | 39.42 μs | 0.9766 | 0.1221 | 16.97 KB | 1.00 |
JsonWebTokenHandler_ValidateJWEAsync | .NET 8 | .NET 9 | 37.05 μs | 0.960 | 0.160 μs | 0.344 μs | 37.54 μs | 37.68 μs | 38.10 μs | 0.9766 | 0.1221 | 16.98 KB | 1.001 |
JsonWebTokenHandler_ValidateJWEAsync | .NET 9 | .NET 9 | 36.73 μs | 0.952 | 0.124 μs | 0.267 μs | 37.07 μs | 37.17 μs | 37.51 μs | 0.9766 | 0.1221 | 16.98 KB | 1.001 |
Method | Compile | Runtime | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SHRHandler_ValidateSignedHttpRequestAsync | .NET 8 | .NET 8 | 77.03 μs | 1.00 | 0.122 μs | 0.265 μs | 77.36 μs | 77.44 μs | 77.86 μs | 0.7324 | - | 15.84 KB | 1.00 |
SHRHandler_ValidateSignedHttpRequestAsync | .NET 8 | .NET 9 | 74.38 μs | 0.966 | 0.164 μs | 0.350 μs | 74.83 μs | 74.93 μs | 75.03 μs | 0.7324 | - | 15.79 KB | 0.997 |
SHRHandler_ValidateSignedHttpRequestAsync | .NET 9 | .NET 9 | 74.74 μs | 0.970 | 0.209 μs | 0.454 μs | 75.47 μs | 75.56 μs | 75.92 μs | 0.7324 | - | 15.79 KB | 0.997 |
Same results but as an image (easier to read).
These are the combined results of the above two sets of runs where .NET 8 does not include Base64Url improvement and .NET 9 does. The ratio was readjusted.
Method | Compile | Runtime | Base64Url | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 8 | .NET 8 | Not changed | 31.52 μs | 1.00 | 0.062 μs | 0.136 μs | 31.68 μs | 31.75 μs | 31.85 μs | 0.4272 | - | 7.23 KB | 1.00 |
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 8 | .NET 9 | Not changed | 29.78 μs | 0.945 | 0.088 μs | 0.192 μs | 30.03 μs | 30.13 μs | 30.47 μs | 0.3662 | - | 7.2 KB | 0.996 |
JsonWebTokenHandler_ValidateTokenAsyncWithTVP | .NET 9 | .NET 9 | Changed | 27.86 μs | 0.884 | 0.072 μs | 0.156 μs | 28.08 μs | 28.11 μs | 28.13 μs | 0.4272 | - | 7.2 KB | 0.996 |
Method | Compile | Runtime | Base64Url | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JsonWebTokenHandler_ValidateJWEAsync | .NET 8 | .NET 8 | Not changed | 38.58 μs | 1.00 | 0.137 μs | 0.303 μs | 38.98 μs | 39.11 μs | 39.42 μs | 0.9766 | 0.1221 | 16.97 KB | 1.00 |
JsonWebTokenHandler_ValidateJWEAsync | .NET 8 | .NET 9 | Not changed | 37.05 μs | 0.960 | 0.160 μs | 0.344 μs | 37.54 μs | 37.68 μs | 38.10 μs | 0.9766 | 0.1221 | 16.98 KB | 1.001 |
JsonWebTokenHandler_ValidateJWEAsync | .NET 9 | .NET 9 | Changed | 34.19 μs | 0.886 | 0.114 μs | 0.249 μs | 34.50 μs | 34.54 μs | 34.76 μs | 0.8545 | 0.1221 | 15.84 KB | 0.933 |
Method | Compile | Runtime | Base64Url | Mean | Ratio | Error | StdDev | P90 | P95 | P100 | Gen0 | Gen1 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SHRHandler_ValidateSignedHttpRequestAsync | .NET 8 | .NET 8 | Not changed | 77.03 μs | 1.00 | 0.122 μs | 0.265 μs | 77.36 μs | 77.44 μs | 77.86 μs | 0.7324 | - | 15.84 KB | 1.00 |
SHRHandler_ValidateSignedHttpRequestAsync | .NET 8 | .NET 9 | Not changed | 74.38 μs | 0.966 | 0.164 μs | 0.350 μs | 74.83 μs | 74.93 μs | 75.03 μs | 0.7324 | - | 15.79 KB | 0.997 |
SHRHandler_ValidateSignedHttpRequestAsync | .NET 9 | .NET 9 | Changed | 69.87 μs | 0.907 | 0.097 μs | 0.200 μs | 70.13 μs | 70.17 μs | 70.38 μs | 0.7324 | - | 15.4 KB | 0.972 |
Same results but as an image (easier to read).
Run benchmarks (probably just the common token validation since it's closer to user's E2E scenarios) for comparison.