summaryrefslogtreecommitdiffstats
path: root/xlators/performance/io-threads/src/io-threads.c
diff options
context:
space:
mode:
authorShehjar Tikoo <shehjart@zresearch.com>2009-04-10 04:21:53 -0700
committerAnand V. Avati <avati@amp.gluster.com>2009-04-10 18:07:16 +0530
commite1977a4e75637109889b581201e44e24506398c8 (patch)
treeb18625905f106c21e9b16eb000a3cbeb3563223c /xlators/performance/io-threads/src/io-threads.c
parentbf7b4623821c8ffe8070297949e18dc6e3757e9c (diff)
io-threads: Use non-default thread stack size
The default stack size on Linux is around 8 MiB for each thread. This is clearly too high for our purpose. This commit reduces the stack size down to 1 MiB. Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
Diffstat (limited to 'xlators/performance/io-threads/src/io-threads.c')
-rw-r--r--xlators/performance/io-threads/src/io-threads.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/xlators/performance/io-threads/src/io-threads.c b/xlators/performance/io-threads/src/io-threads.c
index b8cb633cdeb..66aec51a37e 100644
--- a/xlators/performance/io-threads/src/io-threads.c
+++ b/xlators/performance/io-threads/src/io-threads.c
@@ -1759,7 +1759,8 @@ void
iot_startup_worker (iot_worker_t *worker, iot_worker_fn workerfunc)
{
worker->state = IOT_STATE_ACTIVE;
- pthread_create (&worker->thread, NULL, workerfunc, worker);
+ pthread_create (&worker->thread, &worker->conf->w_attr, workerfunc,
+ worker);
}
@@ -1777,6 +1778,24 @@ iot_startup_workers (iot_worker_t **workers, int start_idx, int count,
}
static void
+set_stack_size (iot_conf_t *conf)
+{
+ int err = 0;
+ size_t stacksize = IOT_THREAD_STACK_SIZE;
+
+ pthread_attr_init (&conf->w_attr);
+ err = pthread_attr_setstacksize (&conf->w_attr, stacksize);
+ if (err == EINVAL) {
+ gf_log (conf->this->name, GF_LOG_WARNING,
+ "Using default thread stack size");
+ stacksize = 0;
+ }
+
+ pthread_attr_setstacksize (&conf->w_attr, stacksize);
+
+}
+
+static void
workers_init (iot_conf_t *conf)
{
/* Initialize un-ordered workers */
@@ -1787,6 +1806,7 @@ workers_init (iot_conf_t *conf)
conf->oworkers = allocate_worker_array (conf->max_o_threads);
allocate_workers (conf, conf->oworkers, 0, conf->max_o_threads);
+ set_stack_size (conf);
iot_startup_workers (conf->oworkers, 0, conf->min_o_threads,
iot_worker_ordered);
iot_startup_workers (conf->uworkers, 0, conf->min_u_threads,