基准测试运行器

一个通过LLM运行.NET基准测试的MCP服务器,支持返回结果和生成多种格式的报告,适用于性能检查、PR中的性能比较和快速回归测试。

  • by alexbel83
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 alexbel83/Mcp.BenchmarkRunner

使用说明

麦克。BenchmarkRunner

快跑。NET基准测试。
C#中的MCP(模型上下文协议)服务器,按需执行BenchmarkDotNet并返回结果和工件。使用 MCP检查员 和 Visual Studio中的GitHub Copilot聊天工具.

由维护 Aliaksandr Marozka — amarozka.dev

TL;DR——让你的AI“运行哈希基准测试”,获取Mean/Alloc增量和Markdown/JSON/CSV工件。非常适合演示MCP、PR中的性能检查或快速回归搜索。


✨ 特性

  • MCP工具
    • run_bench(filter?, job?, exporters?, timeoutSec?) –运行基准测试,获得 runId +JSON摘要
    • get_results(runId) 解析的JSON摘要(Mean、Alloc/Op等)
    • list_artifacts(runId) –列出所有文件(JSON/Markdown/CSV/日志)
    • compare_runs(baseRunId, headRunId) –简单增量(平均值和分配字节/Op的变化百分比)
  • 作业预设: Short, Medium, Long
  • 出口商: json, fulljson, md, csv
  • 客户:MCP检查器(stdio)和Visual Studio(副驾驶聊天工具)

🗂 项目布局

Mcp.BenchmarkRunner.sln
│
├─ src/
│  ├─ Mcp.BenchmarkRunner.Server/          # MCP server (console)
│  │  ├─ Program.cs                        # host + stdio transport + attribute discovery
│  │  └─ Tools/
│  │     ├─ BenchTools.cs                  # run_bench / get_results / list_artifacts
│  │     └─ CompareTools.cs                # compare_runs
│  │
│  └─ SampleBenchmarks/                    # BenchmarkDotNet executable
│     ├─ Program.cs                        # CLI: --artifacts/--exporters/--job/--filter
│     ├─ Jobs.cs                           # Short/Medium/Long presets
│     └─ HashBench.cs                      # MD5 vs SHA256 demo
│
└─ runs/                                   # output per runId (created at runtime)

流动:检查员/副驾驶→ MCP服务器(stdio)→ 生成 dotnet run 在…上 SampleBenchmarks → BDN写入工件→ 服务器返回JSON/paths。


🚀 快速启动

先决条件

  • .NET SDK 9.0(或将两个项目都切换到 .NET 8.0)
  • (可选)用于MCP检查器的Node.js(npx)

构建和健全性检查(CLI)

dotnet restore
dotnet build

# Run benchmarks without MCP (sanity)
dotnet run --project src/SampleBenchmarks/SampleBenchmarks.csproj -c Release -- \
  --artifacts runs/manual1 --exporters json,md --job Short --filter *Hash*

# Start the MCP server
dotnet run --project src/Mcp.BenchmarkRunner.Server

文物出现在 runs/<runId or manual1>.


🧪 MCP检查员(独立)

启动检查器:

npx -y @modelcontextprotocol/inspector
# or:
npm i -g @modelcontextprotocol/inspector
mcp-inspector

连接(stdio):

  • 命令: dotnet
  • Args: run --project src/Mcp.BenchmarkRunner.Server/Mcp.BenchmarkRunner.Server.csproj

有效载荷示例:

{ "filter": "*Hash*", "job": "Short", "exporters": "json,md" }
{ "BaseRunId": "<first>", "HeadRunId": "<second>" }

Windows npm ENOENT修复程序
如果 npx 失败与 %APPDATA%\npm 未找到:
mkdir "%APPDATA%\npm" && npm config set prefix "%APPDATA%\npm" 并添加 %APPDATA%\npm 到PATH。


🧰 Visual Studio(副驾驶聊天工具)

选项A-- .mcp.json 在 溶液根 (推荐)

{
  "servers": {
    "benchrunner": {
      "name": "Benchmark Runner",
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "src/Mcp.BenchmarkRunner.Server/Mcp.BenchmarkRunner.Server.csproj"
      ]
    }
  }
}

选项B——全局 %USERPROFILE%\.mcp.json (使用绝对路径)

{
  "servers": {
    "benchrunner": {
      "name": "Benchmark Runner",
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "C:\\path\\to\\repo\\src\\Mcp.BenchmarkRunner.Server\\Mcp.BenchmarkRunner.Server.csproj"
      ]
    }
  }
}

使用它: View → GitHub Copilot 聊天助手 → 工具/代理→ 启用 基准跑者 → run:

  • run_bench → grab runId
  • get_results / list_artifacts
  • compare_runs 有两个runId

日志: View → 输出→ GitHub Copilot.


🧩 工具合同

run_bench

{ "filter": "string?", "job": "Short|Medium|Long", "exporters": "json|fulljson|md|csv", "timeoutSec": 600 }

退货: { "runId": "string", "artifactsDir": "path", "summary": { ... } }

get_results

{ "runId": "string" }

退货: 解析的JSON导出器对象或 null.

list_artifacts

{ "runId": "string" }

退货: 下的文件路径列表 runs/<runId>.

compare_runs

{ "BaseRunId": "string", "HeadRunId": "string" }

退货: 带有平均值/异基因基/头的行 %Δ.


🛠 故障排除

  • restore failed
    • 启用 nuget.org 来源;清除缓存:
      dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org
      dotnet nuget locals all --clear
    • 启用 预发布 (MCP SDK是预览版)或将两个项目切换到 net8.0.
  • 基准测试在CLI中有效,但通过MCP失败
    • 通常为a 路径问题 从启动时 bin/….
    • 向上走 5个级别 从 AppContext.BaseDirectory 到repo根目录 或 自动检测根(查找 .sln/src).
  • dotnet 在VS中找不到
    • 添加 C:\\Program Files\\dotnet\\ 转到用户PATH并重新启动Visual Studio。

🗺 路线图

  • upload_project 工具:zip→ 沙盒→ 运行用户基准测试
  • DisassemblyDiagnoser 热路径asm转储工具
  • 发布为 dotnet new 模板或NuGet工具
  • CI挂钩:立柱 compare_runs PR上的增量

📎 鸣谢

建造于 Aliaksandr Marozka — amarozka.dev

📄 许可证

麻省理工学院