Clean up benchmarks (#1487)
- Benchmarks are suffixed with *Benchmarks - Removed Custom RpsColumn.cs and used Ops/Second column - Removed params from RequestParsingBenchmark
This commit is contained in:
parent
49f09d5a25
commit
5644310811
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
public static class ErrorUtilities
|
||||
{
|
||||
public static void ThrowInvalidRequestLine()
|
||||
{
|
||||
throw new InvalidOperationException("Invalid request line");
|
||||
}
|
||||
|
||||
public static void ThrowInvalidRequestHeaders()
|
||||
{
|
||||
throw new InvalidOperationException("Invalid request headers");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ using Microsoft.AspNetCore.Testing;
|
|||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
[Config(typeof(CoreConfig))]
|
||||
public class FrameParsingOverhead
|
||||
public class FrameParsingOverheadBenchmark
|
||||
{
|
||||
private const int InnerLoopCount = 512;
|
||||
|
||||
|
|
@ -60,14 +60,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
|
||||
if (!_frame.TakeStartLine(_buffer, out var consumed, out var examined))
|
||||
{
|
||||
RequestParsing.ThrowInvalidRequestLine();
|
||||
ErrorUtilities.ThrowInvalidRequestLine();
|
||||
}
|
||||
|
||||
_frame.InitializeHeaders();
|
||||
|
||||
if (!_frame.TakeMessageHeaders(_buffer, out consumed, out examined))
|
||||
{
|
||||
RequestParsing.ThrowInvalidRequestHeaders();
|
||||
ErrorUtilities.ThrowInvalidRequestHeaders();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
|
||||
if (!_frame.TakeStartLine(_buffer, out var consumed, out var examined))
|
||||
{
|
||||
RequestParsing.ThrowInvalidRequestLine();
|
||||
ErrorUtilities.ThrowInvalidRequestLine();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
|
||||
if (!_frame.TakeMessageHeaders(_buffer, out var consumed, out var examined))
|
||||
{
|
||||
RequestParsing.ThrowInvalidRequestHeaders();
|
||||
ErrorUtilities.ThrowInvalidRequestHeaders();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -16,13 +16,13 @@ using Moq;
|
|||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
[Config(typeof(CoreConfig))]
|
||||
public class Writing
|
||||
public class FrameWritingBenchmark
|
||||
{
|
||||
private readonly TestFrame<object> _frame;
|
||||
private readonly TestFrame<object> _frameChunked;
|
||||
private readonly byte[] _writeData;
|
||||
|
||||
public Writing()
|
||||
public FrameWritingBenchmark()
|
||||
{
|
||||
_frame = MakeFrame();
|
||||
_frameChunked = MakeFrame();
|
||||
|
|
@ -10,9 +10,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
{
|
||||
[Config(typeof(CoreConfig))]
|
||||
|
||||
public class KestrelHttpParser : IHttpRequestLineHandler, IHttpHeadersHandler
|
||||
public class KestrelHttpParserBenchmark : IHttpRequestLineHandler, IHttpHeadersHandler
|
||||
{
|
||||
private readonly Internal.Http.KestrelHttpParser _parser = new Internal.Http.KestrelHttpParser(log: null);
|
||||
private readonly KestrelHttpParser _parser = new KestrelHttpParser(log: null);
|
||||
|
||||
private ReadableBuffer _buffer;
|
||||
|
||||
|
|
@ -55,14 +55,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
{
|
||||
if (!_parser.ParseRequestLine(this, _buffer, out var consumed, out var examined))
|
||||
{
|
||||
RequestParsing.ThrowInvalidRequestHeaders();
|
||||
ErrorUtilities.ThrowInvalidRequestHeaders();
|
||||
}
|
||||
|
||||
_buffer = _buffer.Slice(consumed, _buffer.End);
|
||||
|
||||
if (!_parser.ParseHeaders(this, _buffer, out consumed, out examined, out var consumedBytes))
|
||||
{
|
||||
RequestParsing.ThrowInvalidRequestHeaders();
|
||||
ErrorUtilities.ThrowInvalidRequestHeaders();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -9,7 +9,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure;
|
|||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
public class KnownStrings
|
||||
public class KnownStringsBenchmark
|
||||
{
|
||||
static byte[] _method = Encoding.UTF8.GetBytes("GET ");
|
||||
static byte[] _version = Encoding.UTF8.GetBytes("HTTP/1.1\r\n");
|
||||
|
|
@ -10,7 +10,7 @@ using BenchmarkDotNet.Attributes;
|
|||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
[Config(typeof(CoreConfig))]
|
||||
public class PipeThroughput
|
||||
public class PipeThroughputBenchmark
|
||||
{
|
||||
private const int _writeLenght = 57;
|
||||
private const int InnerLoopCount = 512;
|
||||
|
|
@ -10,11 +10,8 @@ using Microsoft.AspNetCore.Testing;
|
|||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
[Config(typeof(CoreConfig))]
|
||||
public class RequestParsing
|
||||
public class RequestParsingBenchmark
|
||||
{
|
||||
[Params(typeof(Internal.Http.KestrelHttpParser))]
|
||||
public Type ParserType { get; set; }
|
||||
|
||||
public IPipe Pipe { get; set; }
|
||||
|
||||
public Frame<object> Frame { get; set; }
|
||||
|
|
@ -25,7 +22,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
public void Setup()
|
||||
{
|
||||
var connectionContext = new MockConnection(new KestrelServerOptions());
|
||||
connectionContext.ListenerContext.ServiceContext.HttpParserFactory = frame => (IHttpParser)Activator.CreateInstance(ParserType, frame.ConnectionContext.ListenerContext.ServiceContext.Log);
|
||||
connectionContext.ListenerContext.ServiceContext.HttpParserFactory = frame => new KestrelHttpParser(frame.ConnectionContext.ListenerContext.ServiceContext.Log);
|
||||
|
||||
Frame = new Frame<object>(application: null, context: connectionContext);
|
||||
PipelineFactory = new PipeFactory();
|
||||
|
|
@ -128,7 +125,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
|
||||
if (!Frame.TakeStartLine(readableBuffer, out var consumed, out var examined))
|
||||
{
|
||||
ThrowInvalidRequestLine();
|
||||
ErrorUtilities.ThrowInvalidRequestLine();
|
||||
}
|
||||
Pipe.Reader.Advance(consumed, examined);
|
||||
|
||||
|
|
@ -139,21 +136,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
|
||||
if (!Frame.TakeMessageHeaders(readableBuffer, out consumed, out examined))
|
||||
{
|
||||
ThrowInvalidRequestHeaders();
|
||||
ErrorUtilities.ThrowInvalidRequestHeaders();
|
||||
}
|
||||
Pipe.Reader.Advance(consumed, examined);
|
||||
}
|
||||
while (true);
|
||||
}
|
||||
|
||||
public static void ThrowInvalidRequestLine()
|
||||
{
|
||||
throw new InvalidOperationException("Invalid request line");
|
||||
}
|
||||
|
||||
public static void ThrowInvalidRequestHeaders()
|
||||
{
|
||||
throw new InvalidOperationException("Invalid request headers");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,11 +3,9 @@
|
|||
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
[Config(typeof(CoreConfig))]
|
||||
public class RequestParsingData
|
||||
{
|
||||
public const int InnerLoopCount = 512;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure;
|
|||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
[Config(typeof(CoreConfig))]
|
||||
public class ResponseHeaders
|
||||
public class ResponseHeadersBenchmark
|
||||
{
|
||||
private const int InnerLoopCount = 512;
|
||||
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using BenchmarkDotNet.Columns;
|
||||
using BenchmarkDotNet.Reports;
|
||||
using BenchmarkDotNet.Running;
|
||||
|
||||
namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
||||
{
|
||||
public class RpsColumn : IColumn
|
||||
{
|
||||
private static int NanosPerSecond = 1000 * 1000 * 1000;
|
||||
|
||||
public string GetValue(Summary summary, Benchmark benchmark)
|
||||
{
|
||||
var totalNanos = summary.Reports.First(r => r.Benchmark == benchmark)?.ResultStatistics?.Mean ?? 0;
|
||||
// Make sure we don't divide by zero!!
|
||||
return Math.Abs(totalNanos) > 0.0 ? (NanosPerSecond / totalNanos).ToString("N2") : "N/A";
|
||||
}
|
||||
|
||||
public bool IsDefault(Summary summary, Benchmark benchmark) => false;
|
||||
public bool IsAvailable(Summary summary) => true;
|
||||
public string Id => "RPS-Column";
|
||||
public string ColumnName => "RPS";
|
||||
public bool AlwaysShow => true;
|
||||
public ColumnCategory Category => ColumnCategory.Custom;
|
||||
public int PriorityInCategory => 1;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using BenchmarkDotNet.Columns;
|
||||
using BenchmarkDotNet.Configs;
|
||||
using BenchmarkDotNet.Diagnosers;
|
||||
using BenchmarkDotNet.Engines;
|
||||
|
|
@ -15,7 +16,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance
|
|||
{
|
||||
Add(JitOptimizationsValidator.FailOnError);
|
||||
Add(MemoryDiagnoser.Default);
|
||||
Add(new RpsColumn());
|
||||
Add(StatisticColumn.OperationsPerSecond);
|
||||
|
||||
Add(Job.Default
|
||||
.With(BenchmarkDotNet.Environments.Runtime.Core)
|
||||
|
|
|
|||
Loading…
Reference in New Issue