Skip to content

Mesh level plugins - #236

Merged
hovsep merged 3 commits into
mainfrom
mesh_level_plugins
Jul 29, 2026
Merged

Mesh level plugins#236
hovsep merged 3 commits into
mainfrom
mesh_level_plugins

Conversation

@hovsep

@hovsep hovsep commented Jul 29, 2026

Copy link
Copy Markdown
Owner

This pull request refactors the plugin system to unify and document how plugins are registered and initialized for both components and meshes. It introduces a generic plugin.Registry for managing plugins, ensures plugins are initialized in sorted name order, and provides comprehensive documentation and tests. The changes improve consistency, extensibility, and observability of the plugin system.

Plugin system refactor and registry introduction:

  • Replaced the ad-hoc component plugin map with a generic plugin.Registry (component/plugin.go, component/component.go, fmesh.go). This centralizes plugin management and ensures consistent behavior for both component and mesh plugins [1] [2].
  • Plugins are now initialized in sorted name order, making initialization order predictable and observable [1] [2].
  • Duplicate plugin names are now checked by the registry, and a failing plugin initialization fails object construction cleanly [1] [2].

Documentation improvements:

  • Added or updated documentation to explain the unified plugin system, usage patterns, and best practices for both component and mesh plugins (.agent/docs/hooks.md, docs/wiki/502.-Plugins.md, docs/wiki/501.-Hooks.md, docs/wiki/Home.md) [1] [2] [3] [4] [5] [6].
  • Clarified that generics are only used internally for plugin and hook registries, not in the public API (.agent/docs/hooks.md).

Testing enhancements:

  • Added tests to verify plugin registration, uniqueness enforcement, initialization order, and error handling (component/plugin_test.go) [1] [2].

These changes make the plugin system more robust, predictable, and easier to use and extend.

hovsep and others added 3 commits July 29, 2026 21:42
A mesh plugin bundles initialization for a whole mesh, which makes it the
home for cross-cutting concerns that belong to no single component. Since a
mesh is constructed empty and filled by AddComponents afterwards, a plugin
reaches components by registering an OnComponentAdded hook and instrumenting
each one as it arrives -- so it can observe every activation without any
component knowing it exists.

Storage, the duplicate-name check and the sorted init order now live in
internal/plugin.Registry[T], shared by both levels. Component plugins used to
initialize in map order; since plugins register hooks and hooks fire in
registration order, that order was observable and varied between runs of the
same binary. Both levels now sort by name.

Two plugins ship in plugin/:

  - Profiler times runs, cycles and each component's activations. A Go CPU
    profile of a mesh is dominated by the scheduler and barely distinguishes
    one component from another; timing activations directly names the slow
    one. Components activate concurrently and queue on the profiler's mutex,
    so the start is stamped inside the lock and the end before it, keeping
    that queueing out of the measured window.

  - Autowire pipes ports by naming convention, in both directions on every
    arrival, so AddComponents order does not matter. Pipes are not
    deduplicated and a port flushes once per pipe, so it skips a pair that is
    already wired -- two conventions agreeing on one pair would otherwise
    deliver every signal twice.

Docs: .agent/docs/hooks.md covers both levels and the shared registry;
docs/wiki/502.-Plugins.md is the user-facing page, linked from Home and 501.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four components and five connections, with no PipeTo between components: two
Autowire conventions derive the whole graph as components arrive, and the
Profiler measures the result without any component opting in.

The body is added before everything it listens to, so most of its wiring can
only happen on the later arrivals -- the property that makes AddComponents
order irrelevant. The clock's loopback is the one hand-written pipe, because a
loopback is not something a naming convention can express.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
plugin.Prefixed("env_") says nothing about autowiring; at a call site inside
WithPlugins it could be anything. Broadcast and BroadcastAs had the same
problem, so all three are renamed together rather than leaving an inconsistent
family: AutowirePrefixed, AutowireBroadcast, AutowireBroadcastAs.

The PluginName strings ("autowire:prefixed:env_") already said it and are
unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hovsep
hovsep merged commit 2018e6a into main Jul 29, 2026
3 checks passed
@hovsep
hovsep deleted the mesh_level_plugins branch July 29, 2026 19:17
@github-actions

Copy link
Copy Markdown

Benchmark report (advisory)

