summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSusan LoVerso <sue@mongodb.com>2016-02-17 13:51:14 -0500
committerSusan LoVerso <sue@mongodb.com>2016-02-17 13:51:14 -0500
commitaf2bf588eaaa918c5c4051baff9e5daf20819f08 (patch)
tree2038787d7de72fd5f93c960392c82c325fff0be1
parentb89f959f289446915935be72f8f3887658470b5d (diff)
downloadmongo-af2bf588eaaa918c5c4051baff9e5daf20819f08.tar.gz
WT-2349 Add a 'readonly' option to wtperf.
-rw-r--r--bench/wtperf/config.c14
-rw-r--r--bench/wtperf/runners/evict-btree-readonly.wtperf12
-rw-r--r--bench/wtperf/runners/evict-lsm-readonly.wtperf13
-rw-r--r--bench/wtperf/wtperf.c21
-rw-r--r--bench/wtperf/wtperf.h2
-rw-r--r--bench/wtperf/wtperf_opt.i4
-rw-r--r--src/docs/wtperf.dox4
7 files changed, 68 insertions, 2 deletions
diff --git a/bench/wtperf/config.c b/bench/wtperf/config.c
index 3cb20ff2b26..89069a170d8 100644
--- a/bench/wtperf/config.c
+++ b/bench/wtperf/config.c
@@ -634,6 +634,9 @@ config_opt_str(CONFIG *cfg, const char *name, const char *value)
int
config_sanity(CONFIG *cfg)
{
+ WORKLOAD *workp;
+ u_int i;
+
/* Various intervals should be less than the run-time. */
if (cfg->run_time > 0 &&
((cfg->checkpoint_threads != 0 &&
@@ -660,6 +663,17 @@ config_sanity(CONFIG *cfg)
"Invalid pareto distribution - should be a percentage\n");
return (EINVAL);
}
+
+ if (cfg->readonly && cfg->workload != NULL)
+ for (i = 0, workp = cfg->workload;
+ i < cfg->workload_cnt; ++i, ++workp)
+ if (workp->insert != 0 || workp->update != 0 ||
+ workp->truncate != 0) {
+ fprintf(stderr,
+ "Invalid workload: insert, update or "
+ "truncate specified with readonly\n");
+ return (EINVAL);
+ }
return (0);
}
diff --git a/bench/wtperf/runners/evict-btree-readonly.wtperf b/bench/wtperf/runners/evict-btree-readonly.wtperf
new file mode 100644
index 00000000000..d79af2b762b
--- /dev/null
+++ b/bench/wtperf/runners/evict-btree-readonly.wtperf
@@ -0,0 +1,12 @@
+# 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
+readonly=true
+threads=((count=16,reads=1))
+# Add throughput/latency monitoring
+max_latency=2000
+sample_interval=5
diff --git a/bench/wtperf/runners/evict-lsm-readonly.wtperf b/bench/wtperf/runners/evict-lsm-readonly.wtperf
new file mode 100644
index 00000000000..fe45c0e93b6
--- /dev/null
+++ b/bench/wtperf/runners/evict-lsm-readonly.wtperf
@@ -0,0 +1,13 @@
+# wtperf options file: evict lsm configuration
+conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6)"
+table_config="type=lsm,lsm=(chunk_size=2M),os_cache_dirty_max=16MB"
+compact=true
+icount=10000000
+report_interval=5
+run_time=120
+populate_threads=1
+readonly=true
+threads=((count=16,reads=1))
+# Add throughput/latency monitoring
+max_latency=2000
+sample_interval=5
diff --git a/bench/wtperf/wtperf.c b/bench/wtperf/wtperf.c
index b2e68198e9a..c5c2d294708 100644
--- a/bench/wtperf/wtperf.c
+++ b/bench/wtperf/wtperf.c
@@ -33,6 +33,7 @@ static const CONFIG default_cfg = {
"WT_TEST", /* home */
"WT_TEST", /* monitor dir */
NULL, /* partial logging */
+ NULL, /* reopen config */
NULL, /* base_uri */
NULL, /* uris */
NULL, /* helium_mount */
@@ -1517,7 +1518,7 @@ close_reopen(CONFIG *cfg)
{
int ret;
- if (!cfg->reopen_connection)
+ if (!cfg->readonly && !cfg->reopen_connection)
return (0);
/*
* Reopen the connection. We do this so that the workload phase always
@@ -1533,7 +1534,7 @@ close_reopen(CONFIG *cfg)
return (ret);
}
if ((ret = wiredtiger_open(
- cfg->home, NULL, cfg->conn_config, &cfg->conn)) != 0) {
+ cfg->home, NULL, cfg->reopen_config, &cfg->conn)) != 0) {
lprintf(cfg, ret, 0, "Re-opening the connection failed");
return (ret);
}
@@ -2300,6 +2301,22 @@ main(int argc, char *argv[])
snprintf((char *)cfg->partial_config, req_len, "%s%s",
(char *)cfg->table_config, LOG_PARTIAL_CONFIG);
}
+ /*
+ * Set the config for reopen. If readonly add in that string.
+ * If not readonly then just copy the original conn_config.
+ */
+ if (cfg->readonly)
+ req_len = strlen(cfg->conn_config) +
+ strlen(READONLY_CONFIG) + 1;
+ else
+ req_len = strlen(cfg->conn_config) + 1;
+ cfg->reopen_config = dcalloc(req_len, 1);
+ if (cfg->readonly)
+ snprintf((char *)cfg->reopen_config, req_len, "%s%s",
+ (char *)cfg->conn_config, READONLY_CONFIG);
+ else
+ snprintf((char *)cfg->reopen_config, req_len, "%s",
+ (char *)cfg->conn_config);
/* Sanity-check the configuration. */
if ((ret = config_sanity(cfg)) != 0)
diff --git a/bench/wtperf/wtperf.h b/bench/wtperf/wtperf.h
index 929880b0aef..0b0fb88a99c 100644
--- a/bench/wtperf/wtperf.h
+++ b/bench/wtperf/wtperf.h
@@ -138,6 +138,7 @@ typedef struct {
} THROTTLE_CONFIG;
#define LOG_PARTIAL_CONFIG ",log=(enabled=false)"
+#define READONLY_CONFIG ",readonly=true"
/*
* NOTE: If you add any fields to this structure here, you must also add
* an initialization in wtperf.c in the default_cfg.
@@ -146,6 +147,7 @@ struct __config { /* Configuration structure */
const char *home; /* WiredTiger home */
const char *monitor_dir; /* Monitor output dir */
const char *partial_config; /* Config string for partial logging */
+ const char *reopen_config; /* Config string for conn reopen */
char *base_uri; /* Object URI */
char **uris; /* URIs if multiple tables */
const char *helium_mount; /* Optional Helium mount point */
diff --git a/bench/wtperf/wtperf_opt.i b/bench/wtperf/wtperf_opt.i
index 60bbaff56e5..ecc1f216299 100644
--- a/bench/wtperf/wtperf_opt.i
+++ b/bench/wtperf/wtperf_opt.i
@@ -145,6 +145,10 @@ DEF_OPT_AS_UINT32(random_range, 0,
"insert operations")
DEF_OPT_AS_BOOL(random_value, 0, "generate random content for the value")
DEF_OPT_AS_UINT32(read_range, 0, "scan a range of keys after each search")
+DEF_OPT_AS_BOOL(readonly, 0,
+ "reopen the connection between populate and workload phases in readonly "
+ "mode. Requires reopen_connection turned on (default). Requires that "
+ "read be the only workload specified")
DEF_OPT_AS_BOOL(reopen_connection, 1,
"close and reopen the connection between populate and workload phases")
DEF_OPT_AS_UINT32(report_interval, 2,
diff --git a/src/docs/wtperf.dox b/src/docs/wtperf.dox
index 1f0d1533ac4..6f3d2f87ee0 100644
--- a/src/docs/wtperf.dox
+++ b/src/docs/wtperf.dox
@@ -212,6 +212,10 @@ insert operations
generate random content for the value
@par read_range (unsigned int, default=0)
scan a range of keys after each search
+@par readonly (boolean, default=false)
+reopen the connection between populate and workload phases in readonly
+mode. Requires reopen_connection turned on (default). Requires that
+read be the only workload specified
@par reopen_connection (boolean, default=true)
close and reopen the connection between populate and workload phases
@par report_interval (unsigned int, default=2)