X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fmemory.c;h=ea16ce315f102126d7ca0f497ea8d153fb6c2339;hb=ac9eaabe2b58aceb661ec3538007a154a54501d0;hp=0f5e1a00322da85bcb4666049f87e2eb11f4afd5;hpb=5c78be034ebf8edbf2ae98e9163a38b2d61fbb68;p=collectd.git diff --git a/src/memory.c b/src/memory.c index 0f5e1a00..ea16ce31 100644 --- a/src/memory.c +++ b/src/memory.c @@ -30,6 +30,9 @@ #ifdef HAVE_SYS_SYSCTL_H # include #endif +#ifdef HAVE_SYS_VMMETER_H +# include +#endif #ifdef HAVE_MACH_KERN_RETURN_H # include @@ -73,6 +76,7 @@ static vm_size_t pagesize; #elif HAVE_LIBKSTAT static int pagesize; static kstat_t *ksp; +static kstat_t *ksz; /* #endif HAVE_LIBKSTAT */ #elif HAVE_SYSCTL @@ -134,6 +138,12 @@ static int memory_init (void) ksp = NULL; return (-1); } + if (get_kstat (&ksz, "zfs", 0, "arcstats") != 0) + { + ksz = NULL; + return (-1); + } + /* #endif HAVE_LIBKSTAT */ #elif HAVE_SYSCTL @@ -157,9 +167,9 @@ static int memory_init (void) #define MEMORY_SUBMIT(...) do { \ if (values_absolute) \ - plugin_dispatch_multivalue (vl, 0, __VA_ARGS__, NULL); \ + plugin_dispatch_multivalue (vl, 0, DS_TYPE_GAUGE, __VA_ARGS__, NULL); \ if (values_percentage) \ - plugin_dispatch_multivalue (vl, 1, __VA_ARGS__, NULL); \ + plugin_dispatch_multivalue (vl, 1, DS_TYPE_GAUGE, __VA_ARGS__, NULL); \ } while (0) static int memory_read_internal (value_list_t *vl) @@ -368,6 +378,8 @@ static int memory_read_internal (value_list_t *vl) long long mem_lock; long long mem_kern; long long mem_unus; + long long arcsize; + long long pp_kernel; long long physmem; @@ -375,17 +387,20 @@ static int memory_read_internal (value_list_t *vl) if (ksp == NULL) return (-1); + if (ksz == NULL) + return (-1); mem_used = get_kstat_value (ksp, "pagestotal"); mem_free = get_kstat_value (ksp, "pagesfree"); mem_lock = get_kstat_value (ksp, "pageslocked"); - mem_kern = 0; - mem_unus = 0; - + arcsize = get_kstat_value (ksz, "size"); pp_kernel = get_kstat_value (ksp, "pp_kernel"); physmem = get_kstat_value (ksp, "physmem"); availrmem = get_kstat_value (ksp, "availrmem"); + mem_kern = 0; + mem_unus = 0; + if ((mem_used < 0LL) || (mem_free < 0LL) || (mem_lock < 0LL)) { WARNING ("memory plugin: one of used, free or locked is negative."); @@ -428,11 +443,14 @@ static int memory_read_internal (value_list_t *vl) mem_lock *= pagesize; /* some? ;) */ mem_kern *= pagesize; /* it's 2011 RAM is cheap */ mem_unus *= pagesize; + mem_kern -= arcsize; + MEMORY_SUBMIT ("used", (gauge_t) mem_used, "free", (gauge_t) mem_free, "locked", (gauge_t) mem_lock, "kernel", (gauge_t) mem_kern, + "arc", (gauge_t) arcsize, "unusable", (gauge_t) mem_unus); /* #endif HAVE_LIBKSTAT */