diff options
| author | Kaushal M <kaushal@gluster.com> | 2011-09-14 09:50:45 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2011-09-29 09:39:50 -0700 | 
| commit | ce8a569e9f18cfff2f2befe259c2022d9b37538f (patch) | |
| tree | a5afc3ceed7a36509dca452feab1566a1896afd0 /libglusterfs | |
| parent | f3a6752cc455676d6e1f946b513636d991825da8 (diff) | |
performance/io-cache,quick-read: increase cache-size limit
Does the following:
1. Increases cache-size limit from 6GB to 32GB.
2. Prevents 'volume set'from failing when cache-size is set over the
limit. Just issues a warning.
3. Performs check on cache-size by comparing with total system memory
available in init () and reconfigure () methods.
Change-Id: I7dd4d8c53051b89a293696abf1ee8dc237e39a20
BUG: 3495
Reviewed-on: http://review.gluster.com/409
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amar@gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/common-utils.c | 31 | ||||
| -rw-r--r-- | libglusterfs/src/common-utils.h | 2 | ||||
| -rw-r--r-- | libglusterfs/src/options.c | 22 | 
3 files changed, 49 insertions, 6 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index b2e91608b7a..2d4415f506d 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -1896,3 +1896,34 @@ gf_path_strip_trailing_slashes (char *path)          return;  } + +uint64_t +get_mem_size () +{ +        uint64_t memsize = -1; + +#ifdef __linux__ +        FILE *fp = NULL; +        char    line[1028] = {0,}; + +        fp = fopen ("/proc/meminfo", "r"); +        if (!fp) { +                gf_log ("common-utils", GF_LOG_DEBUG, +                        "Could not open /proc/meminfo"); +                return memsize; +        } + +        while (fgets (line, sizeof (line), fp) != 0) { +                if (strncmp (line, "MemTotal:", 9) == 0) { +                        sscanf (line, "%*s %"SCNu64" kB", &memsize); +                        memsize *= 1024;        //convert to bytes +                        gf_log ("common-utils", GF_LOG_INFO, +                                "Total Mem: %"PRIu64, memsize); +                        break; +                } +        } +#endif +        // TODO: Methods for other platforms + +        return memsize; +} diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 82e499b392a..2a5e00c5e11 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -50,6 +50,7 @@ void trap (void);  #include "uuid.h" +  #define min(a,b) ((a)<(b)?(a):(b))  #define max(a,b) ((a)>(b)?(a):(b))  #define roof(a,b) ((((a)+(b)-1)/((b)?(b):1))*(b)) @@ -399,4 +400,5 @@ int validate_brick_name (char *brick);  char *get_host_name (char *word, char **host);  char *get_path_name (char *word, char **path);  void gf_path_strip_trailing_slashes (char *path); +uint64_t get_mem_size ();  #endif /* _COMMON_UTILS_H */ diff --git a/libglusterfs/src/options.c b/libglusterfs/src/options.c index b64b24e0489..1e6413cc0a9 100644 --- a/libglusterfs/src/options.c +++ b/libglusterfs/src/options.c @@ -131,12 +131,22 @@ xlator_option_validate_sizet (xlator_t *xl, const char *key, const char *value,          }          if ((size < opt->min) || (size > opt->max)) { -                snprintf (errstr, 256, -                          "'%"PRId64"' in 'option %s %s' is out of range " -                          "[%"PRId64" - %"PRId64"]", -                          size, key, value, opt->min, opt->max); -                gf_log (xl->name, GF_LOG_ERROR, "%s", errstr); -                goto out; +                if (strncmp (key, "cache-size", 10) == 0) { +                       snprintf (errstr, 256, "Cache size %"PRId64" is out of " +                                 "range [%"PRId64" - %"PRId64"]", +                                 size, opt->min, opt->max); +                       //*op_errstr = gf_strdup (errstr); +                       gf_log (xl->name, GF_LOG_WARNING, "%s", errstr); +                       ret = 0; +                       goto out; +                } else { +                        snprintf (errstr, 256, +                                  "'%"PRId64"' in 'option %s %s' " +                                  "is out of range [%"PRId64" - %"PRId64"]", +                                  size, key, value, opt->min, opt->max); +                        gf_log (xl->name, GF_LOG_ERROR, "%s", errstr); +                        goto out; +                }          }          ret = 0;  | 
