diff options
Diffstat (limited to 'src/third_party/wiredtiger/bench/workgen/runner/split_stress.py')
-rw-r--r-- | src/third_party/wiredtiger/bench/workgen/runner/split_stress.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/bench/workgen/runner/split_stress.py b/src/third_party/wiredtiger/bench/workgen/runner/split_stress.py new file mode 100644 index 00000000000..57aa8040d5d --- /dev/null +++ b/src/third_party/wiredtiger/bench/workgen/runner/split_stress.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# +# Public Domain 2014-2018 MongoDB, Inc. +# Public Domain 2008-2014 WiredTiger, Inc. +# +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# + +# A workload with small cache, small internal and leaf page sizes, faster splits +# and multiple threads inserting keys in random order. It stresses the page +# splits in order to catch split races. +# +from runner import * +from wiredtiger import * +from workgen import * + +context = Context() +# Connection configuration. +conn_config = "cache_size=100MB,log=(enabled=false),statistics=[fast],statistics_log=(wait=1,json=false)" +conn = wiredtiger_open("WT_TEST", "create," + conn_config) +s = conn.open_session("") + +# Table configuration. +table_config = "leaf_page_max=8k,internal_page_max=8k,leaf_item_max=1433,internal_item_max=3100,type=file,memory_page_max=1MB,split_deepen_min_child=100" +tables = [] +table_count = 3 +for i in range(0, table_count): + tname = "file:test" + str(i) + table = Table(tname) + s.create(tname, 'key_format=S,value_format=S,' + table_config) + table.options.key_size = 64 + table.options.value_size = 200 + table.options.range = 100000000 # 100 million + tables.append(table) + +# Populate phase. +populate_threads = 1 +icount = 50000 +# There are multiple tables to be filled during populate, +# the icount is split between them all. +pop_ops = Operation(Operation.OP_INSERT, tables[0]) +pop_ops = op_multi_table(pop_ops, tables) +nops_per_thread = icount / (populate_threads * table_count) +pop_thread = Thread(pop_ops * nops_per_thread) +pop_workload = Workload(context, populate_threads * pop_thread) +print('populate:') +pop_workload.run(conn) + +# Run phase. +ops = Operation(Operation.OP_INSERT, tables[0]) +ops = op_multi_table(ops, tables, False) +thread0 = Thread(ops) + +workload = Workload(context, 20 * thread0) +workload.options.report_interval=5 +workload.options.run_time=300 +print('Split stress workload running...') +workload.run(conn) + +latency_filename = "WT_TEST/latency.out" +latency.workload_latency(workload, latency_filename) +conn.close() |