NAME
Bencher::Scenario::Accessors::ClassStartup - Benchmark startup of classes using various accessor generators
VERSION
This document describes version 0.151 of Bencher::Scenario::Accessors::ClassStartup (from Perl distribution Bencher-ScenarioBundle-Accessors), released on 2024-05-06.
SYNOPSIS
To run benchmark with default option:
% bencher -m Accessors::ClassStartup
For more options (dump scenario, list/include/exclude/add participants, list/include/exclude/add datasets, etc), see bencher or run bencher --help
.
DESCRIPTION
Packaging a benchmark script as a Bencher scenario makes it convenient to include/exclude/add participants/datasets (either via CLI or Perl code), send the result to a central repository, among others . See Bencher and bencher (CLI) for more details.
BENCHMARKED MODULES
Version numbers shown below are the versions used when running the sample benchmark.
Class::Accessor 0.51
Class::Accessor::Array 0.032
Class::Accessor::PackedString 0.001
Class::Accessor::PackedString::Set 0.001
Class::InsideOut 1.14
Class::Struct 0.68
Class::Tiny 1.008
Class::XSAccessor 1.19
Mo 0.40
Mojo::Base::XS 0.07
Moo 2.005005
Moops 0.038
Moos 0.30
Moose 2.2206
Mouse v2.5.10
Object::Pad 0.806
Object::Simple 3.19
Object::Tiny 1.09
Object::Tiny::RW 1.07
Object::Tiny::RW::XS 0.04
Object::Tiny::XS 1.01
Perl::Examples::Accessors::Array 0.132
Perl::Examples::Accessors::ClassAccessor 0.132
Perl::Examples::Accessors::ClassAccessorArray 0.132
Perl::Examples::Accessors::ClassAccessorPackedString 0.132
Perl::Examples::Accessors::ClassAccessorPackedStringSet 0.132
Perl::Examples::Accessors::ClassInsideOut 0.132
Perl::Examples::Accessors::ClassStruct 0.132
Perl::Examples::Accessors::ClassTiny 0.132
Perl::Examples::Accessors::ClassXSAccessor 0.132
Perl::Examples::Accessors::ClassXSAccessorArray 0.132
Perl::Examples::Accessors::Hash 0.132
Perl::Examples::Accessors::Mo 0.132
Perl::Examples::Accessors::MojoBase 0.132
Perl::Examples::Accessors::MojoBaseXS 0.132
Perl::Examples::Accessors::Moo 0.132
Perl::Examples::Accessors::Moops 0.132
Perl::Examples::Accessors::Moos 0.132
Perl::Examples::Accessors::Moose 0.132
Perl::Examples::Accessors::Mouse 0.132
Perl::Examples::Accessors::ObjectPad 0.132
Perl::Examples::Accessors::ObjectSimple 0.132
Perl::Examples::Accessors::ObjectTiny 0.132
Perl::Examples::Accessors::ObjectTinyRW 0.132
Perl::Examples::Accessors::ObjectTinyRWXS 0.132
Perl::Examples::Accessors::ObjectTinyXS 0.132
Perl::Examples::Accessors::Scalar 0.132
Perl::Examples::Accessors::SimpleAccessor 0.132
Simple::Accessor 1.13
BENCHMARK PARTICIPANTS
Perl::Examples::Accessors::ClassTiny (perl_code)
Perl::Examples::Accessors::ClassAccessorArray (perl_code)
Perl::Examples::Accessors::Scalar (perl_code)
Perl::Examples::Accessors::MojoBase (perl_code)
Perl::Examples::Accessors::ObjectTinyRWXS (perl_code)
Perl::Examples::Accessors::ClassXSAccessor (perl_code)
Perl::Examples::Accessors::Moops (perl_code)
Perl::Examples::Accessors::ClassInsideOut (perl_code)
Perl::Examples::Accessors::Moos (perl_code)
Perl::Examples::Accessors::Hash (perl_code)
Perl::Examples::Accessors::ClassAccessorPackedString (perl_code)
Perl::Examples::Accessors::ObjectTinyRW (perl_code)
Perl::Examples::Accessors::SimpleAccessor (perl_code)
Perl::Examples::Accessors::ObjectTinyXS (perl_code)
Perl::Examples::Accessors::ObjectSimple (perl_code)
Perl::Examples::Accessors::Mouse (perl_code)
Perl::Examples::Accessors::MojoBaseXS (perl_code)
Perl::Examples::Accessors::ClassStruct (perl_code)
Perl::Examples::Accessors::Array (perl_code)
Perl::Examples::Accessors::ClassAccessor (perl_code)
Perl::Examples::Accessors::Moo (perl_code)
Perl::Examples::Accessors::ClassAccessorPackedStringSet (perl_code)
Perl::Examples::Accessors::ClassXSAccessorArray (perl_code)
Perl::Examples::Accessors::Moose (perl_code)
Perl::Examples::Accessors::Mo (perl_code)
Perl::Examples::Accessors::ObjectTiny (perl_code)
Perl::Examples::Accessors::ObjectPad (perl_code)
BENCHMARK SAMPLE RESULTS
Sample benchmark #1
Run on: perl: v5.38.2, CPU: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz (2 cores), OS: GNU/Linux Ubuntu version 20.04, OS kernel: Linux version 5.4.0-164-generic.
Benchmark command (default options):
% bencher -m Accessors::ClassStartup
Result formatted as table:
#table1#
+---------------------------------------------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+
| participant | time (ms) | mod_overhead_time | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples |
+---------------------------------------------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+
| Perl::Examples::Accessors::Moops | 190 | 183.22 | 0.00% | 2630.85% | 0.00019 | 20 |
| Perl::Examples::Accessors::Moose | 140 | 133.22 | 32.49% | 1961.14% | 9.8e-05 | 20 |
| Perl::Examples::Accessors::MojoBase | 113 | 106.22 | 63.34% | 1571.86% | 5.4e-05 | 20 |
| Perl::Examples::Accessors::Moo | 27 | 20.22 | 594.64% | 293.13% | 3.1e-05 | 20 |
| Perl::Examples::Accessors::Mouse | 26.3 | 19.52 | 604.02% | 287.90% | 9.7e-06 | 21 |
| Perl::Examples::Accessors::ObjectPad | 19.8 | 13.02 | 836.44% | 191.62% | 1.2e-05 | 20 |
| Perl::Examples::Accessors::Moos | 19.5 | 12.72 | 847.95% | 188.08% | 1.6e-05 | 20 |
| Perl::Examples::Accessors::ClassInsideOut | 17.6 | 10.82 | 954.08% | 159.07% | 1.4e-05 | 22 |
| Perl::Examples::Accessors::ClassStruct | 14.7 | 7.92 | 1163.69% | 116.10% | 1.2e-05 | 20 |
| Perl::Examples::Accessors::ClassXSAccessor | 14 | 7.22 | 1193.45% | 111.13% | 5.7e-05 | 20 |
| Perl::Examples::Accessors::ObjectSimple | 14.2 | 7.42 | 1199.96% | 110.07% | 1.3e-05 | 20 |
| Perl::Examples::Accessors::ClassXSAccessorArray | 14.2 | 7.42 | 1200.15% | 110.04% | 1.2e-05 | 20 |
| Perl::Examples::Accessors::ClassTiny | 14.2 | 7.42 | 1206.46% | 109.03% | 1.1e-05 | 20 |
| Perl::Examples::Accessors::ObjectTinyXS | 14.1 | 7.32 | 1210.62% | 108.36% | 1.2e-05 | 20 |
| Perl::Examples::Accessors::ObjectTinyRWXS | 14.1 | 7.32 | 1211.54% | 108.22% | 1.2e-05 | 20 |
| Perl::Examples::Accessors::ClassAccessor | 14 | 7.22 | 1219.06% | 107.03% | 1.9e-05 | 24 |
| Perl::Examples::Accessors::MojoBaseXS | 11 | 4.22 | 1618.77% | 58.88% | 1.2e-05 | 20 |
| Perl::Examples::Accessors::SimpleAccessor | 9.63 | 2.85 | 1824.14% | 41.93% | 7.8e-06 | 20 |
| Perl::Examples::Accessors::ClassAccessorPackedString | 9.3 | 2.52 | 1883.66% | 37.67% | 1.4e-05 | 20 |
| Perl::Examples::Accessors::Mo | 9.1 | 2.32 | 1934.31% | 34.24% | 9.4e-06 | 20 |
| Perl::Examples::Accessors::ObjectTinyRW | 7.63 | 0.85 | 2327.99% | 12.47% | 5.5e-06 | 20 |
| Perl::Examples::Accessors::ObjectTiny | 7.57 | 0.79 | 2346.32% | 11.63% | 3.4e-06 | 20 |
| Perl::Examples::Accessors::ClassAccessorPackedStringSet | 7.5 | 0.72 | 2374.96% | 10.34% | 7.8e-06 | 20 |
| Perl::Examples::Accessors::ClassAccessorArray | 7.3 | 0.52 | 2423.40% | 8.22% | 1.1e-05 | 20 |
| Perl::Examples::Accessors::Hash | 7 | 0.22 | 2539.45% | 3.46% | 1.4e-05 | 20 |
| Perl::Examples::Accessors::Array | 6.98 | 0.2 | 2554.45% | 2.88% | 5.1e-06 | 20 |
| Perl::Examples::Accessors::Scalar | 6.91 | 0.13 | 2581.65% | 1.83% | 4.2e-06 | 20 |
| perl -e1 (baseline) | 6.78 | 0 | 2630.85% | 0.00% | 4.9e-06 | 20 |
+---------------------------------------------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+
The above result formatted in Benchmark.pm style:
Rate Perl::Examples::Accessors::Moops Perl::Examples::Accessors::Moose Perl::Examples::Accessors::MojoBase Perl::Examples::Accessors::Moo Perl::Examples::Accessors::Mouse Perl::Examples::Accessors::ObjectPad Perl::Examples::Accessors::Moos Perl::Examples::Accessors::ClassInsideOut Perl::Examples::Accessors::ClassStruct Perl::Examples::Accessors::ObjectSimple Perl::Examples::Accessors::ClassXSAccessorArray Perl::Examples::Accessors::ClassTiny Perl::Examples::Accessors::ObjectTinyXS Perl::Examples::Accessors::ObjectTinyRWXS Perl::Examples::Accessors::ClassXSAccessor Perl::Examples::Accessors::ClassAccessor Perl::Examples::Accessors::MojoBaseXS Perl::Examples::Accessors::SimpleAccessor Perl::Examples::Accessors::ClassAccessorPackedString Perl::Examples::Accessors::Mo Perl::Examples::Accessors::ObjectTinyRW Perl::Examples::Accessors::ObjectTiny Perl::Examples::Accessors::ClassAccessorPackedStringSet Perl::Examples::Accessors::ClassAccessorArray Perl::Examples::Accessors::Hash Perl::Examples::Accessors::Array Perl::Examples::Accessors::Scalar perl -e1 (baseline)
Perl::Examples::Accessors::Moops 5.3/s -- -26% -40% -85% -86% -89% -89% -90% -92% -92% -92% -92% -92% -92% -92% -92% -94% -94% -95% -95% -95% -96% -96% -96% -96% -96% -96% -96%
Perl::Examples::Accessors::Moose 7.1/s 35% -- -19% -80% -81% -85% -86% -87% -89% -89% -89% -89% -89% -89% -90% -90% -92% -93% -93% -93% -94% -94% -94% -94% -95% -95% -95% -95%
Perl::Examples::Accessors::MojoBase 8.8/s 68% 23% -- -76% -76% -82% -82% -84% -86% -87% -87% -87% -87% -87% -87% -87% -90% -91% -91% -91% -93% -93% -93% -93% -93% -93% -93% -94%
Perl::Examples::Accessors::Moo 37.0/s 603% 418% 318% -- -2% -26% -27% -34% -45% -47% -47% -47% -47% -47% -48% -48% -59% -64% -65% -66% -71% -71% -72% -72% -74% -74% -74% -74%
Perl::Examples::Accessors::Mouse 38.0/s 622% 432% 329% 2% -- -24% -25% -33% -44% -46% -46% -46% -46% -46% -46% -46% -58% -63% -64% -65% -70% -71% -71% -72% -73% -73% -73% -74%
Perl::Examples::Accessors::ObjectPad 50.5/s 859% 607% 470% 36% 32% -- -1% -11% -25% -28% -28% -28% -28% -28% -29% -29% -44% -51% -53% -54% -61% -61% -62% -63% -64% -64% -65% -65%
Perl::Examples::Accessors::Moos 51.3/s 874% 617% 479% 38% 34% 1% -- -9% -24% -27% -27% -27% -27% -27% -28% -28% -43% -50% -52% -53% -60% -61% -61% -62% -64% -64% -64% -65%
Perl::Examples::Accessors::ClassInsideOut 56.8/s 979% 695% 542% 53% 49% 12% 10% -- -16% -19% -19% -19% -19% -19% -20% -20% -37% -45% -47% -48% -56% -56% -57% -58% -60% -60% -60% -61%
Perl::Examples::Accessors::ClassStruct 68.0/s 1192% 852% 668% 83% 78% 34% 32% 19% -- -3% -3% -3% -4% -4% -4% -4% -25% -34% -36% -38% -48% -48% -48% -50% -52% -52% -52% -53%
Perl::Examples::Accessors::ObjectSimple 70.4/s 1238% 885% 695% 90% 85% 39% 37% 23% 3% -- 0% 0% 0% 0% -1% -1% -22% -32% -34% -35% -46% -46% -47% -48% -50% -50% -51% -52%
Perl::Examples::Accessors::ClassXSAccessorArray 70.4/s 1238% 885% 695% 90% 85% 39% 37% 23% 3% 0% -- 0% 0% 0% -1% -1% -22% -32% -34% -35% -46% -46% -47% -48% -50% -50% -51% -52%
Perl::Examples::Accessors::ClassTiny 70.4/s 1238% 885% 695% 90% 85% 39% 37% 23% 3% 0% 0% -- 0% 0% -1% -1% -22% -32% -34% -35% -46% -46% -47% -48% -50% -50% -51% -52%
Perl::Examples::Accessors::ObjectTinyXS 70.9/s 1247% 892% 701% 91% 86% 40% 38% 24% 4% 0% 0% 0% -- 0% 0% 0% -21% -31% -34% -35% -45% -46% -46% -48% -50% -50% -50% -51%
Perl::Examples::Accessors::ObjectTinyRWXS 70.9/s 1247% 892% 701% 91% 86% 40% 38% 24% 4% 0% 0% 0% 0% -- 0% 0% -21% -31% -34% -35% -45% -46% -46% -48% -50% -50% -50% -51%
Perl::Examples::Accessors::ClassXSAccessor 71.4/s 1257% 900% 707% 92% 87% 41% 39% 25% 5% 1% 1% 1% 0% 0% -- 0% -21% -31% -33% -35% -45% -45% -46% -47% -50% -50% -50% -51%
Perl::Examples::Accessors::ClassAccessor 71.4/s 1257% 900% 707% 92% 87% 41% 39% 25% 5% 1% 1% 1% 0% 0% 0% -- -21% -31% -33% -35% -45% -45% -46% -47% -50% -50% -50% -51%
Perl::Examples::Accessors::MojoBaseXS 90.9/s 1627% 1172% 927% 145% 139% 80% 77% 60% 33% 29% 29% 29% 28% 28% 27% 27% -- -12% -15% -17% -30% -31% -31% -33% -36% -36% -37% -38%
Perl::Examples::Accessors::SimpleAccessor 103.8/s 1873% 1353% 1073% 180% 173% 105% 102% 82% 52% 47% 47% 47% 46% 46% 45% 45% 14% -- -3% -5% -20% -21% -22% -24% -27% -27% -28% -29%
Perl::Examples::Accessors::ClassAccessorPackedString 107.5/s 1943% 1405% 1115% 190% 182% 112% 109% 89% 58% 52% 52% 52% 51% 51% 50% 50% 18% 3% -- -2% -17% -18% -19% -21% -24% -24% -25% -27%
Perl::Examples::Accessors::Mo 109.9/s 1987% 1438% 1141% 196% 189% 117% 114% 93% 61% 56% 56% 56% 54% 54% 53% 53% 20% 5% 2% -- -16% -16% -17% -19% -23% -23% -24% -25%
Perl::Examples::Accessors::ObjectTinyRW 131.1/s 2390% 1734% 1380% 253% 244% 159% 155% 130% 92% 86% 86% 86% 84% 84% 83% 83% 44% 26% 21% 19% -- 0% -1% -4% -8% -8% -9% -11%
Perl::Examples::Accessors::ObjectTiny 132.1/s 2409% 1749% 1392% 256% 247% 161% 157% 132% 94% 87% 87% 87% 86% 86% 84% 84% 45% 27% 22% 20% 0% -- 0% -3% -7% -7% -8% -10%
Perl::Examples::Accessors::ClassAccessorPackedStringSet 133.3/s 2433% 1766% 1406% 260% 250% 164% 160% 134% 96% 89% 89% 89% 87% 87% 86% 86% 46% 28% 24% 21% 1% 0% -- -2% -6% -6% -7% -9%
Perl::Examples::Accessors::ClassAccessorArray 137.0/s 2502% 1817% 1447% 269% 260% 171% 167% 141% 101% 94% 94% 94% 93% 93% 91% 91% 50% 31% 27% 24% 4% 3% 2% -- -4% -4% -5% -7%
Perl::Examples::Accessors::Hash 142.9/s 2614% 1900% 1514% 285% 275% 182% 178% 151% 110% 102% 102% 102% 101% 101% 100% 100% 57% 37% 32% 30% 9% 8% 7% 4% -- 0% -1% -3%
Perl::Examples::Accessors::Array 143.3/s 2622% 1905% 1518% 286% 276% 183% 179% 152% 110% 103% 103% 103% 102% 102% 100% 100% 57% 37% 33% 30% 9% 8% 7% 4% 0% -- -1% -2%
Perl::Examples::Accessors::Scalar 144.7/s 2649% 1926% 1535% 290% 280% 186% 182% 154% 112% 105% 105% 105% 104% 104% 102% 102% 59% 39% 34% 31% 10% 9% 8% 5% 1% 1% -- -1%
perl -e1 (baseline) 147.5/s 2702% 1964% 1566% 298% 287% 192% 187% 159% 116% 109% 109% 109% 107% 107% 106% 106% 62% 42% 37% 34% 12% 11% 10% 7% 3% 2% 1% --
Legends:
Perl::Examples::Accessors::Array: mod_overhead_time=0.2 participant=Perl::Examples::Accessors::Array
Perl::Examples::Accessors::ClassAccessor: mod_overhead_time=7.22 participant=Perl::Examples::Accessors::ClassAccessor
Perl::Examples::Accessors::ClassAccessorArray: mod_overhead_time=0.52 participant=Perl::Examples::Accessors::ClassAccessorArray
Perl::Examples::Accessors::ClassAccessorPackedString: mod_overhead_time=2.52 participant=Perl::Examples::Accessors::ClassAccessorPackedString
Perl::Examples::Accessors::ClassAccessorPackedStringSet: mod_overhead_time=0.72 participant=Perl::Examples::Accessors::ClassAccessorPackedStringSet
Perl::Examples::Accessors::ClassInsideOut: mod_overhead_time=10.82 participant=Perl::Examples::Accessors::ClassInsideOut
Perl::Examples::Accessors::ClassStruct: mod_overhead_time=7.92 participant=Perl::Examples::Accessors::ClassStruct
Perl::Examples::Accessors::ClassTiny: mod_overhead_time=7.42 participant=Perl::Examples::Accessors::ClassTiny
Perl::Examples::Accessors::ClassXSAccessor: mod_overhead_time=7.22 participant=Perl::Examples::Accessors::ClassXSAccessor
Perl::Examples::Accessors::ClassXSAccessorArray: mod_overhead_time=7.42 participant=Perl::Examples::Accessors::ClassXSAccessorArray
Perl::Examples::Accessors::Hash: mod_overhead_time=0.22 participant=Perl::Examples::Accessors::Hash
Perl::Examples::Accessors::Mo: mod_overhead_time=2.32 participant=Perl::Examples::Accessors::Mo
Perl::Examples::Accessors::MojoBase: mod_overhead_time=106.22 participant=Perl::Examples::Accessors::MojoBase
Perl::Examples::Accessors::MojoBaseXS: mod_overhead_time=4.22 participant=Perl::Examples::Accessors::MojoBaseXS
Perl::Examples::Accessors::Moo: mod_overhead_time=20.22 participant=Perl::Examples::Accessors::Moo
Perl::Examples::Accessors::Moops: mod_overhead_time=183.22 participant=Perl::Examples::Accessors::Moops
Perl::Examples::Accessors::Moos: mod_overhead_time=12.72 participant=Perl::Examples::Accessors::Moos
Perl::Examples::Accessors::Moose: mod_overhead_time=133.22 participant=Perl::Examples::Accessors::Moose
Perl::Examples::Accessors::Mouse: mod_overhead_time=19.52 participant=Perl::Examples::Accessors::Mouse
Perl::Examples::Accessors::ObjectPad: mod_overhead_time=13.02 participant=Perl::Examples::Accessors::ObjectPad
Perl::Examples::Accessors::ObjectSimple: mod_overhead_time=7.42 participant=Perl::Examples::Accessors::ObjectSimple
Perl::Examples::Accessors::ObjectTiny: mod_overhead_time=0.79 participant=Perl::Examples::Accessors::ObjectTiny
Perl::Examples::Accessors::ObjectTinyRW: mod_overhead_time=0.85 participant=Perl::Examples::Accessors::ObjectTinyRW
Perl::Examples::Accessors::ObjectTinyRWXS: mod_overhead_time=7.32 participant=Perl::Examples::Accessors::ObjectTinyRWXS
Perl::Examples::Accessors::ObjectTinyXS: mod_overhead_time=7.32 participant=Perl::Examples::Accessors::ObjectTinyXS
Perl::Examples::Accessors::Scalar: mod_overhead_time=0.13 participant=Perl::Examples::Accessors::Scalar
Perl::Examples::Accessors::SimpleAccessor: mod_overhead_time=2.85 participant=Perl::Examples::Accessors::SimpleAccessor
perl -e1 (baseline): mod_overhead_time=0 participant=perl -e1 (baseline)
The above result presented as chart:
To display as an interactive HTML table on a browser, you can add option --format html+datatables
.
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Bencher-ScenarioBundle-Accessors.
SOURCE
Source repository is at https://github.com/perlancar/perl-Bencher-Scenarios-Accessors.
SEE ALSO
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTING
To contribute, you can send patches by email/via RT, or send pull requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2024, 2017, 2016 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Bencher-ScenarioBundle-Accessors
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.