Statistically significant changes: 29 regression(s), 13 improvement(s) (PR head vs. base branch).

Benchmark Metric Base PR Δ
MeshRunWide/10-4 sec/op 64.17µ ± 2% 63.07µ ± 1% -1.72%
MeshRunWide/100-4 sec/op 367.9µ ± 2% 372.0µ ± 1% +1.10%
MeshRunWide/10000-4 sec/op 46.75m ± 3% 47.90m ± 3% +2.46%
MeshFanIn/10-4 sec/op 80.34µ ± 3% 84.72µ ± 2% +5.45%
MeshFanIn/100-4 sec/op 562.2µ ± 2% 580.7µ ± 1% +3.28%
MeshFanIn/1000-4 sec/op 9.338m ± 1% 10.026m ± 1% +7.36%
MeshFanIn/10000-4 sec/op 489.5m ± 1% 545.7m ± 5% +11.48%
MeshConstructionScale/10-4 sec/op 36.36µ ± 2% 39.29µ ± 1% +8.07%
MeshConstructionScale/100-4 sec/op 347.0µ ± 2% 377.1µ ± 2% +8.67%
MeshConstructionScale/1000-4 sec/op 3.645m ± 2% 4.045m ± 1% +10.96%
MeshConstructionScale/10000-4 sec/op 40.56m ± 3% 43.03m ± 3% +6.09%
MeshRunPipeline-4 sec/op 156.2µ ± 3% 159.1µ ± 2% +1.89%
MeshRunFanOut-4 sec/op 75.63µ ± 2% 79.43µ ± 2% +5.03%
MeshConstruction-4 sec/op 35.49µ ± 2% 40.84µ ± 1% +15.05%
MeshThroughputDummy/small-4 sec/op 12.25m ± 2% 12.80m ± 2% +4.46%
MeshThroughputDummy/mid-4 sec/op 109.6m ± 1% 113.6m ± 1% +3.62%
MeshThroughputDummy/huge-4 sec/op 1.126 ± 2% 1.146 ± 2% +1.83%
MeshThroughputBypass/mid-4 sec/op 242.4m ± 2% 246.9m ± 3% +1.88%
MeshFanIn/100-4 B/op 289.5Ki ± 0% 289.5Ki ± 0% +0.00%
MeshConstructionScale/10-4 B/op 29.07Ki ± 0% 29.89Ki ± 0% +2.82%
MeshConstructionScale/100-4 B/op 283.5Ki ± 0% 290.6Ki ± 0% +2.52%
MeshConstructionScale/1000-4 B/op 2.805Mi ± 0% 2.874Mi ± 0% +2.45%
MeshConstructionScale/10000-4 B/op 27.84Mi ± 0% 28.60Mi ± 0% +2.71%
MeshConstruction-4 B/op 29.07Ki ± 0% 29.89Ki ± 0% +2.82%
MeshConstructionScale/10-4 allocs/op 809.0 ± 0% 854.0 ± 0% +5.56%
MeshConstructionScale/100-4 allocs/op 7.835k ± 0% 8.240k ± 0% +5.17%
MeshConstructionScale/1000-4 allocs/op 78.95k ± 0% 82.95k ± 0% +5.07%
MeshConstructionScale/10000-4 allocs/op 790.0k ± 0% 830.0k ± 0% +5.06%
MeshConstruction-4 allocs/op 809.0 ± 0% 854.0 ± 0% +5.56%
MeshThroughputDummy/small-4 activations/s 820.4k ± 2% 785.4k ± 2% -4.27%
MeshThroughputDummy/mid-4 activations/s 917.0k ± 1% 884.9k ± 1% -3.49%
MeshThroughputDummy/huge-4 activations/s 892.7k ± 2% 876.7k ± 2% -1.79%
MeshThroughputBypass/mid-4 activations/s 414.6k ± 2% 407.0k ± 1% -1.85%
MeshThroughputDummy/small-4 cycles/s 16.41k ± 2% 15.71k ± 2% -4.27%
MeshThroughputDummy/mid-4 cycles/s 1.834k ± 1% 1.770k ± 1% -3.49%
MeshThroughputDummy/huge-4 cycles/s 178.5 ± 2% 175.3 ± 2% -1.76%
MeshThroughputBypass/mid-4 cycles/s 829.2 ± 2% 814.0 ± 1% -1.85%
ComponentHooks_Overhead/WithHooks-4 B/op 147.9Ki ± 3% 165.1Ki ± 10% +11.64%
GroupScalarAggregation-4 sec/op 2.171µ ± 3% 2.119µ ± 5% -2.35%
GroupBuild/10-4 sec/op 3.453µ ± 2% 3.250µ ± 3% -5.88%
GroupBuild/100-4 sec/op 51.64µ ± 1% 49.54µ ± 4% -4.06%
GroupPayloadSize/8-4 sec/op 1.503µ ± 1% 1.458µ ± 3% -3.00%

