summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/bench/wtperf/runners
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/bench/wtperf/runners')
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/evict-btree.wtperf8
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/evict-lsm.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/fruit-lsm.wtperf22
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/fruit-short.wtperf20
-rwxr-xr-xsrc/third_party/wiredtiger/bench/wtperf/runners/get_ckpt.py42
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/insert-rmw.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/large-lsm.wtperf11
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/long-txn-btree.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/long-txn-lsm.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/medium-btree.wtperf8
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-async.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-compact.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm.wtperf8
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm-noprefix.wtperf10
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm.wtperf10
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/multi-btree-long.wtperf16
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/multi-btree.wtperf17
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-btree.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-lsm.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/shared-cache-stress.wtperf12
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/small-btree.wtperf8
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/small-lsm.wtperf8
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test1-1b-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test1-2b-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test1-500m-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test1-50m-lsm.wtperf17
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test2-1b-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test2-2b-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test2-500m-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test2-50m-lsm.wtperf17
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test3-1b-lsm.wtperf20
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test3-2b-lsm.wtperf20
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test3-500m-lsm.wtperf20
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test3-50m-lsm.wtperf19
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test4-1b-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test4-2b-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test4-500m-lsm.wtperf18
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/test4-50m-lsm.wtperf17
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/update-btree.wtperf8
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-btree.wtperf12
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-lsm.wtperf12
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/update-large-lsm.wtperf9
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/update-lsm.wtperf8
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k-short.wtperf19
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k.wtperf20
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k-short.wtperf19
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k.wtperf20
-rwxr-xr-xsrc/third_party/wiredtiger/bench/wtperf/runners/wtperf_ckpt.sh136
-rwxr-xr-xsrc/third_party/wiredtiger/bench/wtperf/runners/wtperf_run.sh168
-rw-r--r--src/third_party/wiredtiger/bench/wtperf/runners/wtperf_track.sh204
50 files changed, 1199 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/evict-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/evict-btree.wtperf
new file mode 100644
index 00000000000..f8c270f3d1f
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/evict-btree.wtperf
@@ -0,0 +1,8 @@
+# wtperf options file: evict btree configuration
+conn_config="cache_size=50M"
+table_config="type=file"
+icount=10000000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=16,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/evict-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/evict-lsm.wtperf
new file mode 100644
index 00000000000..962f6a60201
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/evict-lsm.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: evict lsm configuration
+conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6)"
+table_config="type=lsm,os_cache_dirty_max=16MB"
+compact=true
+icount=10000000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=16,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/fruit-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/fruit-lsm.wtperf
new file mode 100644
index 00000000000..a34c74d5e08
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/fruit-lsm.wtperf
@@ -0,0 +1,22 @@
+# wtperf options file: simulate riak and its test1 and test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=600),log=(enabled=true),transaction_sync=(enabled=true,method=none),checkpoint=(wait=180),lsm_manager=(worker_thread_max=12)"
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=600)"
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024"
+compact=true
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,leaf_item_max=4K,os_cache_dirty_max=16MB"
+icount=25000000
+key_sz=40
+value_sz=800
+#max_latency=2000
+pareto=true
+populate_threads=20
+report_interval=10
+random_value=true
+run_time=18000
+sample_interval=10
+table_count=8
+threads=((count=20,read=6,update=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/fruit-short.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/fruit-short.wtperf
new file mode 100644
index 00000000000..a2ea535b4c5
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/fruit-short.wtperf
@@ -0,0 +1,20 @@
+# wtperf options file: simulate riak and its test1 and test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=600)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K"
+icount=25000000
+key_sz=40
+value_sz=800
+max_latency=2000
+pareto=true
+populate_threads=20
+report_interval=10
+random_value=true
+run_time=1800
+sample_interval=10
+threads=((count=20,read=6,update=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/get_ckpt.py b/src/third_party/wiredtiger/bench/wtperf/runners/get_ckpt.py
new file mode 100755
index 00000000000..38688870e7f
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/get_ckpt.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+# Generate input data to GNUplot from checkpoint information in a wtperf run
+
+import sys
+
+time = 0 # seconds
+print "%d, %d" % (0, 0)
+
+for line in sys.stdin:
+ if line.strip().endswith('secs'):
+ time += int(line.split(' ')[7])
+ if line.startswith('Finished checkpoint'):
+ duration = (int(line.split(' ')[3]) + 500) / 1000 # convert ms to secs
+ print "%d, %d" % (time - duration, 1)
+ print "%d, %d" % (time, 0)
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/insert-rmw.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/insert-rmw.wtperf
new file mode 100644
index 00000000000..50db0baa0d1
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/insert-rmw.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: Test the insert-rmw functionality
+conn_config="cache_size=500MB"
+table_config="type=lsm"
+icount=500000
+insert_rmw=true
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=4,inserts=1),(count=2,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/large-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/large-lsm.wtperf
new file mode 100644
index 00000000000..4b41b3fc84a
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/large-lsm.wtperf
@@ -0,0 +1,11 @@
+# wtperf options file: large lsm configuration
+conn_config="cache_size=20G,mmap=false,lsm_manager=(worker_thread_max=8)"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+compact=true
+compression="snappy"
+icount=250000000
+report_interval=5
+run_time=1200
+populate_threads=1
+sample_interval=10
+threads=((count=16,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/long-txn-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/long-txn-btree.wtperf
new file mode 100644
index 00000000000..31f264b1536
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/long-txn-btree.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: run autocommit and long transactions in parallel.
+conn_config="cache_size=500MB"
+table_config="type=file"
+icount=5000000
+report_interval=5
+run_time=120
+populate_threads=1
+# Have a long running reader, throttled to a max of 5000 ops per second.
+threads=((count=4,reads=1,updates=1),(count=1,reads=1,ops_per_txn=100000,throttle=5000))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/long-txn-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/long-txn-lsm.wtperf
new file mode 100644
index 00000000000..cc5a6b77a17
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/long-txn-lsm.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: run autocommit and long transactions in parallel.
+conn_config="cache_size=500MB"
+table_config="lsm=(chunk_size=5MB),type=lsm,os_cache_dirty_max=16MB"
+icount=5000000
+report_interval=5
+run_time=120
+populate_threads=1
+# Have a long running reader, throttled to a max of 5000 ops per second.
+threads=((count=4,reads=1,updates=1),(count=1,reads=1,ops_per_txn=100000,throttle=5000))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/medium-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/medium-btree.wtperf
new file mode 100644
index 00000000000..92c63e73480
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/medium-btree.wtperf
@@ -0,0 +1,8 @@
+# wtperf options file: medium btree configuration
+conn_config="cache_size=1G"
+table_config="type=file"
+icount=50000000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=16,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-async.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-async.wtperf
new file mode 100644
index 00000000000..1d729bcee23
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-async.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: medium lsm configuration using async operations
+conn_config="cache_size=1G,lsm_manager=(worker_thread_max=6)"
+async_threads=10
+table_config="lsm=(chunk_size=100MB),type=lsm,os_cache_dirty_max=16MB"
+icount=50000000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=5,reads=1,updates=2))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-compact.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-compact.wtperf
new file mode 100644
index 00000000000..0d4a6f965d1
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm-compact.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: medium lsm configuration
+conn_config="cache_size=1G,lsm_manager=(worker_thread_max=6)"
+table_config="lsm=(chunk_size=100MB,chunk_max=1TB),type=lsm,os_cache_dirty_max=16MB"
+icount=50000000
+populate_threads=1
+compact=true
+threads=((count=16,read=1))
+run_time=120
+report_interval=5
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm.wtperf
new file mode 100644
index 00000000000..3e676dc0b70
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/medium-lsm.wtperf
@@ -0,0 +1,8 @@
+# wtperf options file: medium lsm configuration
+conn_config="cache_size=1G,lsm_manager=(worker_thread_max=6)"
+table_config="lsm=(chunk_size=100MB),type=lsm,os_cache_dirty_max=16MB"
+icount=50000000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=16,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm-noprefix.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm-noprefix.wtperf
new file mode 100644
index 00000000000..413c16075d3
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm-noprefix.wtperf
@@ -0,0 +1,10 @@
+# wtperf options file: medium lsm configuration, with multiple tables.
+conn_config="cache_size=1G,lsm_manager=(worker_thread_max=8)"
+table_config="lsm=(chunk_size=100MB,chunk_max=1TB),type=lsm,prefix_compression=false,os_cache_dirty_max=16MB"
+icount=50000000
+populate_threads=1
+compact=true
+threads=((count=8,read=1),(count=8,update=1))
+run_time=180
+report_interval=5
+table_count=4
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm.wtperf
new file mode 100644
index 00000000000..99b7b49aebd
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/medium-multi-lsm.wtperf
@@ -0,0 +1,10 @@
+# wtperf options file: medium lsm configuration, with multiple tables.
+conn_config="cache_size=1G,lsm_manager=(worker_thread_max=8)"
+table_config="lsm=(chunk_size=100MB,chunk_max=1TB),type=lsm,os_cache_dirty_max=16MB"
+icount=50000000
+populate_threads=1
+compact=true
+threads=((count=8,read=1),(count=8,update=1))
+run_time=180
+report_interval=5
+table_count=4
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/multi-btree-long.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/multi-btree-long.wtperf
new file mode 100644
index 00000000000..c5341f96c38
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/multi-btree-long.wtperf
@@ -0,0 +1,16 @@
+# A btree configuration with ten databases, each with a single reader and
+# single writer. Throttled to 4000 ops/second.
+# This configuration is set to run for 10 hours.
+conn_config="cache_size=100MB,log=(enabled=false)"
+database_count=10
+table_config="leaf_page_max=4k,internal_page_max=16k,leaf_item_max=1433,internal_item_max=3100,type=file"
+icount=50000
+populate_threads=1
+random_range=10000000
+checkpoint_interval=120
+checkpoint_threads=1
+report_interval=5
+run_time=36000
+threads=((count=1,throttle=1000,reads=1),(count=1,throttle=1000,inserts=1))
+value_sz=100
+warmup=10
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/multi-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/multi-btree.wtperf
new file mode 100644
index 00000000000..e316dda9e88
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/multi-btree.wtperf
@@ -0,0 +1,17 @@
+# wtperf options file: small btree multi-database configuration
+# Original cache was 500MB. Shared cache is 500MB * database_count.
+conn_config="shared_cache=(name=pool,size=2500MB,chunk=1M),log=(enabled=false)"
+#conn_config="cache_size=250MB,log=(enabled=false)"
+database_count=10
+table_config="leaf_page_max=4k,internal_page_max=16k,leaf_item_max=1433,internal_item_max=3100,type=file"
+# Likewise, divide original icount by database_count.
+icount=50000
+populate_threads=1
+random_range=100000000
+checkpoint_interval=20
+checkpoint_threads=1
+report_interval=5
+run_time=20
+threads=((count=2,reads=1),(count=2,inserts=1))
+value_sz=100
+warmup=10
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-btree.wtperf
new file mode 100644
index 00000000000..5ec5c84e551
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-btree.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: Run populate thread multi-threaded and with groups
+# of operations in each transaction.
+conn_config="cache_size=200MB"
+table_config="type=file"
+transaction_config="isolation=snapshot"
+icount=10000000
+report_interval=5
+populate_ops_per_txn=100
+populate_threads=5
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-lsm.wtperf
new file mode 100644
index 00000000000..41309fd07de
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/parallel-pop-lsm.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: Run populate thread multi-threaded and with groups
+# of operations in each transaction.
+conn_config="cache_size=200MB"
+table_config="type=lsm,os_cache_dirty_max=16MB"
+transaction_config="isolation=snapshot"
+icount=10000000
+report_interval=5
+populate_ops_per_txn=100
+populate_threads=5
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/shared-cache-stress.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/shared-cache-stress.wtperf
new file mode 100644
index 00000000000..87d14f4f5c1
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/shared-cache-stress.wtperf
@@ -0,0 +1,12 @@
+# Stress out the shared cache.
+conn_config="statistics=(none),shared_cache=(name=wt-cache,size=536870912,reserve=10MB,chunk=20MB,)"
+table_config="allocation_size=4KB,key_gap=10,split_pct=75,internal_page_max=4KB,internal_key_truncate=false,prefix_compression=false,leaf_item_max=1433,type=file,internal_item_max=1433,exclusive=true,leaf_page_max=4KB,block_compressor=,"
+checkpoint_interval=100
+checkpoint_threads=1
+icount=50000
+random_range=500000
+report_interval=5
+run_time=600
+populate_threads=1
+threads=((count=1,inserts=1),(count=1,reads=1))
+database_count=25
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/small-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/small-btree.wtperf
new file mode 100644
index 00000000000..5defd413fa6
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/small-btree.wtperf
@@ -0,0 +1,8 @@
+# wtperf options file: small btree configuration
+conn_config="cache_size=500MB"
+table_config="type=file"
+icount=500000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=8,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/small-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/small-lsm.wtperf
new file mode 100644
index 00000000000..1b00d18d76b
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/small-lsm.wtperf
@@ -0,0 +1,8 @@
+# wtperf options file: small lsm configuration
+conn_config="cache_size=500MB"
+table_config="lsm=(chunk_size=5MB),type=lsm,os_cache_dirty_max=16MB"
+icount=500000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=8,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test1-1b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test1-1b-lsm.wtperf
new file mode 100644
index 00000000000..662a286970c
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test1-1b-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test1 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=1000000000
+key_sz=40
+value_sz=1000
+max_latency=2000
+populate_threads=20
+report_interval=10
+random_value=true
+sample_interval=10
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test1-2b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test1-2b-lsm.wtperf
new file mode 100644
index 00000000000..2a3923e62ab
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test1-2b-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test1 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=20GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=2000000000
+key_sz=40
+value_sz=1000
+max_latency=2000
+populate_threads=20
+report_interval=10
+random_value=true
+sample_interval=10
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test1-500m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test1-500m-lsm.wtperf
new file mode 100644
index 00000000000..91c7858a605
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test1-500m-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test1 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=500000000
+key_sz=40
+value_sz=1000
+max_latency=2000
+populate_threads=20
+report_interval=10
+random_value=true
+sample_interval=10
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test1-50m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test1-50m-lsm.wtperf
new file mode 100644
index 00000000000..229455d62a1
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test1-50m-lsm.wtperf
@@ -0,0 +1,17 @@
+# wtperf options file: simulate riak and its test1 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=30),lsm_manager=(worker_thread_max=6)"
+conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=50000000
+key_sz=40
+value_sz=1000
+max_latency=2000
+populate_threads=10
+report_interval=10
+random_value=true
+sample_interval=10
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test2-1b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test2-1b-lsm.wtperf
new file mode 100644
index 00000000000..42452092dfc
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test2-1b-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compression="snappy"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=14400
+sample_interval=10
+threads=((count=20,reads=4,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test2-2b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test2-2b-lsm.wtperf
new file mode 100644
index 00000000000..7fc1155bcb2
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test2-2b-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compression="snappy"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=20GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=14400
+sample_interval=10
+threads=((count=20,reads=4,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test2-500m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test2-500m-lsm.wtperf
new file mode 100644
index 00000000000..c03f5041a4d
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test2-500m-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+create=false
+compression="snappy"
+sess_config="isolation=snapshot
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=14400
+sample_interval=10
+threads=((count=20,reads=4,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test2-50m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test2-50m-lsm.wtperf
new file mode 100644
index 00000000000..51a06d84222
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test2-50m-lsm.wtperf
@@ -0,0 +1,17 @@
+# wtperf options file: simulate riak and its test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=30)"
+conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=1440
+sample_interval=10
+threads=((count=10,reads=4,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test3-1b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test3-1b-lsm.wtperf
new file mode 100644
index 00000000000..113b79bc9f9
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test3-1b-lsm.wtperf
@@ -0,0 +1,20 @@
+# wtperf options file: simulate riak and its test3 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=8)"
+compression="snappy"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+pareto=true
+report_interval=10
+run_time=14400
+sample_interval=10
+#threads=((count=20,reads=1,updates=1))
+threads=((count=10,reads=1),(count=10,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test3-2b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test3-2b-lsm.wtperf
new file mode 100644
index 00000000000..574cf54b109
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test3-2b-lsm.wtperf
@@ -0,0 +1,20 @@
+# wtperf options file: simulate riak and its test3 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=8)"
+compression="snappy"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=20GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+pareto=true
+report_interval=10
+run_time=14400
+sample_interval=10
+#threads=((count=20,reads=1,updates=1))
+threads=((count=10,reads=1),(count=10,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test3-500m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test3-500m-lsm.wtperf
new file mode 100644
index 00000000000..307d92b6db6
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test3-500m-lsm.wtperf
@@ -0,0 +1,20 @@
+# wtperf options file: simulate riak and its test3 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=8)"
+create=false
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+pareto=true
+report_interval=10
+run_time=14400
+sample_interval=10
+#threads=((count=20,reads=1,updates=1))
+threads=((count=10,reads=1),(count=10,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test3-50m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test3-50m-lsm.wtperf
new file mode 100644
index 00000000000..278b1ce3872
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test3-50m-lsm.wtperf
@@ -0,0 +1,19 @@
+# wtperf options file: simulate riak and its test3 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=30)"
+conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+pareto=true
+report_interval=10
+run_time=1440
+sample_interval=10
+#threads=((count=10,reads=1,updates=1))
+threads=((count=5,reads=1),(count=5,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test4-1b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test4-1b-lsm.wtperf
new file mode 100644
index 00000000000..8ff3cadbe59
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test4-1b-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test4 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compression="snappy"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=14400
+sample_interval=10
+threads=((count=20,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test4-2b-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test4-2b-lsm.wtperf
new file mode 100644
index 00000000000..d8f02872feb
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test4-2b-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test4 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compression="snappy"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=20GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=14400
+sample_interval=10
+threads=((count=20,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test4-500m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test4-500m-lsm.wtperf
new file mode 100644
index 00000000000..19e6f84c9dc
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test4-500m-lsm.wtperf
@@ -0,0 +1,18 @@
+# wtperf options file: simulate riak and its test4 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=60)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+create=false
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_max=5GB,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=14400
+sample_interval=10
+threads=((count=20,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/test4-50m-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/test4-50m-lsm.wtperf
new file mode 100644
index 00000000000..f716a97943f
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/test4-50m-lsm.wtperf
@@ -0,0 +1,17 @@
+# wtperf options file: simulate riak and its test4 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+# This test assumes that a test1 populate already completed and exists.
+#
+#conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=30)"
+conn_config="cache_size=10G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+create=false
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+key_sz=40
+value_sz=1000
+max_latency=2000
+report_interval=10
+run_time=1440
+sample_interval=10
+threads=((count=10,reads=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/update-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/update-btree.wtperf
new file mode 100644
index 00000000000..efd6cc8b028
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/update-btree.wtperf
@@ -0,0 +1,8 @@
+# wtperf options file: btree with inserts/updates, in memory
+conn_config="cache_size=1G"
+table_config="type=file"
+icount=5000000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=2,inserts=1),(count=2,reads=1),(count=2,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-btree.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-btree.wtperf
new file mode 100644
index 00000000000..a2e4caab159
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-btree.wtperf
@@ -0,0 +1,12 @@
+# wtperf options file: btree with inserts/updates and checkpointing, in memory
+# Note: The cache needs to be sized to approximate the amount of inserts
+# that will happen during the given run_time.
+conn_config="cache_size=25G"
+table_config="type=file"
+icount=5000000
+report_interval=5
+checkpoint_threads=1
+checkpoint_interval=10
+run_time=300
+populate_threads=1
+threads=((count=1,inserts=1),(count=2,reads=1),(count=2,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-lsm.wtperf
new file mode 100644
index 00000000000..ebd95db910f
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/update-checkpoint-lsm.wtperf
@@ -0,0 +1,12 @@
+# wtperf options file: lsm with inserts/updates and checkpointing, in memory
+# Note: The cache needs to be sized to approximate the amount of inserts
+# that will happen during the given run_time.
+conn_config="cache_size=25G"
+table_config="lsm=(chunk_size=20MB),type=lsm,os_cache_dirty_max=16MB"
+icount=5000000
+report_interval=5
+checkpoint_threads=1
+checkpoint_interval=10
+run_time=300
+populate_threads=1
+threads=((count=1,inserts=1),(count=2,reads=1),(count=2,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/update-large-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/update-large-lsm.wtperf
new file mode 100644
index 00000000000..c3e468ec540
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/update-large-lsm.wtperf
@@ -0,0 +1,9 @@
+# wtperf options file: lsm with inserts/updates, in memory
+conn_config="cache_size=2G,lsm_manager=(worker_thread_max=6)"
+table_config="lsm=(chunk_size=50MB),type=lsm,os_cache_dirty_max=16MB"
+icount=200000000
+report_interval=5
+run_time=1200
+populate_threads=10
+compact=true
+threads=((count=2,inserts=1),(count=10,reads=1),(count=2,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/update-lsm.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/update-lsm.wtperf
new file mode 100644
index 00000000000..52c4fb0192a
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/update-lsm.wtperf
@@ -0,0 +1,8 @@
+# wtperf options file: lsm with inserts/updates, in memory
+conn_config="cache_size=1G,lsm_manager=(worker_thread_max=6)"
+table_config="lsm=(chunk_size=20MB),type=lsm,os_cache_dirty_max=16MB"
+icount=5000000
+report_interval=5
+run_time=120
+populate_threads=1
+threads=((count=2,inserts=1),(count=2,reads=1),(count=2,updates=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k-short.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k-short.wtperf
new file mode 100644
index 00000000000..47228079db8
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k-short.wtperf
@@ -0,0 +1,19 @@
+# wtperf options file: simulate riak and a short form of its voxer config.
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=600)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=15000
+key_sz=40
+value_sz=10000
+max_latency=2000
+populate_threads=1
+report_interval=5
+random_value=true
+run_time=300
+threads=((count=10,read=1),(count=10,update=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k.wtperf
new file mode 100644
index 00000000000..9b4ed2acaee
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-10k.wtperf
@@ -0,0 +1,20 @@
+# wtperf options file: simulate riak and its test1 and test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=600)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=15000
+key_sz=40
+value_sz=10000
+max_latency=2000
+populate_threads=1
+report_interval=10
+random_value=true
+run_time=18000
+sample_interval=10
+threads=((count=20,read=1,update=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k-short.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k-short.wtperf
new file mode 100644
index 00000000000..83f67062bf8
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k-short.wtperf
@@ -0,0 +1,19 @@
+# wtperf options file: simulate riak and a short form of its voxer config.
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=600)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=15000
+key_sz=40
+value_sz=130000
+max_latency=2000
+populate_threads=1
+report_interval=5
+random_value=true
+run_time=300
+threads=((count=10,read=1),(count=10,update=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k.wtperf b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k.wtperf
new file mode 100644
index 00000000000..a3439f0c575
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/voxer-130k.wtperf
@@ -0,0 +1,20 @@
+# wtperf options file: simulate riak and its test1 and test2 configuration
+# The configuration for the connection and table are from riak and the
+# specification of the data (count, size, threads) is from basho_bench.
+#
+#conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,statistics=(fast,clear),statistics_log=(wait=600)"
+conn_config="cache_size=21G,checkpoint_sync=false,mmap=false,session_max=1024,lsm_manager=(worker_thread_max=6)"
+compact=true
+compression="snappy"
+sess_config="isolation=snapshot"
+table_config="internal_page_max=128K,lsm=(bloom_config=(leaf_page_max=8MB),bloom_bit_count=28,bloom_hash_count=19,bloom_oldest=true,chunk_size=100MB),type=lsm,leaf_page_max=16K,os_cache_dirty_max=16MB"
+icount=15000
+key_sz=40
+value_sz=130000
+max_latency=2000
+populate_threads=1
+report_interval=10
+random_value=true
+run_time=18000
+sample_interval=10
+threads=((count=20,read=1,update=1))
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_ckpt.sh b/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_ckpt.sh
new file mode 100755
index 00000000000..c8993bfc1ba
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_ckpt.sh
@@ -0,0 +1,136 @@
+#!/bin/bash
+
+# A script for running the wtperf benchmark to analyze the performance
+# of checkpoint operations.
+
+# General configuration settings:
+BIN_DIR='.'
+ROOT_DIR=`/bin/pwd`
+SCRIPT_DIR=`dirname $0`
+RUNTIME=900
+REUSE=0
+VERBOSE=0
+WORKLOAD=0 # skip the populate phase.
+PERF_BASE="-M"
+OPTFILE=''
+DEBUG=
+GDB=${GDB:-gdb}
+
+USAGE="Usage: `basename $0` [-hdRWsv] [-b binary dir] [-r root dir] [-O optfile]"
+
+# Parse command line options.
+while getopts b:dhO:RWr:sv OPT; do
+ case "$OPT" in
+ b)
+ BIN_DIR=$OPTARG
+ ;;
+ d)
+ export TERM=dtterm
+ DEBUG="$GDB --args"
+ ;;
+ h)
+ echo $USAGE
+ exit 0
+ ;;
+ O)
+ OPTFILE=-O$OPTARG
+ PERF_BASE=""
+ ;;
+ R)
+ REUSE=1
+ ;;
+ r)
+ ROOT_DIR=$OPTARG
+ ;;
+ s)
+ RUNTIME=20
+ PERF_BASE="-S"
+ ;;
+ v)
+ VERBOSE=0
+ ;;
+ W)
+ WORKLOAD=1
+ REUSE=1 # skip the populate phase.
+ ;;
+ \?)
+ # getopts issues an error message
+ echo $USAGE >&2
+ exit 1
+ ;;
+ esac
+done
+
+# Configuration settings that may be altered by command line options
+WTPERF=${BIN_DIR}/wtperf
+if [ ! -x $WTPERF ]; then
+ echo "Could not find or execute $WTPERF"
+ exit 1
+fi
+
+DB_HOME="$ROOT_DIR/WT_TEST"
+OUT_DIR="$ROOT_DIR/results"
+SHARED_OPTS="${OPTFILE} ${PERF_BASE} -o read_threads=1,update_threads=1,report_interval=1,uri=\"table:test\" -o verbose=1 -h ${DB_HOME}"
+CREATE_OPTS="$SHARED_OPTS -o run_time=0"
+RUN_OPTS="$SHARED_OPTS -o run_time=$RUNTIME"
+if [ $WORKLOAD -eq 0 ]; then
+ RUN_OPTS="$RUN_OPTS -o create=false"
+else
+ RUN_OPTS="$RUN_OPTS -o icount=0"
+fi
+
+if [ $REUSE -eq 0 ]; then
+ if [ $VERBOSE -ne 0 ]; then
+ echo "Creating database and archiving it for reuse."
+ fi
+ rm -rf $DB_HOME && mkdir $DB_HOME
+ $DEBUG $WTPERF $CREATE_OPTS || exit 1
+
+ # Save the database so that it can be re-used by all runs.
+ # I'd rather not hard code WT_TEST, but need to get the path right.
+ rm -f $ROOT_DIR/WT_TEST.tgz
+ tar zcf $ROOT_DIR/WT_TEST.tgz -C $ROOT_DIR WT_TEST
+fi
+
+rm -rf $OUT_DIR && mkdir $OUT_DIR
+
+# Run the benchmarks..
+# for ckpt in "" "-c 120"; do
+for ckpt in "checkpoint_threads=1,checkpoint_interval=120"; do
+ # for opts in "" "-C eviction_dirty_target=20"; do
+ for opts in ""; do
+ if [ $VERBOSE -ne 0 ]; then
+ echo "Doing a run with:"
+ echo "\t$WTPERF $RUN_OPTS $ckpt $opts"
+ fi
+ res_name="run_${ckpt},${opts}"
+ res_name=`echo $res_name | tr '[:upper:][=\- ,]' '[:lower:]_'`
+ if [ $WORKLOAD -eq 0 ]; then
+ rm -rf $DB_HOME && tar zxf $ROOT_DIR/WT_TEST.tgz -C $ROOT_DIR
+ else
+ rm -rf $DB_HOME && mkdir $DB_HOME
+ fi
+ if [ "$DEBUG" = '' ]; then
+ $WTPERF $RUN_OPTS -o "$ckpt" -o "$opts" &
+ pid=$!
+ t=0
+ while kill -0 $pid 2> /dev/null; do
+ echo "Time $t"
+ pmp $pid
+ sleep 1
+ (( t++ ))
+ done > $OUT_DIR/${res_name}.trace
+ else
+ $DEBUG $WTPERF $RUN_OPTS $ckpt $opts
+ fi
+ cp $DB_HOME/test.stat "$OUT_DIR/${res_name}.res"
+ done
+done
+
+if [ $VERBOSE -ne 0 ]; then
+ echo "Post processing result files."
+fi
+for f in ${OUT_DIR}/*res; do
+ grep "^[0-9]* reads" ${f} | sed -e 's/ reads//' -e 's/ inserts//' -e 's/ updates in 1 secs//' > ${f}.out
+ ${SCRIPT_DIR}/get_ckpt.py < ${f} > ${f}.ckpt
+done
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_run.sh b/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_run.sh
new file mode 100755
index 00000000000..3296a4072b5
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_run.sh
@@ -0,0 +1,168 @@
+#!/bin/sh
+
+# wtperf_run.sh - run wtperf regression tests on the Jenkins platform.
+#
+# The Jenkins machines show variability so we run this script to run
+# each wtperf test several times. We throw away the min and max
+# number and average the remaining values. That is the number we
+# give to Jenkins for plotting. We write these values to a
+# test.average file in the current directory (which is
+# build_posix/bench/wtperf).
+#
+# This script should be invoked with the pathname of the wtperf test
+# config to run.
+#
+if test "$#" -ne "1"; then
+ echo "Must specify wtperf test to run"
+ exit 1
+fi
+wttest=$1
+home=./WT_TEST
+outfile=./wtperf.out
+rm -f $outfile
+runmax=5
+run=1
+
+avg=(0 0 0)
+max=(0 0 0)
+min=(0 0 0)
+sum=(0 0 0)
+# Load needs floating point and bc, handle separately.
+loadindex=4
+avg[$loadindex]=0
+max[$loadindex]=0
+min[$loadindex]=0
+sum[$loadindex]=0
+ops=(read insert update)
+outp=("Read count:" "Insert count:" "Update count:")
+outp[$loadindex]="Load time:"
+
+# getval min/max val cur
+# Returns the minimum or maximum of val and cur.
+# min == 0, max == 1.
+getval()
+{
+ max="$1"
+ val="$2"
+ cur="$3"
+ ret=$cur
+ echo "getval: max $max val $val cur $cur" >> $outfile
+ if test "$max" -eq "1"; then
+ if test "$val" -gt "$cur"; then
+ ret=$val
+ fi
+ elif test "$val" -lt "$cur"; then
+ ret=$val
+ fi
+ echo "$ret"
+}
+
+isstable()
+{
+ min="$1"
+ max="$2"
+ tmp=`echo "scale=3; $min * 1.03" | bc`
+ if (($(bc <<< "$tmp < $max") )); then
+ ret=0
+ else
+ ret=1
+ fi
+ echo "$ret"
+}
+
+getmin=0
+getmax=1
+while test "$run" -le "$runmax"; do
+ rm -rf $home
+ mkdir $home
+ LD_PRELOAD=/usr/lib64/libjemalloc.so.1 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ./wtperf -O $wttest
+ if test "$?" -ne "0"; then
+ exit 1
+ fi
+ # Load is always using floating point, so handle separately
+ l=`grep "^Load time:" ./WT_TEST/test.stat`
+ if test "$?" -eq "0"; then
+ load=`echo $l | cut -d ' ' -f 3`
+ else
+ load=0
+ fi
+ cur[$loadindex]=$load
+ sum[$loadindex]=`echo "${sum[$loadindex]} + $load" | bc`
+ echo "cur ${cur[$loadindex]} sum ${sum[$loadindex]}" >> $outfile
+ for i in ${!ops[*]}; do
+ l=`grep "Executed.*${ops[$i]} operations" ./WT_TEST/test.stat`
+ if test "$?" -eq "0"; then
+ n=`echo $l | cut -d ' ' -f 2`
+ else
+ n=0
+ fi
+ cur[$i]=$n
+ sum[$i]=`expr $n + ${sum[$i]}`
+ done
+ #
+ # Keep running track of min and max for each operation type.
+ #
+ if test "$run" -eq "1"; then
+ for i in ${!cur[*]}; do
+ min[$i]=${cur[$i]}
+ max[$i]=${cur[$i]}
+ done
+ else
+ for i in ${!cur[*]}; do
+ if test "$i" -eq "$loadindex"; then
+ if (($(bc <<< "${cur[$i]} < ${min[$i]}") )); then
+ min[$i]=${cur[$i]}
+ fi
+ if (($(bc <<< "${cur[$i]} > ${max[$i]}") )); then
+ max[$i]=${cur[$i]}
+ fi
+ else
+ min[$i]=$(getval $getmin ${cur[$i]} ${min[$i]})
+ max[$i]=$(getval $getmax ${cur[$i]} ${max[$i]})
+ fi
+ done
+ fi
+ #
+ # After 3 runs see if this is a very stable test. If so, we
+ # can skip the last 2 runs and just use these values. We
+ # define "very stable" to be that the min and max are within
+ # 3% of each other.
+ if test "$run" -eq "3"; then
+ # Only if all values are stable, we can break.
+ unstable=0
+ for i in ${!min[*]}; do
+ stable=$(isstable ${min[$i]} ${max[$i]})
+ if test "$stable" -eq "0"; then
+ unstable=1
+ break
+ fi
+ done
+ if test "$unstable" -eq "0"; then
+ break
+ fi
+ fi
+ run=`expr $run + 1`
+done
+
+if test "$run" -le "$runmax"; then
+ numruns=`expr $run - 2`
+else
+ numruns=`expr $runmax - 2`
+fi
+#
+# The sum contains all runs. Subtract out the min/max values.
+# Average the remaining and write it out to the file.
+#
+for i in ${!min[*]}; do
+ if test "$i" -eq "$loadindex"; then
+ s=`echo "scale=3; ${sum[$i]} - ${min[$i]} - ${max[$i]}" | bc`
+ avg[$i]=`echo "scale=3; $s / $numruns" | bc`
+ else
+ s=`expr ${sum[$i]} - ${min[$i]} - ${max[$i]}`
+ avg[$i]=`expr $s / $numruns`
+ fi
+done
+for i in ${!outp[*]}; do
+ echo "${outp[$i]} ${avg[$i]}" >> $outfile
+done
+exit 0
diff --git a/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_track.sh b/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_track.sh
new file mode 100644
index 00000000000..db92cb95931
--- /dev/null
+++ b/src/third_party/wiredtiger/bench/wtperf/runners/wtperf_track.sh
@@ -0,0 +1,204 @@
+#!/bin/bash
+
+# wtperf_track.sh - track performance regression trends on the Jenkins platform.
+#
+# This is run after a performance build, with a count or time value.
+# wtperf_track.sh -t [ -p percent ] name time_value
+# wtperf_track.sh -c [ -p percent ] name count_value
+#
+# The values are kept in a .csv file (see $TRACK_FILE) stored under
+# the userContent directory (see $STATE_DIR), which is served as
+# visible files by Jenkins. The .csv contains fields: buildid,
+# curtime, value, loadavg, diskavg.
+#
+# Since our Jenkins hosts have some variability to their load level,
+# we allow some 'resiliance' in the regression checking. To this end,
+# we calculate 3 values:
+#
+# v3: The 'best' of the most recent 3 values, where 'best' is
+# lowest for a time value and highest for a count.
+#
+# v20: The average of the best 10 of the last 20 values.
+#
+# v100: The average of the best 50 of the last 100 values.
+#
+# If v3 is more then p% worse than v20, or if v20 is more than p% worse
+# than v100, we issue a warning. The default value of p is 5, and
+# is set with the -p option.
+#
+# We expect that the Jenkins job is configured to capture the WARNING
+# output, in order to send mail or mark the build as unstable.
+
+JENKINS_HOME=${JENKINS_HOME:?"Must be run on the Jenkins platform"}
+JOB_NAME=${JOB_NAME:?"Must be run on the Jenkins platform"}
+BUILD_ID=${BUILD_ID:?"Must be run on the Jenkins platform"}
+
+STATE_DIR="/home/jenkins/wtperf_track"
+TYPE=unknown # set to 'time' or 'count' depending on -t/-c option
+NAME= # the command line name
+VALUE= # the command line value
+
+Usage()
+{
+ cat >&2 <<EOF
+Usage: wtperf_track.sh -t [ options ] name time_value
+ wtperf_track.sh -c [ options ] name count_value
+
+name is the name of this metric (e.g. "load_time")
+value is an integer or float value
+
+Options:
+ -t: value is a time value, lower numbers are better
+ -c: value is a count value, higher numbers are better
+ -p pct: require short term avgs to be witnin 'pct' percent of long term avgs
+
+One of the -t and -c options is required.
+EOF
+}
+
+# GetValues n filename
+# gets the last n values from a .csv file
+GetValues()
+{
+ cut -f 3 -d , "$2" | sed -e '1d' -e 's/"//g' | tail -"$1"
+}
+
+# MinValues n direction
+# Given a list of values on input,
+# removes all but n smallest (if direction is >0) or
+# n largest if (direction is <0)
+MinValues()
+{
+ rflag=-r
+ if [ "$2" -gt 0 ]; then
+ rflag=
+ fi
+ sort -g $rflag | tail -$1
+}
+
+# AvgValues
+# Given a list of values on input,
+# returns the average.
+AvgValues()
+{
+ VALUES=$(tr '\n' ' ' | sed -e 's/^ *//' -e 's/ *$//' -e 's/ */ /')
+ n=$(echo "$VALUES" | wc -w)
+ echo "$VALUES" | sed -e 's/ /+/g' -e 's/^/scale=3;(/' -e "s:\$:)/$n:"| bc
+}
+
+# CheckValues sval lval direction pct desc
+# Given two values 'sval', 'lval', make sure that sval is no more
+# than 'pct' percent less that lval (if direction is >0) or that
+# sval is no more than 'ct' percent greater than lval (if direction <0)
+# Returns 0 for normal, 1 for out of range
+CheckValues()
+{
+ sval="$1"
+ lval="$2"
+ direction="$3"
+ pct="$4"
+ desc="$5"
+ if [ "$direction" -gt 0 ]; then
+ expr="($sval * (1.00 + $pct / 100.00)) - $lval"
+ else
+ expr="($lval * (1.00 + $pct / 100.00)) - $sval"
+ fi
+ result=$(echo "scale=3; $expr" | bc)
+ # bc error?
+ if [ $? != 0 ]; then
+ return 1
+ fi
+ if [ "$(echo $result | grep '^-')" != '' ]; then
+ echo "$desc: WARNING: $type $sval not within $pct% of $lval (curval=$VALUE)" >&2
+ return 1
+ fi
+ return 0
+}
+
+GetCpuLoadAverage()
+{
+ uptime | sed -e 's/.*: *//' -e 's/ .*//'
+}
+
+GetDiskLoadAverage()
+{
+ DEVICE=$(df "$1" | grep /dev | head -1 | sed -e 's:.*\(/dev/[^ ]*\).*:\1/:')
+ case `uname -s` in
+ *Linux* )
+ # iostat -d $DEVICE | grep -v Device: | head -1 | sed -e 's/.* //'
+ echo '0.0'
+ ;;
+ * )
+ echo '0.0'
+ ;;
+ esac
+}
+
+direction=0
+pct=5
+while getopts tcp: OPT; do
+ case "$OPT" in
+ t)
+ direction=-1
+ type=time
+ ;;
+ c)
+ direction=1
+ type=count
+ ;;
+ p)
+ pct=$OPTARG
+ ;;
+ *)
+ # getopts issues an error message
+ Usage
+ exit 1
+ ;;
+ esac
+done
+
+shift $((OPTIND-1))
+if [ "$#" != 2 ]; then
+ echo "Missing name/value" >&2
+ Usage
+ exit 1
+fi
+NAME="$1"
+VALUE="$2"
+
+if [ "$direction" = 0 ]; then
+ echo "Missing -t or -c option" >&2
+ Usage
+ exit 1
+fi
+
+TRACK_FILE="${STATE_DIR}/${JOB_NAME}.${NAME}.csv"
+
+mkdir -p "${STATE_DIR}" || exit 1
+if [ ! -f "${TRACK_FILE}" ]; then
+ echo '"buildid","time","value","loadavg","diskavg"' \
+ > ${TRACK_FILE} || exit 1
+fi
+TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
+LOAD_AVG=$(GetCpuLoadAverage)
+DISK_AVG=$(GetDiskLoadAverage .)
+echo "${BUILD_ID},${TIME},${VALUE},${LOAD_AVG},${DISK_AVG}" \
+ >> ${TRACK_FILE} || exit 1
+
+v3=$(GetValues 3 ${TRACK_FILE} | MinValues 1 $direction)
+v20=$(GetValues 20 ${TRACK_FILE} | MinValues 10 $direction | AvgValues)
+v100=$(GetValues 100 ${TRACK_FILE} | MinValues 50 $direction | AvgValues)
+
+v3=${v3:?"Internal error: v3 not set"}
+v20=${v20:?"Internal error: v20 not set"}
+v100=${v100:?"Internal error: v100 not set"}
+
+ecode=0
+prefix="$JOB_NAME: build #$BUILD_ID"
+echo "$prefix: curval=$VALUE v3=$v3 v20=$v20 v100=$v100 pct=$pct"
+CheckValues $v3 $v20 $direction $pct "$prefix: short term trend" || ecode=1
+CheckValues $v20 $v100 $direction $pct "$prefix: long term trend" || ecode=1
+# Rather than a failure exit for a trend out of range,
+# Jenkins can capture the WARNING output, send email and mark
+# a build as unstable.
+#exit $ecode