polyphony 0.45.5 → 0.46.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +2 -0
- data/.gitmodules +0 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/TODO.md +4 -4
- data/examples/performance/thread-vs-fiber/polyphony_server.rb +1 -2
- data/ext/liburing/liburing.h +585 -0
- data/ext/liburing/liburing/README.md +4 -0
- data/ext/liburing/liburing/barrier.h +73 -0
- data/ext/liburing/liburing/compat.h +15 -0
- data/ext/liburing/liburing/io_uring.h +343 -0
- data/ext/liburing/queue.c +333 -0
- data/ext/liburing/register.c +187 -0
- data/ext/liburing/setup.c +210 -0
- data/ext/liburing/syscall.c +54 -0
- data/ext/liburing/syscall.h +18 -0
- data/ext/polyphony/backend.h +0 -14
- data/ext/polyphony/backend_common.h +109 -0
- data/ext/polyphony/backend_io_uring.c +884 -0
- data/ext/polyphony/backend_io_uring_context.c +73 -0
- data/ext/polyphony/backend_io_uring_context.h +52 -0
- data/ext/polyphony/{libev_backend.c → backend_libev.c} +202 -294
- data/ext/polyphony/event.c +1 -1
- data/ext/polyphony/extconf.rb +31 -13
- data/ext/polyphony/fiber.c +29 -22
- data/ext/polyphony/libev.c +4 -0
- data/ext/polyphony/libev.h +8 -2
- data/ext/polyphony/liburing.c +8 -0
- data/ext/polyphony/playground.c +51 -0
- data/ext/polyphony/polyphony.c +5 -5
- data/ext/polyphony/polyphony.h +16 -12
- data/ext/polyphony/polyphony_ext.c +10 -4
- data/ext/polyphony/queue.c +1 -1
- data/ext/polyphony/thread.c +11 -9
- data/lib/polyphony/adapters/trace.rb +2 -2
- data/lib/polyphony/core/global_api.rb +1 -4
- data/lib/polyphony/extensions/debug.rb +13 -0
- data/lib/polyphony/extensions/fiber.rb +2 -2
- data/lib/polyphony/extensions/socket.rb +59 -10
- data/lib/polyphony/version.rb +1 -1
- data/test/helper.rb +36 -4
- data/test/io_uring_test.rb +55 -0
- data/test/stress.rb +5 -2
- data/test/test_backend.rb +4 -6
- data/test/test_ext.rb +1 -2
- data/test/test_fiber.rb +22 -16
- data/test/test_global_api.rb +33 -35
- data/test/test_throttler.rb +3 -6
- data/test/test_trace.rb +7 -5
- metadata +22 -3
data/test/test_global_api.rb
CHANGED
@@ -72,28 +72,32 @@ class ExceptionTest < MiniTest::Test
|
|
72
72
|
rescue Exception => e
|
73
73
|
frames << 3
|
74
74
|
raise e
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
75
|
+
end
|
76
|
+
begin
|
77
|
+
5.times { snooze }
|
78
|
+
rescue Exception => e
|
79
|
+
error = e
|
80
|
+
ensure
|
81
|
+
assert_kind_of RuntimeError, error
|
82
|
+
assert_equal [2, 3], frames
|
83
|
+
end
|
82
84
|
end
|
83
85
|
|
84
86
|
def test_cross_fiber_backtrace_with_dead_calling_fiber
|
85
87
|
error = nil
|
86
|
-
|
88
|
+
begin
|
87
89
|
spin do
|
88
90
|
spin do
|
89
|
-
|
91
|
+
spin do
|
92
|
+
raise 'foo'
|
93
|
+
end.await
|
90
94
|
end.await
|
91
95
|
end.await
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
96
|
+
rescue Exception => e
|
97
|
+
error = e
|
98
|
+
ensure
|
99
|
+
assert_kind_of RuntimeError, error
|
100
|
+
end
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
@@ -133,8 +137,7 @@ class MoveOnAfterTest < MiniTest::Test
|
|
133
137
|
t1 = Time.now
|
134
138
|
|
135
139
|
assert_nil v
|
136
|
-
|
137
|
-
assert t1 - t0 < 0.02
|
140
|
+
assert_in_range 0.014..0.02, t1 - t0
|
138
141
|
end
|
139
142
|
|
140
143
|
def test_move_on_after_without_block
|
@@ -185,8 +188,7 @@ class CancelAfterTest < MiniTest::Test
|
|
185
188
|
sleep 0.007
|
186
189
|
end
|
187
190
|
t1 = Time.now
|
188
|
-
|
189
|
-
assert t1 - t0 < 0.02
|
191
|
+
assert_in_range 0.014..0.02, t1 - t0
|
190
192
|
end
|
191
193
|
|
192
194
|
class CustomException < Exception
|
@@ -255,12 +257,10 @@ class SpinLoopTest < MiniTest::Test
|
|
255
257
|
buffer = []
|
256
258
|
counter = 0
|
257
259
|
t0 = Time.now
|
258
|
-
f = spin_loop(rate:
|
259
|
-
sleep 0.
|
260
|
+
f = spin_loop(rate: 100) { buffer << (counter += 1) }
|
261
|
+
sleep 0.02
|
260
262
|
f.stop
|
261
|
-
|
262
|
-
expected = (elapsed * 10).to_i
|
263
|
-
assert counter >= expected - 1 && counter <= expected + 1
|
263
|
+
assert_in_range 1..3, counter
|
264
264
|
end
|
265
265
|
end
|
266
266
|
|
@@ -270,22 +270,22 @@ class ThrottledLoopTest < MiniTest::Test
|
|
270
270
|
counter = 0
|
271
271
|
t0 = Time.now
|
272
272
|
f = spin do
|
273
|
-
throttled_loop(
|
273
|
+
throttled_loop(100) { buffer << (counter += 1) }
|
274
274
|
end
|
275
|
-
sleep 0.
|
276
|
-
|
277
|
-
elapsed = Time.now - t0
|
278
|
-
expected = (elapsed * 10).to_i
|
279
|
-
assert counter >= expected - 1 && counter <= expected + 1
|
275
|
+
sleep 0.03
|
276
|
+
assert_in_range 2..4, counter
|
280
277
|
end
|
281
278
|
|
282
279
|
def test_throttled_loop_with_count
|
283
280
|
buffer = []
|
284
281
|
counter = 0
|
282
|
+
t0 = Time.now
|
285
283
|
f = spin do
|
286
284
|
throttled_loop(50, count: 5) { buffer << (counter += 1) }
|
287
285
|
end
|
288
286
|
f.await
|
287
|
+
t1 = Time.now
|
288
|
+
assert_in_range 0.075..0.15, t1 - t0
|
289
289
|
assert_equal [1, 2, 3, 4, 5], buffer
|
290
290
|
end
|
291
291
|
end
|
@@ -304,13 +304,11 @@ class GlobalAPIEtcTest < MiniTest::Test
|
|
304
304
|
buffer = []
|
305
305
|
t0 = Time.now
|
306
306
|
f = spin do
|
307
|
-
every(0.
|
307
|
+
every(0.01) { buffer << 1 }
|
308
308
|
end
|
309
|
-
sleep 0.
|
309
|
+
sleep 0.05
|
310
310
|
f.stop
|
311
|
-
|
312
|
-
expected = (elapsed / 0.1).to_i
|
313
|
-
assert buffer.size >= expected - 2 && buffer.size <= expected + 2
|
311
|
+
assert_in_range 4..6, buffer.size
|
314
312
|
end
|
315
313
|
|
316
314
|
def test_sleep
|
@@ -378,4 +376,4 @@ class GlobalAPIEtcTest < MiniTest::Test
|
|
378
376
|
|
379
377
|
assert_equal [0, 1, 2], values
|
380
378
|
end
|
381
|
-
end
|
379
|
+
end
|
data/test/test_throttler.rb
CHANGED
@@ -10,9 +10,7 @@ class ThrottlerTest < MiniTest::Test
|
|
10
10
|
f = spin { loop { t.process { buffer << 1 } } }
|
11
11
|
sleep 0.2
|
12
12
|
f.stop
|
13
|
-
|
14
|
-
expected = (elapsed * 10).to_i
|
15
|
-
assert buffer.size >= expected - 1 && buffer.size <= expected + 1
|
13
|
+
assert_in_range 1..3, buffer.size
|
16
14
|
ensure
|
17
15
|
t.stop
|
18
16
|
end
|
@@ -25,7 +23,7 @@ class ThrottlerTest < MiniTest::Test
|
|
25
23
|
end
|
26
24
|
sleep 0.25
|
27
25
|
f.stop
|
28
|
-
|
26
|
+
assert_in_range 2..6, buffer.size
|
29
27
|
ensure
|
30
28
|
t.stop
|
31
29
|
end
|
@@ -36,8 +34,7 @@ class ThrottlerTest < MiniTest::Test
|
|
36
34
|
f = spin { loop { t.process { buffer << 1 } } }
|
37
35
|
sleep 0.02
|
38
36
|
f.stop
|
39
|
-
|
40
|
-
assert buffer.size <= 3
|
37
|
+
assert_in_range 2..3, buffer.size
|
41
38
|
ensure
|
42
39
|
t.stop
|
43
40
|
end
|
data/test/test_trace.rb
CHANGED
@@ -35,7 +35,9 @@ class TraceTest < MiniTest::Test
|
|
35
35
|
def test_2_fiber_trace
|
36
36
|
records = []
|
37
37
|
thread = Thread.current
|
38
|
-
t = Polyphony::Trace.new(:fiber_all)
|
38
|
+
t = Polyphony::Trace.new(:fiber_all) do |r|
|
39
|
+
records << r if Thread.current == thread && r[:event] =~ /^fiber_/
|
40
|
+
end
|
39
41
|
t.enable
|
40
42
|
Polyphony.trace(true)
|
41
43
|
|
@@ -50,15 +52,15 @@ class TraceTest < MiniTest::Test
|
|
50
52
|
[:current, :fiber_switchpoint],
|
51
53
|
[:f, :fiber_run],
|
52
54
|
[:f, :fiber_switchpoint],
|
53
|
-
[:f, :
|
55
|
+
[:f, :fiber_event_poll_enter],
|
54
56
|
[:f, :fiber_schedule],
|
55
|
-
[:f, :
|
57
|
+
[:f, :fiber_event_poll_leave],
|
56
58
|
[:f, :fiber_run],
|
57
59
|
[:f, :fiber_terminate],
|
58
60
|
[:current, :fiber_switchpoint],
|
59
|
-
[:current, :
|
61
|
+
[:current, :fiber_event_poll_enter],
|
60
62
|
[:current, :fiber_schedule],
|
61
|
-
[:current, :
|
63
|
+
[:current, :fiber_event_poll_leave],
|
62
64
|
[:current, :fiber_run]
|
63
65
|
], events
|
64
66
|
ensure
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyphony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.46.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -278,6 +278,7 @@ extra_rdoc_files:
|
|
278
278
|
files:
|
279
279
|
- ".github/workflows/test.yml"
|
280
280
|
- ".gitignore"
|
281
|
+
- ".gitmodules"
|
281
282
|
- ".rubocop.yml"
|
282
283
|
- ".vscode/launch.json"
|
283
284
|
- CHANGELOG.md
|
@@ -415,13 +416,29 @@ files:
|
|
415
416
|
- ext/libev/ev_win32.c
|
416
417
|
- ext/libev/ev_wrap.h
|
417
418
|
- ext/libev/test_libev_win32.c
|
419
|
+
- ext/liburing/liburing.h
|
420
|
+
- ext/liburing/liburing/README.md
|
421
|
+
- ext/liburing/liburing/barrier.h
|
422
|
+
- ext/liburing/liburing/compat.h
|
423
|
+
- ext/liburing/liburing/io_uring.h
|
424
|
+
- ext/liburing/queue.c
|
425
|
+
- ext/liburing/register.c
|
426
|
+
- ext/liburing/setup.c
|
427
|
+
- ext/liburing/syscall.c
|
428
|
+
- ext/liburing/syscall.h
|
418
429
|
- ext/polyphony/backend.h
|
430
|
+
- ext/polyphony/backend_common.h
|
431
|
+
- ext/polyphony/backend_io_uring.c
|
432
|
+
- ext/polyphony/backend_io_uring_context.c
|
433
|
+
- ext/polyphony/backend_io_uring_context.h
|
434
|
+
- ext/polyphony/backend_libev.c
|
419
435
|
- ext/polyphony/event.c
|
420
436
|
- ext/polyphony/extconf.rb
|
421
437
|
- ext/polyphony/fiber.c
|
422
438
|
- ext/polyphony/libev.c
|
423
439
|
- ext/polyphony/libev.h
|
424
|
-
- ext/polyphony/
|
440
|
+
- ext/polyphony/liburing.c
|
441
|
+
- ext/polyphony/playground.c
|
425
442
|
- ext/polyphony/polyphony.c
|
426
443
|
- ext/polyphony/polyphony.h
|
427
444
|
- ext/polyphony/polyphony_ext.c
|
@@ -451,6 +468,7 @@ files:
|
|
451
468
|
- lib/polyphony/core/thread_pool.rb
|
452
469
|
- lib/polyphony/core/throttler.rb
|
453
470
|
- lib/polyphony/extensions/core.rb
|
471
|
+
- lib/polyphony/extensions/debug.rb
|
454
472
|
- lib/polyphony/extensions/fiber.rb
|
455
473
|
- lib/polyphony/extensions/io.rb
|
456
474
|
- lib/polyphony/extensions/openssl.rb
|
@@ -462,6 +480,7 @@ files:
|
|
462
480
|
- test/coverage.rb
|
463
481
|
- test/eg.rb
|
464
482
|
- test/helper.rb
|
483
|
+
- test/io_uring_test.rb
|
465
484
|
- test/q.rb
|
466
485
|
- test/run.rb
|
467
486
|
- test/stress.rb
|