Higher is worse on every metric. allocs/op is the most reliable signal on shared CI runners; treat sec/op as guidance.

Full benchstat table
goos: linux
goarch: amd64
pkg: github.com/hovsep/fmesh
cpu: INTEL(R) XEON(R) PLATINUM 8573C
                              │  base.txt   │               pr.txt                │
                              │   sec/op    │    sec/op     vs base               │
MeshRunWide/10-4                64.17µ ± 2%    63.07µ ± 1%   -1.72% (p=0.001 n=8)
MeshRunWide/100-4               367.9µ ± 2%    372.0µ ± 1%   +1.10% (p=0.050 n=8)
MeshRunWide/1000-4              4.222m ± 2%    4.243m ± 2%        ~ (p=0.382 n=8)
MeshRunWide/10000-4             46.75m ± 3%    47.90m ± 3%   +2.46% (p=0.050 n=8)
MeshFanIn/10-4                  80.34µ ± 3%    84.72µ ± 2%   +5.45% (p=0.000 n=8)
MeshFanIn/100-4                 562.2µ ± 2%    580.7µ ± 1%   +3.28% (p=0.001 n=8)
MeshFanIn/1000-4                9.338m ± 1%   10.026m ± 1%   +7.36% (p=0.000 n=8)
MeshFanIn/10000-4               489.5m ± 1%    545.7m ± 5%  +11.48% (p=0.000 n=8)
MeshConstructionScale/10-4      36.36µ ± 2%    39.29µ ± 1%   +8.07% (p=0.000 n=8)
MeshConstructionScale/100-4     347.0µ ± 2%    377.1µ ± 2%   +8.67% (p=0.000 n=8)
MeshConstructionScale/1000-4    3.645m ± 2%    4.045m ± 1%  +10.96% (p=0.000 n=8)
MeshConstructionScale/10000-4   40.56m ± 3%    43.03m ± 3%   +6.09% (p=0.000 n=8)
MeshRunPipeline-4               156.2µ ± 3%    159.1µ ± 2%   +1.89% (p=0.038 n=8)
MeshRunFanOut-4                 75.63µ ± 2%    79.43µ ± 2%   +5.03% (p=0.000 n=8)
MeshConstruction-4              35.49µ ± 2%    40.84µ ± 1%  +15.05% (p=0.000 n=8)
MeshThroughputDummy/small-4     12.25m ± 2%    12.80m ± 2%   +4.46% (p=0.000 n=8)
MeshThroughputDummy/mid-4       109.6m ± 1%    113.6m ± 1%   +3.62% (p=0.000 n=8)
MeshThroughputDummy/huge-4       1.126 ± 2%     1.146 ± 2%   +1.83% (p=0.028 n=8)
MeshThroughputBypass/small-4    27.59m ± 1%    28.04m ± 2%        ~ (p=0.083 n=8)
MeshThroughputBypass/mid-4      242.4m ± 2%    246.9m ± 3%   +1.88% (p=0.050 n=8)
MeshThroughputBypass/huge-4      2.842 ± 1%     2.841 ± 1%        ~ (p=0.878 n=8)
geomean                         4.315m         4.515m        +4.64%

                              │   base.txt    │                pr.txt                 │
                              │     B/op      │     B/op       vs base                │
