summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-02 13:48:47 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-07-12 11:56:51 +1200
commit012e954b472d2e47b03647ac0c8f745416d7db58 (patch)
treef2f3f0f17de96445c361c358590dbac5a6db969d /benchmark
parent8745fa2ff0fbff67031bdecfdeea684b15515a2c (diff)
Improved fiber benchmarks. Increase number of iterations.
Diffstat (limited to 'benchmark')
-rwxr-xr-xbenchmark/fiber_chain.rb40
-rwxr-xr-xbenchmark/fiber_chain.yml36
-rw-r--r--benchmark/vm2_fiber_allocate.yml8
-rw-r--r--benchmark/vm2_fiber_count.yml8
-rw-r--r--benchmark/vm2_fiber_reuse.yml14
-rw-r--r--benchmark/vm2_fiber_switch.yml2
6 files changed, 67 insertions, 41 deletions
diff --git a/benchmark/fiber_chain.rb b/benchmark/fiber_chain.rb
deleted file mode 100755
index 7e0a7f9d45..0000000000
--- a/benchmark/fiber_chain.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# Check performance of fiber creation and transfer.
-
-def make_link(previous)
- Fiber.new do
- while message = previous.resume
- Fiber.yield(message)
- end
- end
-end
-
-def make_chain(length, &block)
- chain = Fiber.new(&block)
-
- (length - 1).times do
- chain = make_link(chain)
- end
-
- return chain
-end
-
-def run_benchmark(length, repeats, message = :hello)
- chain = nil
-
- chain = make_chain(length) do
- while true
- Fiber.yield(message)
- end
- end
-
- repeats.times do
- abort "invalid result" unless chain.resume == message
- end
-end
-
-n = (ARGV[0] || 1000).to_i
-m = (ARGV[1] || 1000).to_i
-
-5.times do
- run_benchmark(n, m)
-end
diff --git a/benchmark/fiber_chain.yml b/benchmark/fiber_chain.yml
new file mode 100755
index 0000000000..e526551da4
--- /dev/null
+++ b/benchmark/fiber_chain.yml
@@ -0,0 +1,36 @@
+prelude: |
+ def make_link(previous)
+ Fiber.new do
+ while message = previous.resume
+ Fiber.yield(message)
+ end
+ end
+ end
+
+ def make_chain(length = 1000, &block)
+ chain = Fiber.new(&block)
+
+ (length - 1).times do
+ chain = make_link(chain)
+ end
+
+ return chain
+ end
+
+ message = "Hello World!"
+
+ chain = make_chain do
+ while true
+ Fiber.yield(message)
+ end
+ end
+benchmark:
+ make_chain: |
+ make_chain(100) do
+ while true
+ Fiber.yield(message)
+ end
+ end
+ resume_chain: |
+ chain.resume
+loop_count: 5000
diff --git a/benchmark/vm2_fiber_allocate.yml b/benchmark/vm2_fiber_allocate.yml
new file mode 100644
index 0000000000..f29705f694
--- /dev/null
+++ b/benchmark/vm2_fiber_allocate.yml
@@ -0,0 +1,8 @@
+prelude: |
+ # Disable GC to see raw throughput:
+ GC.disable
+benchmark:
+ vm2_fiber_allocate: |
+ fiber = Fiber.new{Fiber.yield}
+ fiber.resume
+loop_count: 100000
diff --git a/benchmark/vm2_fiber_count.yml b/benchmark/vm2_fiber_count.yml
new file mode 100644
index 0000000000..2005772e84
--- /dev/null
+++ b/benchmark/vm2_fiber_count.yml
@@ -0,0 +1,8 @@
+prelude: |
+ fibers = []
+benchmark:
+ vm2_fiber_count: |
+ fiber = Fiber.new{Fiber.yield}
+ fibers << fiber
+ fiber.resume
+loop_count: 100000
diff --git a/benchmark/vm2_fiber_reuse.yml b/benchmark/vm2_fiber_reuse.yml
new file mode 100644
index 0000000000..5dbdd5dfc5
--- /dev/null
+++ b/benchmark/vm2_fiber_reuse.yml
@@ -0,0 +1,14 @@
+prelude: |
+ GC.disable
+ fibers = []
+benchmark:
+ vm2_fiber_reuse: |
+ 1024.times do
+ fiber = Fiber.new{Fiber.yield}
+ fibers << fiber
+ fiber.resume
+ end
+
+ fibers.clear
+ GC.start
+loop_count: 200
diff --git a/benchmark/vm2_fiber_switch.yml b/benchmark/vm2_fiber_switch.yml
index f3e4c91283..fbf7283c29 100644
--- a/benchmark/vm2_fiber_switch.yml
+++ b/benchmark/vm2_fiber_switch.yml
@@ -6,4 +6,4 @@ prelude: |
benchmark:
vm2_fiber_switch: |
fib.resume
-loop_count: 6000000
+loop_count: 20000000