Skip to content

MonoModBenchmark

wuke32767 edited this page Feb 9, 2026 · 13 revisions

ba6e98a31156c55a15e07b74fbced8d0b5ea0222

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 is 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)

Clone this wiki locally