MeshRunWide/10-4                 16.11Ki ± 0%    16.11Ki ± 0%       ~ (p=1.000 n=8)
MeshRunWide/100-4                152.5Ki ± 0%    152.5Ki ± 0%       ~ (p=0.933 n=8)
MeshRunWide/1000-4               1.503Mi ± 0%    1.503Mi ± 0%       ~ (p=0.959 n=8)
MeshRunWide/10000-4              15.45Mi ± 0%    15.44Mi ± 0%       ~ (p=0.878 n=8)
MeshFanIn/10-4                   23.41Ki ± 0%    23.41Ki ± 0%       ~ (p=1.000 n=8) ¹
MeshFanIn/100-4                  289.5Ki ± 0%    289.5Ki ± 0%  +0.00% (p=0.025 n=8)
MeshFanIn/1000-4                 10.18Mi ± 0%    10.18Mi ± 0%       ~ (p=0.959 n=8)
MeshFanIn/10000-4                838.2Mi ± 0%    838.2Mi ± 0%       ~ (p=0.161 n=8)
MeshConstructionScale/10-4       29.07Ki ± 0%    29.89Ki ± 0%  +2.82% (p=0.000 n=8)
MeshConstructionScale/100-4      283.5Ki ± 0%    290.6Ki ± 0%  +2.52% (p=0.000 n=8)
MeshConstructionScale/1000-4     2.805Mi ± 0%    2.874Mi ± 0%  +2.45% (p=0.000 n=8)
MeshConstructionScale/10000-4    27.84Mi ± 0%    28.60Mi ± 0%  +2.71% (p=0.000 n=8)
MeshRunPipeline-4                35.57Ki ± 0%    35.57Ki ± 0%       ~ (p=1.000 n=8) ¹
MeshRunFanOut-4                  18.11Ki ± 0%    18.11Ki ± 0%       ~ (p=1.000 n=8) ¹
MeshConstruction-4               29.07Ki ± 0%    29.89Ki ± 0%  +2.82% (p=0.000 n=8)
MeshThroughputDummy/small-4      2.779Mi ± 0%    2.779Mi ± 0%       ~ (p=0.053 n=8)
MeshThroughputDummy/mid-4        30.50Mi ± 0%    30.50Mi ± 0%       ~ (p=0.234 n=8)
MeshThroughputDummy/huge-4       293.9Mi ± 0%    294.1Mi ± 0%       ~ (p=0.328 n=8)
MeshThroughputBypass/small-4     9.968Mi ± 0%    9.968Mi ± 0%       ~ (p=0.645 n=8)
MeshThroughputBypass/mid-4       102.4Mi ± 0%    102.4Mi ± 0%       ~ (p=0.574 n=8)
MeshThroughputBypass/huge-4     1013.2Mi ± 0%   1013.0Mi ± 0%       ~ (p=0.442 n=8)
geomean                          1.913Mi         1.925Mi       +0.63%
¹ all samples are equal

                              │  base.txt   │               pr.txt                │
                              │  allocs/op  │  allocs/op   vs base                │
MeshRunWide/10-4                 530.0 ± 0%    530.0 ± 0%       ~ (p=1.000 n=8) ¹
MeshRunWide/100-4               4.862k ± 0%   4.862k ± 0%       ~ (p=1.000 n=8) ¹
MeshRunWide/1000-4              48.98k ± 0%   48.98k ± 0%       ~ (p=0.925 n=8)
MeshRunWide/10000-4             490.3k ± 0%   490.2k ± 0%       ~ (p=0.900 n=8)
MeshFanIn/10-4                   744.0 ± 0%    744.0 ± 0%       ~ (p=1.000 n=8) ¹
MeshFanIn/100-4                 6.699k ± 0%   6.699k ± 0%       ~ (p=1.000 n=8) ¹
MeshFanIn/1000-4                67.03k ± 0%   67.03k ± 0%       ~ (p=0.939 n=8)
MeshFanIn/10000-4               670.1k ± 0%   670.1k ± 0%       ~ (p=0.161 n=8)
MeshConstructionScale/10-4       809.0 ± 0%    854.0 ± 0%  +5.56% (p=0.000 n=8)
MeshConstructionScale/100-4     7.835k ± 0%   8.240k ± 0%  +5.17% (p=0.000 n=8)
MeshConstructionScale/1000-4    78.95k ± 0%   82.95k ± 0%  +5.07% (p=0.000 n=8)
MeshConstructionScale/10000-4   790.0k ± 0%   830.0k ± 0%  +5.06% (p=0.000 n=8)
MeshRunPipeline-4                980.0 ± 0%    980.0 ± 0%       ~ (p=1.000 n=8) ¹
MeshRunFanOut-4                  572.0 ± 0%    572.0 ± 0%       ~ (p=1.000 n=8) ¹
MeshConstruction-4               809.0 ± 0%    854.0 ± 0%  +5.56% (p=0.000 n=8)
MeshThroughputDummy/small-4     67.16k ± 0%   67.16k ± 0%       ~ (p=0.061 n=8)
MeshThroughputDummy/mid-4       621.6k ± 0%   621.6k ± 0%       ~ (p=0.234 n=8)
MeshThroughputDummy/huge-4      6.153M ± 0%   6.154M ± 0%       ~ (p=0.328 n=8)
MeshThroughputBypass/small-4    337.8k ± 0%   337.8k ± 0%       ~ (p=0.653 n=8)
MeshThroughputBypass/mid-4      3.328M ± 0%   3.328M ± 0%       ~ (p=0.555 n=8)
MeshThroughputBypass/huge-4     33.22M ± 0%   33.22M ± 0%       ~ (p=0.442 n=8)
geomean                         43.35k        43.89k       +1.23%
¹ all samples are equal

                             │   base.txt    │               pr.txt                │
                             │ activations/s │ activations/s  vs base              │
