diff options
| author | Amar Tumballi <amarts@redhat.com> | 2012-08-20 23:46:03 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-08-22 09:55:59 -0700 | 
| commit | 49ba15d599a8979d1d3df7a39204d52081d8719e (patch) | |
| tree | db7b1e85949155f574ef69115cbf35e324809953 /xlators | |
| parent | 4dc4e4b770fc5fa1aeebc41223ede9195ede4965 (diff) | |
fuse: make background queue length configurable
* also make 'congestion_threshold' an option
* make 'congestion_threshold' as 75% of background queue length if
  not explicitely specified
* in glusterfsd.c, moved all the fuse option dictionary setting
  code to separate function
Change-Id: Ie1680eefaed9377720770a09222282321bd4132e
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 845214
Reviewed-on: http://review.gluster.org/3830
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 43 | ||||
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.h | 4 | ||||
| -rwxr-xr-x | xlators/mount/fuse/utils/mount.glusterfs.in | 10 | 
3 files changed, 54 insertions, 3 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index af6de8cd0..7915964ed 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -3498,9 +3498,8 @@ fuse_init (xlator_t *this, fuse_in_header_t *finh, void *msg)  	}          if (fini->minor >= 13) { -                /* these values seemed to work fine during testing */ -                fino.max_background = 64; -                fino.congestion_threshold = 48; +                fino.max_background = priv->background_qlen; +                fino.congestion_threshold = priv->congestion_threshold;          }          if (fini->minor < 9)                  *priv->msg0_len_p = sizeof(*finh) + FUSE_COMPAT_WRITE_IN_SIZE; @@ -4650,6 +4649,32 @@ init (xlator_t *this_xl)  		goto cleanup_exit;  	} +        /* default values seemed to work fine during testing */ +	GF_OPTION_INIT ("background-qlen", priv->background_qlen, int32, +                        cleanup_exit); +	GF_OPTION_INIT ("congestion-threshold", priv->congestion_threshold, +                        int32, cleanup_exit); + +        /* user has set only background-qlen, not congestion-threshold, +           use the fuse kernel driver formula to set congestion. ie, 75% */ +        if (dict_get (this_xl->options, "background-qlen") && +            !dict_get (this_xl->options, "congestion-threshold")) { +                priv->congestion_threshold = (priv->background_qlen * 3) / 4; +                gf_log (this_xl->name, GF_LOG_INFO, +                        "setting congestion control as 75%% of " +                        "background-queue length (ie, (.75 * %d) = %d", +                        priv->background_qlen, priv->congestion_threshold); +        } + +        /* congestion should not be higher than background queue length */ +        if (priv->congestion_threshold > priv->background_qlen) { +                gf_log (this_xl->name, GF_LOG_INFO, +                        "setting congestion control same as " +                        "background-queue length (%d)", +                        priv->background_qlen); +                priv->congestion_threshold = priv->background_qlen; +        } +          cmd_args = &this_xl->ctx->cmd_args;          fsname = cmd_args->volfile;          if (!fsname && cmd_args->volfile_server) { @@ -4833,5 +4858,17 @@ struct volume_options options[] = {  	  .type = GF_OPTION_TYPE_BOOL,  	  .default_value = "false"  	}, +        { .key  = {"background-qlen"}, +          .type = GF_OPTION_TYPE_INT, +          .default_value = "64", +          .min = 16, +          .max = (64 * GF_UNIT_KB), +        }, +        { .key  = {"congestion-threshold"}, +          .type = GF_OPTION_TYPE_INT, +          .default_value = "48", +          .min = 12, +          .max = (64 * GF_UNIT_KB), +        },          { .key = {NULL} },  }; diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h index 055cbd311..9b90d0a47 100644 --- a/xlators/mount/fuse/src/fuse-bridge.h +++ b/xlators/mount/fuse/src/fuse-bridge.h @@ -123,6 +123,10 @@ struct fuse_private {          /* For communicating with separate mount thread. */          int                  status_pipe[2]; + +        /* for fuse queue length and congestion threshold */ +        int background_qlen; +        int congestion_threshold;  };  typedef struct fuse_private fuse_private_t; diff --git a/xlators/mount/fuse/utils/mount.glusterfs.in b/xlators/mount/fuse/utils/mount.glusterfs.in index a0a31660a..3bbbc3a06 100755 --- a/xlators/mount/fuse/utils/mount.glusterfs.in +++ b/xlators/mount/fuse/utils/mount.glusterfs.in @@ -144,6 +144,14 @@ start_glusterfs ()  	cmd_line=$(echo "$cmd_line --fopen-keep-cache");      fi +    if [ -n "$bg_qlen" ]; then +	cmd_line=$(echo "$cmd_line --background-qlen=$bg_qlen"); +    fi + +    if [ -n "$cong_threshold" ]; then +	cmd_line=$(echo "$cmd_line --congestion-threshold=$cong_threshold"); +    fi +      # for rdma volume, we have to fetch volfile with '.rdma' added      # to volume name, so that it fetches the right client vol file      volume_id_rdma=""; @@ -335,6 +343,8 @@ main ()                              "entry-timeout")    entry_timeout=$value ;;                              "negative-timeout")    negative_timeout=$value ;;  			    "gid-timeout")	gid_timeout=$value ;; +			    "background-qlen")	bg_qlen=$value ;; +			    "congestion-threshold")	cong_threshold=$value ;;                              *) echo "unknown option $key (ignored)" ;;                          esac                  esac  | 
