聊一聊如何使用Crank给我们的类库做基准测试

元数据

作者: Cnblogs.com
标题: 聊一聊如何使用Crank给我们的类库做基准测试
分类: #dotnet
地址: https://www.cnblogs.com/catcher1994/p/17291228.html

笔记

什么是 Crank 跳转

Crank 是.NET团队用于运行基准测试的基础设施,包括(但不限于)TechEmpower Web Framework基准测试中的场景。 Crank 第一次出现在公众的视野应该是在 .NET Conf 2021, @sebastienros 演讲的 Benchmarking ASP.NET Applications with .NET Crank

安装 crank 跳转

dotnet tool update Microsoft.Crank.Controller --version "0.2.0-*" --global
dotnet tool update Microsoft.Crank.Agent --version "0.2.0-*" --global

BenchmarkSwitcher 来运行 跳转

public static void Main(string[] args)
{
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
}

配置文件 跳转

# 作业
jobs:
# 作业名,自定义
benchmarks:
# 源相关内容
source:
# 这里是本地文件夹,也可以配置远程 repository 和分支
localFolder: .
# 这个是具体的 csproj
project: micro.csproj
# 一些变量
variables:
filterArg: "*"
jobArg: short
# 参数
arguments: --job  --filter  --memory
options:
# 使用 BenchmarkDotNet
benchmarkDotNet: true
# 场景 
scenarios:
# 场景名,自定义
Md5VsSha256:
application:
# 与前面的定义作业名一致
job: benchmarks
# 档案
profiles:
# 档案名,自定义
local:
jobs: 
application:
# 代理的地址
endpoints: 
- http://localhost:5010

启动代理 跳转

默认端口是 5010

crank-agent
通过控制器向代理发送指令 跳转

crank --config C:\code\crank\samples\micro\micro.benchmarks.yml --scenario Md5VsSha256 --profile local

一般来说,我们会把控制器得到的结果保存在 JSON 文件里面,便于后续作对比或者要出趋势图 跳转

crank --config C:\code\crank\samples\micro\micro.benchmarks.yml --scenario Md5VsSha256 --profile local --json base.json

最后是把这两个结果做一个对比 跳转

crank compare base.json head.json

如果要在不同的机器上面执行要怎么配置 跳转

我们要做的是在配置文件中的 profiles 节点增加机器的代理地址即可

profiles:
local:
jobs: 
application:
endpoints: 
- http://localhost:5010
remote-win:
jobs: 
application:
endpoints: 
- http://192.168.1.100:9090
remote-lin:
jobs: 
application:
endpoints: 
- http://192.168.1.102:9090 
本文的示例代码 跳转

https://github.com/catcherwong/library_with_crank

参考资料 跳转

https://github.com/dotnet/crank
https://github.com/sebastienros/aspnetcore
https://github.com/martincostello/api
https://github.com/aspnet/Benchmarks/blob/main/scenarios/efcore.benchmarks.yml