Skip to content

Commit c5911ec

Browse files
committed
Add some system benchmarks.
1 parent eace2fe commit c5911ec

File tree

3 files changed

+214
-0
lines changed

3 files changed

+214
-0
lines changed

benchmark/core/fiber-creation.rb

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
puts RUBY_VERSION
2+
3+
times = []
4+
5+
10.times do
6+
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
7+
8+
fibers = 10_000.times.map do
9+
Fiber.new do
10+
true
11+
end
12+
end
13+
14+
fibers.each(&:resume)
15+
16+
duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time
17+
duration_us = duration * 1_000_000
18+
duration_per_iteration = duration_us / fibers.size
19+
20+
times << duration_per_iteration
21+
puts "Fiber duration: #{duration_per_iteration.round(2)}us"
22+
end
23+
24+
puts "Average: #{(times.sum / times.size).round(2)}us"
25+
puts " Best: #{times.min.round(2)}us"

benchmark/core/results.md

+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
## Ruby 2.6.10
2+
3+
```
4+
samuel@aiko ~/P/s/a/b/core (main)> ruby fiber-creation.rb
5+
2.6.10
6+
Fiber duration: 3.34us
7+
Fiber duration: 2.57us
8+
Fiber duration: 2.06us
9+
Fiber duration: 2.23us
10+
Fiber duration: 1.96us
11+
Fiber duration: 2.13us
12+
Fiber duration: 1.99us
13+
Fiber duration: 2.13us
14+
Fiber duration: 1.97us
15+
Fiber duration: 1.98us
16+
Average: 2.23us
17+
Best: 1.96us
18+
samuel@aiko ~/P/s/a/b/core (main)> ruby thread-creation.rb
19+
2.6.10
20+
Thread duration: 47.01us
21+
Thread duration: 44.85us
22+
Thread duration: 50.91us
23+
Thread duration: 45.06us
24+
Thread duration: 47.04us
25+
Thread duration: 48.75us
26+
Thread duration: 52.04us
27+
Thread duration: 54.62us
28+
Thread duration: 48.35us
29+
Thread duration: 50.79us
30+
Average: 48.94us
31+
Best: 44.85us
32+
```
33+
34+
## Ruby 2.7.7
35+
36+
```
37+
samuel@aiko ~/P/s/a/b/core (main)> ruby fiber-creation.rb
38+
2.7.7
39+
Fiber duration: 0.93us
40+
Fiber duration: 0.89us
41+
Fiber duration: 0.81us
42+
Fiber duration: 0.83us
43+
Fiber duration: 0.82us
44+
Fiber duration: 0.77us
45+
Fiber duration: 0.73us
46+
Fiber duration: 0.79us
47+
Fiber duration: 0.88us
48+
Fiber duration: 0.8us
49+
Average: 0.83us
50+
Best: 0.73us
51+
samuel@aiko ~/P/s/a/b/core (main)> ruby thread-creation.rb
52+
2.7.7
53+
Thread duration: 13.44us
54+
Thread duration: 11.32us
55+
Thread duration: 11.05us
56+
Thread duration: 10.71us
57+
Thread duration: 9.22us
58+
Thread duration: 9.89us
59+
Thread duration: 9.48us
60+
Thread duration: 10.25us
61+
Thread duration: 9.92us
62+
Thread duration: 9.52us
63+
Average: 10.48us
64+
Best: 9.22us
65+
```
66+
67+
## Ruby 3.0.4
68+
69+
```
70+
samuel@aiko ~/P/s/a/b/core (main)> ruby fiber-creation.rb
71+
3.0.4
72+
Fiber duration: 0.88us
73+
Fiber duration: 0.85us
74+
Fiber duration: 0.78us
75+
Fiber duration: 0.76us
76+
Fiber duration: 0.81us
77+
Fiber duration: 0.71us
78+
Fiber duration: 0.87us
79+
Fiber duration: 0.89us
80+
Fiber duration: 0.76us
81+
Fiber duration: 0.96us
82+
Average: 0.83us
83+
Best: 0.71us
84+
samuel@aiko ~/P/s/a/b/core (main)> ruby thread-creation.rb
85+
3.0.4
86+
Thread duration: 13.72us
87+
Thread duration: 10.92us
88+
Thread duration: 9.97us
89+
Thread duration: 9.44us
90+
Thread duration: 9.28us
91+
Thread duration: 9.38us
92+
Thread duration: 9.31us
93+
Thread duration: 9.45us
94+
Thread duration: 9.4us
95+
Thread duration: 9.39us
96+
Average: 10.03us
97+
Best: 9.28us
98+
```
99+
100+
## Ruby 3.1.3
101+
102+
```
103+
samuel@aiko ~/P/s/a/b/core (main)> ruby fiber-creation.rb
104+
3.1.3
105+
Fiber duration: 0.94us
106+
Fiber duration: 0.89us
107+
Fiber duration: 0.86us
108+
Fiber duration: 0.87us
109+
Fiber duration: 0.71us
110+
Fiber duration: 0.78us
111+
Fiber duration: 0.79us
112+
Fiber duration: 0.91us
113+
Fiber duration: 0.75us
114+
Fiber duration: 0.75us
115+
Average: 0.82us
116+
Best: 0.71us
117+
samuel@aiko ~/P/s/a/b/core (main)> ruby thread-creation.rb
118+
3.1.3
119+
Thread duration: 13.42us
120+
Thread duration: 11.78us
121+
Thread duration: 11.84us
122+
Thread duration: 10.92us
123+
Thread duration: 10.98us
124+
Thread duration: 9.34us
125+
Thread duration: 11.2us
126+
Thread duration: 11.29us
127+
Thread duration: 14.21us
128+
Thread duration: 11.86us
129+
Average: 11.68us
130+
Best: 9.34us
131+
```
132+
133+
## Ruby 3.2.1
134+
135+
```
136+
samuel@aiko ~/P/s/a/b/core (main)> ruby fiber-creation.rb
137+
3.2.1
138+
Fiber duration: 1.07us
139+
Fiber duration: 0.91us
140+
Fiber duration: 0.83us
141+
Fiber duration: 0.86us
142+
Fiber duration: 0.81us
143+
Fiber duration: 0.83us
144+
Fiber duration: 0.82us
145+
Fiber duration: 0.83us
146+
Fiber duration: 0.84us
147+
Fiber duration: 0.81us
148+
Average: 0.86us
149+
Best: 0.81us
150+
samuel@aiko ~/P/s/a/b/core (main)> ruby thread-creation.rb
151+
3.2.1
152+
Thread duration: 13.3us
153+
Thread duration: 11.71us
154+
Thread duration: 13.17us
155+
Thread duration: 10.61us
156+
Thread duration: 8.94us
157+
Thread duration: 11.99us
158+
Thread duration: 12.63us
159+
Thread duration: 12.04us
160+
Thread duration: 10.63us
161+
Thread duration: 12.73us
162+
Average: 11.77us
163+
Best: 8.94us
164+
```

benchmark/core/thread-creation.rb

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
puts RUBY_VERSION
2+
3+
times = []
4+
5+
10.times do
6+
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
7+
8+
threads = 20_000.times.map do
9+
Thread.new do
10+
true
11+
end
12+
end
13+
14+
threads.each(&:join)
15+
16+
duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time
17+
duration_us = duration * 1_000_000
18+
duration_per_iteration = duration_us / threads.size
19+
20+
times << duration_per_iteration
21+
puts "Thread duration: #{duration_per_iteration.round(2)}us"
22+
end
23+
24+
puts "Average: #{(times.sum / times.size).round(2)}us"
25+
puts " Best: #{times.min.round(2)}us"

0 commit comments

Comments
 (0)