From 907cdecfc502e7e63bbb49896b5477b349bf2ec8 Mon Sep 17 00:00:00 2001 From: "mahlon@martini.nu" Date: Wed, 10 Mar 2021 00:33:49 +0000 Subject: [PATCH] Add a quickie benchmarker. FossilOrigin-Name: d29068edd8e72591d850c69b1454bd0b9567c0f10185be80aa1f8abaec618192 --- experiments/thread_usage.rb | 69 +++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 experiments/thread_usage.rb diff --git a/experiments/thread_usage.rb b/experiments/thread_usage.rb new file mode 100755 index 0000000..3b4d53b --- /dev/null +++ b/experiments/thread_usage.rb @@ -0,0 +1,69 @@ +#!/usr/bin/env ruby +# + +require 'mdbx' +require 'benchmark' +require 'fileutils' + +include FileUtils + + +db = MDBX::Database.open( 'tmpdb' ) +mtx = Mutex.new + +at_exit do + rm_r 'tmpdb' +end + +THREAD_COUNT = 10 +WRITES_PER = 1000 + +puts "#{THREAD_COUNT} simultaneous threads, #{WRITES_PER} writes each:" + +Benchmark.bm( 10 ) do |x| + x.report( " txn per write:" ) do + threads = [] + THREAD_COUNT.times do |i| + threads << Thread.new do + mtx.synchronize do + WRITES_PER.times do + key = "%02d-%d" % [ i, rand(1000) ] + db[ key ] = rand(1000) + end + end + end + end + threads.map( &:join ) + end + + + # Long running transactions require a mutex across threads. + # + x.report( "txn per thread:" ) do + threads = [] + THREAD_COUNT.times do |i| + threads << Thread.new do + mtx.synchronize do + db.transaction do + WRITES_PER.times do + key = "%02d-%d" % [ i, rand(1000) ] + db[ key ] = rand(1000) + end + end + end + end + end + threads.map( &:join ) + end + + x.report( " unthreaded:" ) do + db.transaction do + ( THREAD_COUNT * WRITES_PER ).times do + key = "000-%d" % [ rand(1000) ] + db[ key ] = rand(1000) + end + end + end +end + +