MeshThroughputDummy/small-4      820.4k ± 2%     785.4k ± 2%  -4.27% (p=0.000 n=8)
MeshThroughputDummy/mid-4        917.0k ± 1%     884.9k ± 1%  -3.49% (p=0.000 n=8)
MeshThroughputDummy/huge-4       892.7k ± 2%     876.7k ± 2%  -1.79% (p=0.028 n=8)
MeshThroughputBypass/small-4     364.2k ± 1%     358.4k ± 2%       ~ (p=0.083 n=8)
MeshThroughputBypass/mid-4       414.6k ± 2%     407.0k ± 1%  -1.85% (p=0.050 n=8)
MeshThroughputBypass/huge-4      353.6k ± 1%     353.7k ± 2%       ~ (p=0.878 n=8)
geomean                          574.3k          561.8k       -2.17%

                             │  base.txt   │              pr.txt               │
                             │  cycles/s   │  cycles/s    vs base              │
MeshThroughputDummy/small-4    16.41k ± 2%   15.71k ± 2%  -4.27% (p=0.000 n=8)
MeshThroughputDummy/mid-4      1.834k ± 1%   1.770k ± 1%  -3.49% (p=0.000 n=8)
MeshThroughputDummy/huge-4      178.5 ± 2%    175.3 ± 2%  -1.76% (p=0.026 n=8)
MeshThroughputBypass/small-4   7.285k ± 1%   7.168k ± 2%       ~ (p=0.083 n=8)
MeshThroughputBypass/mid-4      829.2 ± 2%    814.0 ± 1%  -1.85% (p=0.050 n=8)
MeshThroughputBypass/huge-4     70.72 ± 1%    70.74 ± 2%       ~ (p=0.820 n=8)
geomean                        1.149k        1.124k       -2.17%

pkg: github.com/hovsep/fmesh/integration_tests/component_hooks
                                       │  base.txt   │              pr.txt               │
                                       │   sec/op    │   sec/op     vs base              │
ComponentHooks_Overhead/WithoutHooks-4   115.7µ ± 3%   119.8µ ± 5%       ~ (p=0.105 n=8)
ComponentHooks_Overhead/WithHooks-4      116.9µ ± 3%   119.6µ ± 7%       ~ (p=0.279 n=8)
geomean                                  116.3µ        119.7µ       +2.91%

                                       │   base.txt   │                pr.txt                │
                                       │     B/op     │     B/op       vs base               │
ComponentHooks_Overhead/WithoutHooks-4   151.8Ki ± 5%   149.7Ki ±  5%        ~ (p=0.721 n=8)
ComponentHooks_Overhead/WithHooks-4      147.9Ki ± 3%   165.1Ki ± 10%  +11.64% (p=0.002 n=8)
geomean                                  149.8Ki        157.2Ki         +4.93%

                                       │  base.txt  │               pr.txt               │
                                       │ allocs/op  │ allocs/op   vs base                │
ComponentHooks_Overhead/WithoutHooks-4   18.00 ± 0%   18.00 ± 0%       ~ (p=1.000 n=8) ¹
ComponentHooks_Overhead/WithHooks-4      18.00 ± 0%   18.00 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                  18.00        18.00       +0.00%
¹ all samples are equal

