Skip to content

Commit 9062dbe

Browse files
committed
Issue #29, Phase 1 - Benchmarking
1 parent ecb2efc commit 9062dbe

19 files changed

Lines changed: 1010 additions & 0 deletions

csharp-dns-server.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dnstest", "dnstest\dnstest.
77
EndProject
88
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dns-cli", "dns-cli\dns-cli.csproj", "{57BD1660-D9B3-4ABD-8F5F-9C89F4F1F8AE}"
99
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dnsbench", "dnsbench\dnsbench.csproj", "{2505E862-4384-4D64-9DC6-F25F0C49B835}"
11+
EndProject
1012
Global
1113
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1214
Debug|Any CPU = Debug|Any CPU
@@ -25,6 +27,10 @@ Global
2527
{57BD1660-D9B3-4ABD-8F5F-9C89F4F1F8AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
2628
{57BD1660-D9B3-4ABD-8F5F-9C89F4F1F8AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
2729
{57BD1660-D9B3-4ABD-8F5F-9C89F4F1F8AE}.Release|Any CPU.Build.0 = Release|Any CPU
30+
{2505E862-4384-4D64-9DC6-F25F0C49B835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31+
{2505E862-4384-4D64-9DC6-F25F0C49B835}.Debug|Any CPU.Build.0 = Debug|Any CPU
32+
{2505E862-4384-4D64-9DC6-F25F0C49B835}.Release|Any CPU.ActiveCfg = Release|Any CPU
33+
{2505E862-4384-4D64-9DC6-F25F0C49B835}.Release|Any CPU.Build.0 = Release|Any CPU
2834
EndGlobalSection
2935
GlobalSection(MonoDevelopProperties) = preSolution
3036
Policies = $0

dnsbench/BenchmarkDotNet.Artifacts/results/DnsBench.DnsMessageBenchmarks-report-full-compressed.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
```
2+
3+
BenchmarkDotNet v0.14.0, macOS 26.1 (25B78) [Darwin 25.1.0]
4+
Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
5+
.NET SDK 8.0.104
6+
[Host] : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
7+
DefaultJob : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
8+
9+
10+
```
11+
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
12+
|---------------------------------------- |-----------:|---------:|---------:|-------:|-------:|----------:|
13+
| 'Parse: Simple query' | 272.8 ns | 2.88 ns | 2.70 ns | 0.1669 | - | 1048 B |
14+
| 'Parse: AAAA query' | 293.5 ns | 1.71 ns | 1.51 ns | 0.1783 | - | 1120 B |
15+
| 'Parse: Simple response (1 A)' | 292.1 ns | 2.62 ns | 2.32 ns | 0.1974 | - | 1240 B |
16+
| 'Parse: CNAME response (2 records)' | 616.7 ns | 3.85 ns | 3.41 ns | 0.4587 | 0.0010 | 2880 B |
17+
| 'Parse: Large response (12 records)' | 2,738.8 ns | 14.46 ns | 12.82 ns | 2.1782 | 0.0229 | 13664 B |
18+
| 'Write: Query (new MemoryStream)' | 144.6 ns | 0.77 ns | 0.64 ns | 0.1528 | 0.0002 | 960 B |
19+
| 'Write: Response (new MemoryStream)' | 396.1 ns | 1.88 ns | 1.66 ns | 0.2217 | - | 1392 B |
20+
| 'Write: Query (reused MemoryStream)' | 123.6 ns | 0.56 ns | 0.52 ns | 0.0572 | - | 360 B |
21+
| 'Write: Response (reused MemoryStream)' | 367.3 ns | 1.44 ns | 1.21 ns | 0.1259 | - | 792 B |
22+
| 'Round-trip: Parse + Write query' | 427.3 ns | 2.62 ns | 2.45 ns | 0.3376 | 0.0005 | 2120 B |
23+
| 'Round-trip: Parse + Write response' | 1,190.5 ns | 3.10 ns | 2.59 ns | 0.7420 | 0.0019 | 4656 B |
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Gen0,Gen1,Allocated
2+
'Parse: Simple query',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,272.8 ns,2.88 ns,2.70 ns,0.1669,0.0000,1048 B
3+
'Parse: AAAA query',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,293.5 ns,1.71 ns,1.51 ns,0.1783,0.0000,1120 B
4+
'Parse: Simple response (1 A)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,292.1 ns,2.62 ns,2.32 ns,0.1974,0.0000,1240 B
5+
'Parse: CNAME response (2 records)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,616.7 ns,3.85 ns,3.41 ns,0.4587,0.0010,2880 B
6+
'Parse: Large response (12 records)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"2,738.8 ns",14.46 ns,12.82 ns,2.1782,0.0229,13664 B
7+
'Write: Query (new MemoryStream)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,144.6 ns,0.77 ns,0.64 ns,0.1528,0.0002,960 B
8+
'Write: Response (new MemoryStream)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,396.1 ns,1.88 ns,1.66 ns,0.2217,0.0000,1392 B
9+
'Write: Query (reused MemoryStream)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,123.6 ns,0.56 ns,0.52 ns,0.0572,0.0000,360 B
10+
'Write: Response (reused MemoryStream)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,367.3 ns,1.44 ns,1.21 ns,0.1259,0.0000,792 B
11+
'Round-trip: Parse + Write query',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,427.3 ns,2.62 ns,2.45 ns,0.3376,0.0005,2120 B
12+
'Round-trip: Parse + Write response',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"1,190.5 ns",3.10 ns,2.59 ns,0.7420,0.0019,4656 B
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<!DOCTYPE html>
2+
<html lang='en'>
3+
<head>
4+
<meta charset='utf-8' />
5+
<title>DnsBench.DnsMessageBenchmarks-20251125-235803</title>
6+
7+
<style type="text/css">
8+
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
9+
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
10+
tr { background-color: #fff; border-top: 1px solid #ccc; }
11+
tr:nth-child(even) { background: #f8f8f8; }
12+
</style>
13+
</head>
14+
<body>
15+
<pre><code>
16+
BenchmarkDotNet v0.14.0, macOS 26.1 (25B78) [Darwin 25.1.0]
17+
Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
18+
.NET SDK 8.0.104
19+
[Host] : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
20+
DefaultJob : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
21+
</code></pre>
22+
<pre><code></code></pre>
23+
24+
<table>
25+
<thead><tr><th>Method </th><th>Mean</th><th>Error</th><th>StdDev</th><th>Gen0</th><th>Gen1</th><th>Allocated</th>
26+
</tr>
27+
</thead><tbody><tr><td>&#39;Parse: Simple query&#39;</td><td>272.8 ns</td><td>2.88 ns</td><td>2.70 ns</td><td>0.1669</td><td>-</td><td>1048 B</td>
28+
</tr><tr><td>&#39;Parse: AAAA query&#39;</td><td>293.5 ns</td><td>1.71 ns</td><td>1.51 ns</td><td>0.1783</td><td>-</td><td>1120 B</td>
29+
</tr><tr><td>&#39;Parse: Simple response (1 A)&#39;</td><td>292.1 ns</td><td>2.62 ns</td><td>2.32 ns</td><td>0.1974</td><td>-</td><td>1240 B</td>
30+
</tr><tr><td>&#39;Parse: CNAME response (2 records)&#39;</td><td>616.7 ns</td><td>3.85 ns</td><td>3.41 ns</td><td>0.4587</td><td>0.0010</td><td>2880 B</td>
31+
</tr><tr><td>&#39;Parse: Large response (12 records)&#39;</td><td>2,738.8 ns</td><td>14.46 ns</td><td>12.82 ns</td><td>2.1782</td><td>0.0229</td><td>13664 B</td>
32+
</tr><tr><td>&#39;Write: Query (new MemoryStream)&#39;</td><td>144.6 ns</td><td>0.77 ns</td><td>0.64 ns</td><td>0.1528</td><td>0.0002</td><td>960 B</td>
33+
</tr><tr><td>&#39;Write: Response (new MemoryStream)&#39;</td><td>396.1 ns</td><td>1.88 ns</td><td>1.66 ns</td><td>0.2217</td><td>-</td><td>1392 B</td>
34+
</tr><tr><td>&#39;Write: Query (reused MemoryStream)&#39;</td><td>123.6 ns</td><td>0.56 ns</td><td>0.52 ns</td><td>0.0572</td><td>-</td><td>360 B</td>
35+
</tr><tr><td>&#39;Write: Response (reused MemoryStream)&#39;</td><td>367.3 ns</td><td>1.44 ns</td><td>1.21 ns</td><td>0.1259</td><td>-</td><td>792 B</td>
36+
</tr><tr><td>&#39;Round-trip: Parse + Write query&#39;</td><td>427.3 ns</td><td>2.62 ns</td><td>2.45 ns</td><td>0.3376</td><td>0.0005</td><td>2120 B</td>
37+
</tr><tr><td>&#39;Round-trip: Parse + Write response&#39;</td><td>1,190.5 ns</td><td>3.10 ns</td><td>2.59 ns</td><td>0.7420</td><td>0.0019</td><td>4656 B</td>
38+
</tr></tbody></table>
39+
</body>
40+
</html>

dnsbench/BenchmarkDotNet.Artifacts/results/DnsBench.DnsProtocolBenchmarks-report-full-compressed.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
```
2+
3+
BenchmarkDotNet v0.14.0, macOS 26.1 (25B78) [Darwin 25.1.0]
4+
Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
5+
.NET SDK 8.0.104
6+
[Host] : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
7+
DefaultJob : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
8+
9+
10+
```
11+
| Method | Mean | Error | StdDev | Gen0 | Allocated |
12+
|----------------------------------- |------------:|----------:|----------:|-------:|----------:|
13+
| &#39;ReadString: Simple (www.msn.com)&#39; | 60.6599 ns | 0.3570 ns | 0.3164 ns | 0.0471 | 296 B |
14+
| &#39;ReadString: Medium (7 labels)&#39; | 165.7388 ns | 0.6849 ns | 0.5719 ns | 0.1261 | 792 B |
15+
| &#39;ReadString: Compressed pointer&#39; | 80.2575 ns | 0.4812 ns | 0.4018 ns | 0.0739 | 464 B |
16+
| ReadUshort | 0.8081 ns | 0.0049 ns | 0.0038 ns | - | - |
17+
| ReadUint | 0.8254 ns | 0.0271 ns | 0.0266 ns | - | - |
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Gen0,Allocated
2+
'ReadString: Simple (www.msn.com)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,60.6599 ns,0.3570 ns,0.3164 ns,0.0471,296 B
3+
'ReadString: Medium (7 labels)',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,165.7388 ns,0.6849 ns,0.5719 ns,0.1261,792 B
4+
'ReadString: Compressed pointer',DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,80.2575 ns,0.4812 ns,0.4018 ns,0.0739,464 B
5+
ReadUshort,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,0.8081 ns,0.0049 ns,0.0038 ns,0.0000,0 B
6+
ReadUint,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,0.8254 ns,0.0271 ns,0.0266 ns,0.0000,0 B
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!DOCTYPE html>
2+
<html lang='en'>
3+
<head>
4+
<meta charset='utf-8' />
5+
<title>DnsBench.DnsProtocolBenchmarks-20251126-000139</title>
6+
7+
<style type="text/css">
8+
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
9+
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
10+
tr { background-color: #fff; border-top: 1px solid #ccc; }
11+
tr:nth-child(even) { background: #f8f8f8; }
12+
</style>
13+
</head>
14+
<body>
15+
<pre><code>
16+
BenchmarkDotNet v0.14.0, macOS 26.1 (25B78) [Darwin 25.1.0]
17+
Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
18+
.NET SDK 8.0.104
19+
[Host] : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
20+
DefaultJob : .NET 8.0.4 (8.0.424.16909), Arm64 RyuJIT AdvSIMD
21+
</code></pre>
22+
<pre><code></code></pre>
23+
24+
<table>
25+
<thead><tr><th>Method </th><th>Mean </th><th>Error</th><th>StdDev</th><th>Gen0</th><th>Allocated</th>
26+
</tr>
27+
</thead><tbody><tr><td>&#39;ReadString: Simple (www.msn.com)&#39;</td><td>60.6599 ns</td><td>0.3570 ns</td><td>0.3164 ns</td><td>0.0471</td><td>296 B</td>
28+
</tr><tr><td>&#39;ReadString: Medium (7 labels)&#39;</td><td>165.7388 ns</td><td>0.6849 ns</td><td>0.5719 ns</td><td>0.1261</td><td>792 B</td>
29+
</tr><tr><td>&#39;ReadString: Compressed pointer&#39;</td><td>80.2575 ns</td><td>0.4812 ns</td><td>0.4018 ns</td><td>0.0739</td><td>464 B</td>
30+
</tr><tr><td>ReadUshort</td><td>0.8081 ns</td><td>0.0049 ns</td><td>0.0038 ns</td><td>-</td><td>-</td>
31+
</tr><tr><td>ReadUint</td><td>0.8254 ns</td><td>0.0271 ns</td><td>0.0266 ns</td><td>-</td><td>-</td>
32+
</tr></tbody></table>
33+
</body>
34+
</html>

dnsbench/BenchmarkDotNet.Artifacts/results/DnsBench.RequestProcessingBenchmarks-report-full-compressed.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)