summaryrefslogtreecommitdiffstats
path: root/xlators/performance
diff options
context:
space:
mode:
authorJoshua Eilers <jeilers@fb.com>2017-04-06 11:03:53 -0700
committerShreyas Siravara <sshreyas@fb.com>2017-09-08 00:19:53 +0000
commit7f55c2e767440a22ef1e1ac225e3047d18b0f152 (patch)
treea60b707680f30cb3209215fdcce18f9da50466b4 /xlators/performance
parent868d082bd4384aab6b1b5ede2435c10a89ab8aa2 (diff)
[io-cache] New volume options for read sizes
Summary: Two new volume options that control reads. performance.io-cache.read-size - Tells gluster how much it should try to read on each posix_readv call performance.io-cache.min-cached-read-size - Tells gluster the smallest files it should start caching, anything smaller is not cached This is a port of D4844662 to 3.8 Change-Id: I5ba891906f97e514e7365cc34374619379434766 Reviewed-on: https://review.gluster.org/18235 Reviewed-by: Shreyas Siravara <sshreyas@fb.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Smoke: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/performance')
-rw-r--r--xlators/performance/io-cache/src/io-cache.c29
-rw-r--r--xlators/performance/io-cache/src/io-cache.h2
2 files changed, 26 insertions, 5 deletions
diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c
index f199b229bc2..b5533481f26 100644
--- a/xlators/performance/io-cache/src/io-cache.c
+++ b/xlators/performance/io-cache/src/io-cache.c
@@ -1147,7 +1147,7 @@ ioc_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,
}
ioc_inode_unlock (ioc_inode);
- if (!fd_ctx_get (fd, this, NULL)) {
+ if (!fd_ctx_get (fd, this, NULL) || size < table->min_cached_read_size) {
/* disable caching for this fd, go ahead with normal readv */
STACK_WIND_TAIL (frame, FIRST_CHILD (frame->this),
FIRST_CHILD (frame->this)->fops->readv, fd,
@@ -1753,6 +1753,12 @@ reconfigure (xlator_t *this, dict_t *options)
goto unlock;
}
+ GF_OPTION_RECONF ("read-size", table->read_size,
+ options, size_uint64, unlock);
+
+ GF_OPTION_RECONF ("min-cached-read-size", table->min_cached_read_size,
+ options, size_uint64, unlock);
+
GF_OPTION_RECONF ("cache-size", cache_size_new,
options, size_uint64, unlock);
if (!check_cache_size_ok (this, cache_size_new)) {
@@ -1792,7 +1798,6 @@ init (xlator_t *this)
dict_t *xl_options = NULL;
uint32_t index = 0;
int32_t ret = -1;
- glusterfs_ctx_t *ctx = NULL;
data_t *data = 0;
uint32_t num_pages = 0;
@@ -1820,7 +1825,12 @@ init (xlator_t *this)
}
table->xl = this;
- table->page_size = this->ctx->page_size;
+
+ GF_OPTION_INIT ("read-size", table->read_size, size_uint64, out);
+
+ GF_OPTION_INIT ("min-cached-read-size", table->min_cached_read_size, size_uint64, out);
+
+ table->page_size = table->read_size;
GF_OPTION_INIT ("cache-size", table->cache_size, size_uint64, out);
@@ -1903,8 +1913,7 @@ init (xlator_t *this)
ret = 0;
- ctx = this->ctx;
- ioc_log2_page_size = log_base2 (ctx->page_size);
+ ioc_log2_page_size = log_base2 (table->page_size);
LOCK_INIT (&table->statfs_cache.lock);
/* Invalidate statfs cache */
@@ -2257,6 +2266,16 @@ struct volume_options options[] = {
.description = "Maximum file size which would be cached by the "
"io-cache translator."
},
+ { .key = {"read-size"},
+ .type = GF_OPTION_TYPE_SIZET,
+ .default_value = "1MB",
+ .description = "Size of each posix read"
+ },
+ { .key = {"min-cached-read-size"},
+ .type = GF_OPTION_TYPE_SIZET,
+ .default_value = "64KB",
+ .description = "Minimum size to cache reads"
+ },
{ .key = {"statfs-cache"},
.type = GF_OPTION_TYPE_BOOL,
.default_value = "0",
diff --git a/xlators/performance/io-cache/src/io-cache.h b/xlators/performance/io-cache/src/io-cache.h
index da71b2f2371..9198225791b 100644
--- a/xlators/performance/io-cache/src/io-cache.h
+++ b/xlators/performance/io-cache/src/io-cache.h
@@ -162,6 +162,8 @@ struct ioc_table {
uint64_t cache_used;
uint64_t min_file_size;
uint64_t max_file_size;
+ uint64_t read_size;
+ uint64_t min_cached_read_size;
struct list_head inodes; /* list of inodes cached */
struct list_head active;
struct list_head *inode_lru;