pkg: github.com/hovsep/fmesh/signal
                           │  base.txt   │              pr.txt               │
                           │   sec/op    │   sec/op     vs base              │
GroupCoWOps-4                87.81µ ± 3%   86.58µ ± 2%       ~ (p=0.130 n=8)
GroupScalarAggregation-4     2.171µ ± 3%   2.119µ ± 5%  -2.35% (p=0.050 n=8)
GroupBuild/10-4              3.453µ ± 2%   3.250µ ± 3%  -5.88% (p=0.000 n=8)
GroupBuild/100-4             51.64µ ± 1%   49.54µ ± 4%  -4.06% (p=0.000 n=8)
GroupBuild/1000-4            2.402m ± 4%   2.411m ± 3%       ~ (p=0.959 n=8)
GroupBuild/10000-4           550.4m ± 2%   546.9m ± 1%       ~ (p=0.574 n=8)
GroupPayloadSize/8-4         1.503µ ± 1%   1.458µ ± 3%  -3.00% (p=0.010 n=8)
GroupPayloadSize/1024-4      1.487µ ± 2%   1.468µ ± 3%       ~ (p=0.083 n=8)
GroupPayloadSize/65536-4     1.470µ ± 2%   1.476µ ± 3%       ~ (p=0.897 n=8)
GroupPayloadSize/1048576-4   1.580µ ± 2%   1.570µ ± 1%       ~ (p=0.459 n=8)
geomean                      27.33µ        26.83µ       -1.86%

                           │    base.txt    │                pr.txt                │
                           │      B/op      │     B/op      vs base                │
GroupCoWOps-4                137.1Ki ± 0%     137.1Ki ± 0%       ~ (p=1.000 n=8)
GroupScalarAggregation-4       0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=8) ¹
GroupBuild/10-4              4.266Ki ± 0%     4.266Ki ± 0%       ~ (p=1.000 n=8) ¹
GroupBuild/100-4             116.0Ki ± 0%     116.0Ki ± 0%       ~ (p=1.000 n=8) ¹
GroupBuild/1000-4            8.493Mi ± 0%     8.493Mi ± 0%       ~ (p=0.619 n=8)
GroupBuild/10000-4           820.7Mi ± 0%     820.7Mi ± 0%       ~ (p=0.959 n=8)
GroupPayloadSize/8-4         2.422Ki ± 0%     2.422Ki ± 0%       ~ (p=1.000 n=8) ¹
GroupPayloadSize/1024-4      2.422Ki ± 0%     2.422Ki ± 0%       ~ (p=1.000 n=8) ¹
GroupPayloadSize/65536-4     2.422Ki ± 0%     2.422Ki ± 0%       ~ (p=1.000 n=8) ¹
GroupPayloadSize/1048576-4   2.422Ki ± 0%     2.422Ki ± 0%       ~ (p=1.000 n=8) ¹
geomean                                   ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                           │   base.txt    │               pr.txt                │
                           │   allocs/op   │  allocs/op   vs base                │
GroupCoWOps-4                1.635k ± 0%     1.635k ± 0%       ~ (p=1.000 n=8) ¹
GroupScalarAggregation-4      0.000 ± 0%      0.000 ± 0%       ~ (p=1.000 n=8) ¹
GroupBuild/10-4               131.0 ± 0%      131.0 ± 0%       ~ (p=1.000 n=8) ¹
GroupBuild/100-4             1.301k ± 0%     1.301k ± 0%       ~ (p=1.000 n=8) ¹
GroupBuild/1000-4            13.74k ± 0%     13.74k ± 0%       ~ (p=1.000 n=8) ¹
GroupBuild/10000-4           139.8k ± 0%     139.8k ± 0%       ~ (p=0.936 n=8)
GroupPayloadSize/8-4          31.00 ± 0%      31.00 ± 0%       ~ (p=1.000 n=8) ¹
GroupPayloadSize/1024-4       31.00 ± 0%      31.00 ± 0%       ~ (p=1.000 n=8) ¹
GroupPayloadSize/65536-4      31.00 ± 0%      31.00 ± 0%       ~ (p=1.000 n=8) ¹
GroupPayloadSize/1048576-4    31.00 ± 0%      31.00 ± 0%       ~ (p=1.000 n=8) ¹
geomean                                  ²                +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant