-
Notifications
You must be signed in to change notification settings - Fork 0
MonoModBenchmark
All of these methods have 7 int parameters.
Inlining is not marked as NoInlining, the rests are marked as NoInlining.
Hook0 is hooked by a hook that don't call orig.
CORRECTION: it doesn't even accept orig. MonoMod has optimization for this case.
CORRECTION: the said optimization does not exist. and, even if it exists, as the hook method is not static, it would failed.
ILHook is ilhooked.
Hooked is hooked previously. It's not hooked when benchmarking.
BenchmarkDotNet v0.14.0, Ubuntu 24.04.2 LTS (Noble Numbat)
AMD EPYC 7763, 1 CPU, 2 logical cores and 1 physical core
.NET SDK 9.0.200
[Host] : .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2
| Method | Mean | Error | StdDev |
|---|---|---|---|
| Inlining | 0.0000 ns | 0.0000 ns | 0.0000 ns |
| NoInlining | 1.5588 ns | 0.0048 ns | 0.0037 ns |
| Hook0 | 32.0430 ns | 0.0341 ns | 0.0285 ns |
| ILHook | 21.0069 ns | 0.0268 ns | 0.0238 ns |
| Hooked | 1.5553 ns | 0.0053 ns | 0.0044 ns |
// * Detailed results *
MonoModBenchmark.Inlining: DefaultJob
Runtime = .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2; GC = Concurrent Workstation
Mean = 0.000 ns, StdErr = 0.000 ns (NaN%), N = 15, StdDev = 0.000 ns
Min = 0.000 ns, Q1 = 0.000 ns, Median = 0.000 ns, Q3 = 0.000 ns, Max = 0.000 ns
IQR = 0.000 ns, LowerFence = 0.000 ns, UpperFence = 0.000 ns
ConfidenceInterval = [0.000 ns; 0.000 ns] (CI 99.9%), Margin = 0.000 ns (NaN% of Mean)
Skewness = NaN, Kurtosis = NaN, MValue = 2
-------------------- Histogram --------------------
[-0.500 ns ; 0.500 ns) | @@@@@@@@@@@@@@@
MonoModBenchmark.NoInlining: DefaultJob
Runtime = .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2; GC = Concurrent Workstation
Mean = 1.559 ns, StdErr = 0.001 ns (0.07%), N = 12, StdDev = 0.004 ns
Min = 1.552 ns, Q1 = 1.557 ns, Median = 1.559 ns, Q3 = 1.561 ns, Max = 1.564 ns
IQR = 0.004 ns, LowerFence = 1.551 ns, UpperFence = 1.568 ns
ConfidenceInterval = [1.554 ns; 1.564 ns] (CI 99.9%), Margin = 0.005 ns (0.31% of Mean)
Skewness = -0.34, Kurtosis = 1.88, MValue = 2
-------------------- Histogram --------------------
[1.550 ns ; 1.566 ns) | @@@@@@@@@@@@
MonoModBenchmark.Hook0: DefaultJob
Runtime = .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2; GC = Concurrent Workstation
Mean = 32.043 ns, StdErr = 0.008 ns (0.02%), N = 13, StdDev = 0.028 ns
Min = 31.996 ns, Q1 = 32.026 ns, Median = 32.040 ns, Q3 = 32.054 ns, Max = 32.102 ns
IQR = 0.028 ns, LowerFence = 31.985 ns, UpperFence = 32.096 ns
ConfidenceInterval = [32.009 ns; 32.077 ns] (CI 99.9%), Margin = 0.034 ns (0.11% of Mean)
Skewness = 0.44, Kurtosis = 2.45, MValue = 2
-------------------- Histogram --------------------
[31.980 ns ; 32.118 ns) | @@@@@@@@@@@@@
MonoModBenchmark.ILHook: DefaultJob
Runtime = .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2; GC = Concurrent Workstation
Mean = 21.007 ns, StdErr = 0.006 ns (0.03%), N = 14, StdDev = 0.024 ns
Min = 20.974 ns, Q1 = 20.988 ns, Median = 21.003 ns, Q3 = 21.023 ns, Max = 21.048 ns
IQR = 0.035 ns, LowerFence = 20.935 ns, UpperFence = 21.076 ns
ConfidenceInterval = [20.980 ns; 21.034 ns] (CI 99.9%), Margin = 0.027 ns (0.13% of Mean)
Skewness = 0.28, Kurtosis = 1.74, MValue = 2
-------------------- Histogram --------------------
[20.961 ns ; 21.061 ns) | @@@@@@@@@@@@@@
MonoModBenchmark.Hooked: DefaultJob
Runtime = .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2; GC = Concurrent Workstation
Mean = 1.555 ns, StdErr = 0.001 ns (0.08%), N = 13, StdDev = 0.004 ns
Min = 1.546 ns, Q1 = 1.554 ns, Median = 1.556 ns, Q3 = 1.557 ns, Max = 1.562 ns
IQR = 0.003 ns, LowerFence = 1.550 ns, UpperFence = 1.562 ns
ConfidenceInterval = [1.550 ns; 1.561 ns] (CI 99.9%), Margin = 0.005 ns (0.34% of Mean)
Skewness = -0.3, Kurtosis = 2.69, MValue = 2
-------------------- Histogram --------------------
[1.544 ns ; 1.565 ns) | @@@@@@@@@@@@@
// * Summary *
BenchmarkDotNet v0.14.0, Ubuntu 24.04.2 LTS (Noble Numbat)
AMD EPYC 7763, 1 CPU, 2 logical cores and 1 physical core
.NET SDK 9.0.200
[Host] : .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.2 (9.0.225.6610), X64 RyuJIT AVX2
| Method | Mean | Error | StdDev |
|----------- |-----------:|----------:|----------:|
| Inlining | 0.0000 ns | 0.0000 ns | 0.0000 ns |
| NoInlining | 1.5588 ns | 0.0048 ns | 0.0037 ns |
| Hook0 | 32.0430 ns | 0.0341 ns | 0.0285 ns |
| ILHook | 21.0069 ns | 0.0268 ns | 0.0238 ns |
| Hooked | 1.5553 ns | 0.0053 ns | 0.0044 ns |
// * Warnings *
ZeroMeasurement
MonoModBenchmark.Inlining: Default -> The method duration is indistinguishable from the empty method duration
// * Hints *
Outliers
MonoModBenchmark.NoInlining: Default -> 3 outliers were removed (3.26 ns..3.40 ns)
MonoModBenchmark.Hook0: Default -> 2 outliers were removed (34.29 ns, 34.65 ns)
MonoModBenchmark.ILHook: Default -> 1 outlier was removed (22.99 ns)
MonoModBenchmark.Hooked: Default -> 2 outliers were removed, 3 outliers were detected (3.23 ns, 3.25 ns, 3.38 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
1 ns : 1 Nanosecond (0.000000001 sec)