diff options
| author | vmallika <vmallika@redhat.com> | 2015-07-09 15:34:21 +0530 | 
|---|---|---|
| committer | Raghavendra G <rgowdapp@redhat.com> | 2015-07-14 04:27:24 -0700 | 
| commit | c6de1e9de73e5ce08bf9099f14da74c2c1946132 (patch) | |
| tree | 9a15c2d618142f7fe5ed807bb5af0e16accc5d47 | |
| parent | 11253616203ce450b49f25df2a0f4fec0a974b41 (diff) | |
quota/marker: use smaller stacksize in synctask for marker updation
This is a backport of http://review.gluster.org/#/c/11499/
Default stacksize that synctask uses is 2M.
For marker we set it to 16k
Also move market xlator close to io-threads
to have smaller stack
> Change-Id: I8730132a6365cc9e242a3564a1e615d94ef2c651
> BUG: 1207735
> Signed-off-by: vmallika <vmallika@redhat.com>
Change-Id: Id1cb6288a38d370956cc47aed5253ff95f04c966
BUG: 1229282
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/11595
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Tested-by: Raghavendra G <rgowdapp@redhat.com>
| -rw-r--r-- | libglusterfs/src/syncop.c | 28 | ||||
| -rw-r--r-- | libglusterfs/src/syncop.h | 10 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker-quota.c | 4 | ||||
| -rw-r--r-- | xlators/features/qemu-block/src/coroutine-synctask.c | 2 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 2 | 
5 files changed, 32 insertions, 14 deletions
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c index 5ee4e2d33d5..9e563a8b044 100644 --- a/libglusterfs/src/syncop.c +++ b/libglusterfs/src/syncop.c @@ -443,8 +443,8 @@ synctask_setid (struct synctask *task, uid_t uid, gid_t gid)  struct synctask * -synctask_create (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk, -		 call_frame_t *frame, void *opaque) +synctask_create (struct syncenv *env, size_t stacksize, synctask_fn_t fn, +                 synctask_cbk_t cbk, call_frame_t *frame, void *opaque)  {          struct synctask *newtask = NULL;          xlator_t        *this    = THIS; @@ -500,13 +500,21 @@ synctask_create (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk,                  goto err;          } -        newtask->stack = GF_CALLOC (1, env->stacksize, gf_common_mt_syncstack); +        if (stacksize <= 0) { +                newtask->stack = GF_CALLOC (1, env->stacksize, +                                            gf_common_mt_syncstack); +                newtask->ctx.uc_stack.ss_size = env->stacksize; +        } else { +                newtask->stack = GF_CALLOC (1, stacksize, +                                            gf_common_mt_syncstack); +                newtask->ctx.uc_stack.ss_size = stacksize; +        } +          if (!newtask->stack) {                  goto err;          }          newtask->ctx.uc_stack.ss_sp   = newtask->stack; -        newtask->ctx.uc_stack.ss_size = env->stacksize;          makecontext (&newtask->ctx, (void (*)(void)) synctask_wrap, 2, newtask); @@ -561,13 +569,13 @@ synctask_join (struct synctask *task)  int -synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk, -              call_frame_t *frame, void *opaque) +synctask_new1 (struct syncenv *env, size_t stacksize, synctask_fn_t fn, +               synctask_cbk_t cbk, call_frame_t *frame, void *opaque)  {  	struct synctask *newtask = NULL;  	int              ret = 0; -	newtask = synctask_create (env, fn, cbk, frame, opaque); +	newtask = synctask_create (env, stacksize, fn, cbk, frame, opaque);  	if (!newtask)  		return -1; @@ -577,6 +585,12 @@ synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk,          return ret;  } +int +synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk, +              call_frame_t *frame, void *opaque) +{ +        return synctask_new1 (env, 0, fn, cbk, frame, opaque); +}  struct synctask *  syncenv_task (struct syncproc *proc) diff --git a/libglusterfs/src/syncop.h b/libglusterfs/src/syncop.h index f41706a9d37..ca25d98ea38 100644 --- a/libglusterfs/src/syncop.h +++ b/libglusterfs/src/syncop.h @@ -264,9 +264,13 @@ struct syncenv * syncenv_new (size_t stacksize, int procmin, int procmax);  void syncenv_destroy (struct syncenv *);  void syncenv_scale (struct syncenv *env); -int synctask_new (struct syncenv *, synctask_fn_t, synctask_cbk_t, call_frame_t* frame, void *); -struct synctask *synctask_create (struct syncenv *, synctask_fn_t, -				  synctask_cbk_t, call_frame_t *, void *); +int synctask_new1 (struct syncenv *, size_t stacksize, synctask_fn_t, +                    synctask_cbk_t, call_frame_t *frame, void *); +int synctask_new (struct syncenv *, synctask_fn_t, synctask_cbk_t, +                  call_frame_t *frame, void *); +struct synctask *synctask_create (struct syncenv *, size_t stacksize, +                                  synctask_fn_t, synctask_cbk_t, call_frame_t *, +                                  void *);  int synctask_join (struct synctask *task);  void synctask_wake (struct synctask *task);  void synctask_yield (struct synctask *task); diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 515813873d6..b7a6efffd55 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -2823,8 +2823,8 @@ mq_synctask (xlator_t *this, synctask_fn_t task, gf_boolean_t spawn, loc_t *loc,          args->contri = contri;          if (spawn) { -                ret = synctask_new (this->ctx->env, task, mq_synctask_cleanup, -                                    NULL, args); +                ret = synctask_new1 (this->ctx->env, 1024 * 16, task, +                                      mq_synctask_cleanup, NULL, args);                  if (ret) {                          gf_log (this->name, GF_LOG_ERROR, "Failed to spawn "                                  "new synctask"); diff --git a/xlators/features/qemu-block/src/coroutine-synctask.c b/xlators/features/qemu-block/src/coroutine-synctask.c index e43988a953f..5b7ca0ceedc 100644 --- a/xlators/features/qemu-block/src/coroutine-synctask.c +++ b/xlators/features/qemu-block/src/coroutine-synctask.c @@ -105,7 +105,7 @@ qb_coroutine (call_frame_t *frame, synctask_fn_t fn)  	LOCK(&qb_co.lock);  	if (!qb_co.task) -		qb_co.task = synctask_create(qb_conf->env, qb_synctask_wrap, +		qb_co.task = synctask_create(qb_conf->env, 0, qb_synctask_wrap,  					     synctask_nop_cbk, frame, NULL);  	list_add_tail(&qb_local->list, &qb_co.queue); diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index b7d850ccdaa..79de941bda2 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -2234,9 +2234,9 @@ static volgen_brick_xlator_t server_graph_table[] = {          {brick_graph_add_ro, NULL},          {brick_graph_add_worm, NULL},          {brick_graph_add_quota, "quota"}, -        {brick_graph_add_marker, "marker"},          {brick_graph_add_index, "index"},          {brick_graph_add_barrier, NULL}, +        {brick_graph_add_marker, "marker"},          {brick_graph_add_iot, "io-threads"},          {brick_graph_add_upcall, "upcall"},          {brick_graph_add_pump, NULL},  | 
