Closed EgorBo closed 4 days ago
@EgorBot -windows_aws_intel -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_aws_sapphirelake
BenchmarkDotNet v0.14.0, Windows 10 (10.0.20348.2762)
Intel Xeon Platinum 8488C, 1 CPU, 16 logical and 8 physical cores
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.0089 μs
Method | Mean | Error |
---|---|---|
Test | 2.741 μs | 0.0107 μs |
cc @EgorBo (agent_logs.txt)
@EgorBot -windows_aws_intel -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_aws_sapphirelake
BenchmarkDotNet v0.14.0, Windows 10 (10.0.20348.2762)
Intel Xeon Platinum 8488C, 1 CPU, 16 logical and 8 physical cores
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.0198 μs
Method | Mean | Error |
---|---|---|
Test | 2.790 μs | 0.0212 μs |
cc @EgorBo (agent_logs.txt)
@EgorBot -windows_aws_intel -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_aws_sapphirelake
BenchmarkDotNet v0.14.0, Windows 10 (10.0.20348.2762)
Intel Xeon Platinum 8488C, 1 CPU, 16 logical and 8 physical cores
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.0876 μs
Method | Mean | Error |
---|---|---|
Test | 2.152 μs | 0.0424 μs |
cc @EgorBo (agent_logs.txt)
@EgorBot -windows_intel -linux_intel -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -windows_intel -linux_intel -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
linux_azure_icelake
BenchmarkDotNet v0.14.0, Ubuntu 22.04.5 LTS (Jammy Jellyfish)
Intel Xeon Platinum 8370C CPU 2.80GHz, 1 CPU, 4 logical and 2 physical cores
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.0246 μs
Method | Mean | Error |
---|---|---|
Test | 2.252 μs | 0.0263 μs |
cc @EgorBo (agent_logs.txt)
windows_aws_sapphirelake
BenchmarkDotNet v0.14.0, Windows 10 (10.0.20348.2762)
Intel Xeon Platinum 8488C, 1 CPU, 16 logical and 8 physical cores
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.0688 μs
Method | Mean | Error |
---|---|---|
Test | 2.121 μs | 0.0419 μs |
Uploaded to profiler.firefox.com.NOTE: only the first [Benchmark]
is profiled currently.
cc @EgorBo (agent_logs.txt)
@EgorBot -windows_intel -profiler pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -windows_intel -profiler pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -windows_intel -profiler pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -windows_azure_cobalt100
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_cobalt100
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_cobalt100
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_cobalt100
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_azure_cobalt100
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314)
azure_cobalt100
DefaultJob : .NET 9.0.0 (9.0.24.52809), Arm64 RyuJIT AdvSIMD
StdDev=0.0520 μs
Method | Mean | Error |
---|---|---|
Test | 3.179 μs | 0.0586 μs |
cc @EgorBo (agent_logs.txt)
@EgorBot -win_cobalt100 -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_azure_cobalt100
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314)
azure_cobalt100
DefaultJob : .NET 9.0.0 (9.0.24.52809), Arm64 RyuJIT AdvSIMD
StdDev=0.0671 μs
Method | Mean | Error |
---|---|---|
Test | 3.176 μs | 0.0604 μs |
cc @EgorBo (agent_logs.txt)
@EgorBot -win_cobalt100 -pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_intel
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_azure_cascadelake
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314) (Hyper-V)
azure_cascadelake
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.0338 μs
Method | Mean | Error |
---|---|---|
Test | 2.941 μs | 0.0361 μs |
cc @EgorBo (agent_logs.txt)
@EgorBot -win_intel -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_azure_cascadelake
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314) (Hyper-V)
azure_cascadelake
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.1031 μs
Method | Mean | Error |
---|---|---|
Test | 2.551 μs | 0.0510 μs |
Uploaded to profiler.firefox.com.
NOTE: only the first [Benchmark]
is profiled currently.
cc @EgorBo (agent_logs.txt)
@EgorBot -win_cobalt100 -profiler -pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_intel -profiler -pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_intel -lin_intel -profiler -pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_intel -linux_intel -profiler -pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_azure_cascadelake
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314) (Hyper-V)
azure_cascadelake
Job-LRDKHN : .NET 10.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Job-RGQUYI : .NET 9.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
RatioSD=0.02
Method | Job | Toolchain | Mean | Error | Ratio |
---|---|---|---|---|---|
Test | Job-LRDKHN | \core_root_base\corerun.exe | 2.221 μs | 0.0337 μs | 1.00 |
Test | Job-RGQUYI | \core_root_diff\corerun.exe | 2.158 μs | 0.0426 μs | 0.97 |
Uploaded to profiler.firefox.com.
Uploaded to profiler.firefox.com.
NOTE: only the first [Benchmark]
is profiled currently.
cc @EgorBo (agent_logs.txt)
@EgorBot -win_intel -linux_intel -profiler -pr 106525
using System.Text.Json;
using BenchmarkDotNet.Attributes;
public class Perf_Basic
{
static readonly Employee[] Data = Enumerable.Range(1, 4096)
.Select(i => new Employee("John", "Manager", 30, 185.5, new DateTime(1990, 10, 10),
new Employee("Джон", "Разработчик", 30 + i, 185.5, new DateTime(1990, 10, 10), null))).ToArray();
[Benchmark]
public Employee[]? JsonRoundtrip()
{
var str = JsonSerializer.Serialize(Data);
return JsonSerializer.Deserialize<Employee[]>(str);
}
}
public record Employee(string name, string title, int age, double height, DateTime applyDate, Employee? manager);
@EgorBot -win_intel -linux_intel -profiler -pr 106525
using System.Text.Json;
using BenchmarkDotNet.Attributes;
public class Perf_Basic
{
static readonly Employee[] Data = Enumerable.Range(1, 4096)
.Select(i => new Employee("John", "Manager", 30, 185.5, new DateTime(1990, 10, 10),
new Employee("Джон", "Разработчик", 30 + i, 185.5, new DateTime(1990, 10, 10), null))).ToArray();
[Benchmark]
public Employee[]? JsonRoundtrip()
{
var str = JsonSerializer.Serialize(Data);
return JsonSerializer.Deserialize<Employee[]>(str);
}
}
public record Employee(string name, string title, int age, double height, DateTime applyDate, Employee? manager);
@EgorBot -win_arm64 -pr 106525
using System.Text.Json;
using BenchmarkDotNet.Attributes;
public class Perf_Basic
{
static readonly Employee[] Data = Enumerable.Range(1, 4096)
.Select(i => new Employee("John", "Manager", 30, 185.5, new DateTime(1990, 10, 10),
new Employee("Джон", "Разработчик", 30 + i, 185.5, new DateTime(1990, 10, 10), null))).ToArray();
[Benchmark]
public Employee[]? JsonRoundtrip()
{
var str = JsonSerializer.Serialize(Data);
return JsonSerializer.Deserialize<Employee[]>(str);
}
}
public record Employee(string name, string title, int age, double height, DateTime applyDate, Employee? manager);
@EgorBot -help
@EgorBot -help
Usage: @EgorBot [-%targets%] [other EgorBot args] [raw args for BDN] `C# snippet surrounded with triple ticks`
-%target%: Example: "-arm" or "-intel -arm" or "-windows_x64 -linux_aws_genoa"
NOTE: target can be prefixed with the OS:
-linux_*
-windows_* (x64 only atm)
Full list of targets (idiomatic names):
-azure_ampere
-azure_cobalt100
-azure_milano
-azure_icelake
-aws_sapphirelake
-aws_icelake
-aws_genoa
-aws_milano
-aws_graviton2
-aws_graviton3
-aws_graviton4
-gcp_axion
-gcp_ampere
-gcp_emeraldrapids
-gcp_milano,
-gcp_genoa,
-gcp_cascadeLake,
-hetzner_amd
-hetzner_milano,
-hetzner_ampere,
-hetzner_skylake,
-hetzner_dedicatedmilano,
short aliases:
-arm = -azure_ampere
-intel = -azure_cascadelake
-x64 = -azure_castadelake
-amd = -azure_milano
-profiler: Use 'perf record' to collect a flamegraph/hot asm.
-perf_events Exact events to collect with 'perf', e.g. -perf_events ld_align_lat
(events are target-specific, you can find the list of the supported events in BDN_Artifacts.zip
when you run a benchmark with -profiler arg).
-commit: E.g. '-commit 72ea87f vs 380898a' or just '-commit 72ea87f'
Runs the benchmark on the specified commit(s) (PR is ignored)
-mono: Use Mono runtime instead of CoreCLR for all targets. Should be possible to use
Mono interp too (LLVM is not supported yet).
Mono doesn't support -profiler (at least JIT)
To use mono-interp, use BDN args, e.g. --envvars MONO_ENV_OPTIONS:"--interpreter"
-nonativepgo: Disable native PGO (Build with /p:NoPgoOptimize=true)
-pr %num%: Run for changes in a specific PR. If bot is invoked from a PR - it takes changes
from that PR implicitly.
-codesafety: Run memory safety checks for the PR, unrelated to the benchmarking.
-[args for BDN]: Args directly passed to BDN e.g. '--disasm', see
https://github.com/dotnet/BenchmarkDotNet/blob/master/docs/articles/guides/console-args.md
NOTE: BenchmarkRunner.Run
or BenchmarkSwitcher.From*
can be omitted (snippet without an entrypoint)
Although, if they're presented then Program's args must be be forwarded to Run(args: args)
NOTE: Avoid [DisassemblyDiagnoser]
- it causes crashes on Linux, better use --envvars DOTNET_JitDisasm:MethodName
Usage example: link
cc @EgorBo
linux_azure_cascadelake
BenchmarkDotNet v0.14.0, Ubuntu 24.04.1 LTS (Noble Numbat)
Intel Xeon Platinum 8370C CPU 2.80GHz, 1 CPU, 16 logical and 8 physical cores
Job-EHDZVC : .NET 10.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Job-RTETUT : .NET 9.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Method | Toolchain | Mean | Error | Ratio |
---|---|---|---|---|
JsonRoundtrip | Main | 13.31 ms | 0.067 ms | 1.00 |
JsonRoundtrip | PR | 13.22 ms | 0.079 ms | 0.99 |
Perf_Basic_JsonRoundtrip
:SVG flamegraph: Main vs PR 🔥 Speedscope flamegraph: Main vs PR Hot asm code: Main vs PR HW counters: Main vs PR
cc @EgorBo (agent_logs.txt)
windows_azure_cascadelake
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314) (Hyper-V)
azure_cascadelake
Job-VBASYL : .NET 10.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Job-XORBXL : .NET 9.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
Method | Job | Toolchain | Mean | Error | Ratio |
---|---|---|---|---|---|
JsonRoundtrip | Job-VBASYL | \core_root_base\corerun.exe | 12.35 ms | 0.060 ms | 1.00 |
JsonRoundtrip | Job-XORBXL | \core_root_diff\corerun.exe | 12.26 ms | 0.052 ms | 0.99 |
[Benchmark]
:NOTE: only the first [Benchmark]
is profiled currently. Powered by ultra profiler.
cc @EgorBo (agent_logs.txt)
@EgorBot -win_intel -win_arm -profiler
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_azure_cobalt100
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314)
azure_cobalt100
DefaultJob : .NET 9.0.0 (9.0.24.52809), Arm64 RyuJIT AdvSIMD
StdDev=0.0352 μs
Method | Mean | Error |
---|---|---|
Test | 2.947 μs | 0.0377 μs |
cc @EgorBo (agent_logs.txt)
windows_azure_cascadelake
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314) (Hyper-V)
azure_cascadelake
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
StdDev=0.0449 μs
Method | Mean | Error |
---|---|---|
Test | 2.079 μs | 0.0404 μs |
Uploaded to profiler.firefox.com: link
NOTE: only the first [Benchmark]
is profiled currently.
Powered by ultra profiler.
cc @EgorBo (agent_logs.txt)
@EgorBot -win_arm -pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_azure_ampere -win_azure_cobalt100
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -win_azure_ampere -win_azure_cobalt100
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
windows_azure_cobalt100
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2314)
azure_cobalt100
DefaultJob : .NET 9.0.0 (9.0.24.52809), Arm64 RyuJIT AdvSIMD
StdDev=0.0660 μs
Method | Mean | Error |
---|---|---|
Test | 3.000 μs | 0.0573 μs |
cc @EgorBo (agent_logs.txt)
@EgorBot -win_azure_cobalt100 -pr 106525
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
public class Bench
{
[Benchmark]
public string Test()
{
string str = "";
for (int i = 0; i < 100; i++)
str += i;
return str;
}
}
@EgorBot -windows_aws_intel -profiler