-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathbenchmarks.yml
More file actions
272 lines (269 loc) · 9.02 KB
/
benchmarks.yml
File metadata and controls
272 lines (269 loc) · 9.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#
# Headline Benchmarks
#
activerecord:
desc: activerecord repeatedly queries entries in a SQLite table with highly-random names.
category: headline
chunky-png:
desc: A pure-Ruby implementation of PNG encoding
category: headline
erubi-rails:
desc: Uses Rails template rendering to repeatedly render a stubbed Discourse view.
category: headline
hexapdf:
desc: hexapdf benchmarks the hexapdf Ruby gem by line-wrapping The Odyssey with specific line-length and font.
category: headline
liquid-c:
desc: liquid-c renders a chosen-for-profiling Liquid theme repeatedly.
category: headline
liquid-compile:
desc: compiles a chosen-for-profiling Liquid theme repeatedly.
category: headline
liquid-render:
desc: renders a chosen-for-profiling Liquid theme repeatedly.
category: headline
lobsters:
desc: test a wide variety of routes in the Lobste.rs Rails app
category: headline
mail:
desc: mail tests the Mail gem by repeatedly creating an email from a text file and converting it to a string for sending.
category: headline
psych-load:
desc: psych-load repeatedly loads a small selection of YAML files taken from various OSS projects.
category: headline
ractor: true
railsbench:
desc: railsbench is a read-only tiny SQLite-backed Rails app, querying a small selection of .html.erb routes and JSON routes.
category: headline
rubocop:
desc: Run the RuboCop auto correction on a sizable file.
category: headline
ruby-lsp:
desc: Run the Ruby LSP's indexing mechanism.
category: headline
sequel:
desc: sequel repeatedly queries entries in a SQLite table with highly-random names.
category: headline
shipit:
desc: test a wide variety of routes, both HTML and JSON API in the shipit Rails app
category: headline
#
# Other Benchmarks
#
addressable-equality:
desc: addressable URI equality comparison
addressable-getters:
desc: addressable URI component getters (scheme, host, port, path, query, fragment)
addressable-join:
desc: addressable URI joining/merging paths
addressable-merge:
desc: addressable URI merging options
addressable-new:
desc: addressable URI construction from hash
addressable-normalize:
desc: addressable URI normalization
addressable-parse:
desc: addressable URI parsing (simple and complex URIs)
addressable-setters:
desc: addressable URI component setters (scheme, host, path modification)
addressable-to-s:
desc: addressable URI to string conversion
binarytrees:
desc: binarytrees from the Computer Language Benchmarks Game.
blurhash:
desc: blurhash (blurred preview image) calculation
ractor: true
gcbench:
desc: Ellis-Kovac-Boehm GCBench builds binary trees of various depths to exercise GC marking, sweeping, and write barriers.
category: gc
single_file: true
default_harness: harness-gc
erubi:
desc: erubi compiles a simple Erb template into a method with erubi, then times evaluating that method.
ractor: true
etanni:
desc: etanni is an older, extremely simple template-lang format that basically turns your template into an "eval" with a lot of heredocs.
fannkuchredux:
desc: fannkuchredux from the Computer Language Benchmarks Game.
ractor: true
fluentd:
desc: fluentd is a log collector, which parses logs in a server and forwards them to various destinations.
graphql:
desc: GraphQL gem parsing a large file, uses Racc which has some Ruby->native->Ruby calls
ractor: true
graphql-native:
desc: GraphQL gem parsing a large file, but using a native parser
knucleotide:
desc: k-nucleotide from the Computer Language Benchmarks Game - counts nucleotide frequencies using hash tables in parallel using Process.fork
knucleotide-ractor:
desc: k-nucleotide from the Computer Language Benchmarks Game - counts nucleotide frequencies using hash tables in parallel using Ractors
ractor: true
ractor_only: true
default_harness: harness
lee:
desc: lee is a circuit-board layout solver, deployed in a plausibly reality-like way
matmul:
desc: matrix multiplication benchmark
ractor: true
nbody:
desc: nbody from the Computer Language Benchmarks Game.
nqueens:
desc: solver for the N-Queens problem
ractor: true
optcarrot:
desc: optcarrot is a functional headless NES emulator, run on a specific game cartridge for a specific number of frames.
ractor: true
protoboeuf:
desc: protoboeuf (pure-Ruby protobuf) message decoding
ractor: true
protoboeuf-encode:
desc: protoboeuf (pure-Ruby protobuf) message encoding
ractor: true
rack:
desc: test the performance of the Rack framework with barely any routing.
ruby-json:
desc: an optimized version of the json_pure gem's pure Ruby JSON parser.
ractor: true
rubyboy:
desc: Rubyboy is a functional headless GameBoy emulator, run on a specific game cartridge for a specific number of frames.
ractor: true
rubykon:
desc: Ruby solver for Go (the boardgame.) Runs many iterations forward from an initial starting board.
sudoku:
desc: sudoku solver
ractor: true
splay:
desc: Splay tree operations (insert, find, remove) to stress GC.
single_file: true
tinygql:
desc: TinyGQL gem parsing a large file in pure Ruby
#
# MicroBenchmarks
#
30k_ifelse:
desc: 30k_ifelse tests thousands of nested methods containing simple if/else statements.
category: micro
single_file: true
ractor: true
30k_methods:
desc: 30k_methods tests thousands of nested method calls that mostly just call out to other single-call methods.
category: micro
single_file: true
ractor: true
attr_accessor:
desc: attr_accessor tests the performance of getting instance variable values via an attr_accessor imemo.
category: micro
single_file: true
ractor: true
cfunc_itself:
desc: cfunc_itself just calls the 'itself' method many, many times.
category: micro
single_file: true
send_cfunc_block:
desc: send_cfunc_block just calls a known C function with a block many, many times.
category: micro
single_file: true
send_rubyfunc_block:
desc: send_rubyfunc_block just calls a known Ruby function with a block many, many times.
category: micro
single_file: true
send_bmethod:
desc: send_bmethod just calls known Ruby bmethods many, many times.
category: micro
single_file: true
fib:
desc: Fib is a simple exponential-time recursive Fibonacci number generator.
category: micro
single_file: true
ractor: true
getivar:
desc: getivar tests the performance of getting instance variable values.
category: micro
single_file: true
ractor: true
getivar-module:
desc: getivar tests the performance of getting instance variable values from modules.
category: micro
single_file: true
ractor: true
structaref:
desc: structaref tests the performance of getting Struct members
category: micro
single_file: true
structaset:
desc: structaset tests the performance of setting Struct members
category: micro
single_file: true
keyword_args:
desc: keyword_args tests the performance of method calls with keyword arguments.
category: micro
single_file: true
loops-times:
desc: nested loop Integer#times and array access microbenchmark
category: micro
single_file: true
ractor: true
object-new:
desc: instantiate a new object in a loop to test allocation performance
category: micro
single_file: true
ractor: true
object-new-initialize:
desc: instantiate a new object and call initialize in a loop to test allocation and initialization performance
category: micro
single_file: true
ractor: true
object-new-no-escape:
desc: instantiate new objects with ivars in a loop to test allocation and escape analysis performance
category: micro
single_file: true
respond_to:
desc: respond_to tests the performance of the respond_to? method.
category: micro
single_file: true
ruby-xor:
desc: pure-Ruby string XOR microbenchmark, analogous to xorcist C extension.
category: micro
single_file: true
ractor: true
setivar:
desc: setivar tests the performance of setting instance variable values.
category: micro
single_file: true
setivar_object:
desc: setivar_object tests the performance of setting instance variables to an object, to test write barrier speed.
category: micro
single_file: true
setivar_young:
desc: setivar_object tests the performance of setting instance variables to an object, to test write barrier speed on young objects.
category: micro
single_file: true
ractor: true
str_concat:
desc: str_concat tests the performance of string concatenation in multiple different encodings.
category: micro
single_file: true
ractor: true
throw:
desc: microbenchmark for the throw instruction and stack unwinding.
category: micro
single_file: true
ractor: true
#
# Ractor scaling benchmarks
#
gvl_release_acquire:
desc: microbenchmark designed to test how fast the gvl can be acquired and released between ractors.
ractor: true
ractor_only: true
default_harness: harness-ractor
json_parse_float:
desc: test the performance of parsing multiple lists of json floats with ractors.
ractor: true
ractor_only: true
default_harness: harness-ractor
json_parse_string:
desc: test the performance of parsing multiple lists of strings with ractors.
ractor: true
ractor_only: true
default_harness: harness-ractor