svn commit: r313095 - in head/net-mgmt/collectd: . files
Pawel Pekala
pawel at FreeBSD.org
Thu Feb 28 15:33:26 UTC 2013
Author: pawel
Date: Thu Feb 28 15:33:25 2013
New Revision: 313095
URL: http://svnweb.freebsd.org/changeset/ports/313095
Log:
Fix segfautls in ZFS code
PR: ports/176440
Submitted by: Krzysztof Stryjek <ports at bsdserwis.com> (maintainer)
Modified:
head/net-mgmt/collectd/Makefile
head/net-mgmt/collectd/files/patch-src__zfs_arc.c
Modified: head/net-mgmt/collectd/Makefile
==============================================================================
--- head/net-mgmt/collectd/Makefile Thu Feb 28 15:19:55 2013 (r313094)
+++ head/net-mgmt/collectd/Makefile Thu Feb 28 15:33:25 2013 (r313095)
@@ -3,7 +3,7 @@
PORTNAME= collectd
PORTVERSION= 4.10.8
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= net-mgmt
MASTER_SITES= http://collectd.org/files/
Modified: head/net-mgmt/collectd/files/patch-src__zfs_arc.c
==============================================================================
--- head/net-mgmt/collectd/files/patch-src__zfs_arc.c Thu Feb 28 15:19:55 2013 (r313094)
+++ head/net-mgmt/collectd/files/patch-src__zfs_arc.c Thu Feb 28 15:33:25 2013 (r313095)
@@ -1,5 +1,5 @@
--- src/zfs_arc.c.orig 2012-11-11 11:43:05.000000000 +0100
-+++ src/zfs_arc.c 2012-12-31 00:59:33.000000000 +0100
++++ src/zfs_arc.c 2013-02-26 15:29:15.297851681 +0100
@@ -23,11 +23,58 @@
#include "common.h"
#include "plugin.h"
@@ -60,7 +60,85 @@
static void za_submit (const char* type, const char* type_instance, value_t* values, int values_len)
{
-@@ -90,42 +137,40 @@
+@@ -46,112 +93,136 @@
+
+ static void za_submit_gauge (const char* type, const char* type_instance, gauge_t value)
+ {
+- value_t values[1];
++ value_t vv;
+
+- values[0].gauge = value;
++ vv.gauge = value;
+
+- za_submit (type, type_instance, values, STATIC_ARRAY_SIZE(values));
++ za_submit (type, type_instance, &vv, 1);
+ }
+
+-static void za_submit_size (gauge_t size, gauge_t size_target, gauge_t limit_min, gauge_t limit_max)
++static int za_read_derive (struct za_context *ctx, const char *kstat_value,
++ const char *type, const char *type_instance)
+ {
+- value_t values[4];
++ long long tmp;
++ value_t v;
+
+- values[0].gauge = size;
+- values[1].gauge = size_target;
+- values[2].gauge = limit_min;
+- values[3].gauge = limit_max;
++ tmp = za_get_value (ctx, (char *)kstat_value);
++ if (tmp == -1LL)
++ {
++ ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
++ return (-1);
++ }
+
+- za_submit ("arc_size", "", values, STATIC_ARRAY_SIZE(values));
++ v.derive = (derive_t) tmp;
++ za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
++ return (0);
+ }
+
+-static void za_submit_bytes (counter_t read, counter_t write)
++static int za_read_gauge (struct za_context *ctx, const char *kstat_value,
++ const char *type, const char *type_instance)
+ {
+- value_t values[2];
++ long long tmp;
++ value_t v;
+
+- values[0].counter = read;
+- values[1].counter = write;
++ tmp = za_get_value (ctx, (char *)kstat_value);
++ if (tmp == -1LL)
++ {
++ ERROR ("zfs_arc plugin: Reading kstat value \"%s\" failed.", kstat_value);
++ return (-1);
++ }
+
+- za_submit ("arc_l2_bytes", "", values, STATIC_ARRAY_SIZE(values));
++ v.gauge = (gauge_t) tmp;
++ za_submit (type, type_instance, /* values = */ &v, /* values_num = */ 1);
++ return (0);
+ }
+
+-static void za_submit_counts (char *type_instance, counter_t demand_data, counter_t demand_metadata,
+- counter_t prefetch_data, counter_t prefetch_metadata)
++static void za_submit_ratio (const char* type_instance, long long hits, long long misses)
+ {
+- value_t values[4];
++ gauge_t ratio = NAN;
+
+- values[0].counter = demand_data;
+- values[1].counter = demand_metadata;
+- values[2].counter = prefetch_data;
+- values[3].counter = prefetch_metadata;
++ if ((hits > 0) || (misses > 0))
++ ratio = hits / (hits + misses);
+
+- za_submit ("arc_counts", type_instance, values, STATIC_ARRAY_SIZE(values));
++ za_submit_gauge ("cache_ratio", type_instance, ratio);
+ }
static int za_read (void)
{
@@ -69,10 +147,9 @@
- counter_t demand_data_misses, demand_metadata_misses, prefetch_data_misses, prefetch_metadata_misses;
- counter_t l2_read_bytes, l2_write_bytes;
- kstat_t *ksp = NULL;
-+ long long arcsize, targetsize, minlimit, maxlimit, hits, misses, l2_size, l2_hits, l2_misses;
-+ long long demand_data_hits, demand_metadata_hits, prefetch_data_hits, prefetch_metadata_hits;
-+ long long demand_data_misses, demand_metadata_misses, prefetch_data_misses, prefetch_metadata_misses;
+ long long l2_read_bytes, l2_write_bytes;
++ long long arc_hits, arc_misses, l2_hits, l2_misses;
++ value_t l2_io[2];
+ struct za_context ctx;
- get_kstat (&ksp, "zfs", 0, "arcstats");
@@ -106,33 +183,65 @@
- l2_write_bytes = get_kstat_value(ksp, "l2_write_bytes");
- l2_hits = get_kstat_value(ksp, "l2_hits");
- l2_misses = get_kstat_value(ksp, "l2_misses");
-+ arcsize = za_get_value(&ctx, "size");
-+ targetsize = za_get_value(&ctx, "c");
-+ minlimit = za_get_value(&ctx, "c_min");
-+ maxlimit = za_get_value(&ctx, "c_max");
-+
-+ demand_data_hits = za_get_value(&ctx, "demand_data_hits");
-+ demand_metadata_hits = za_get_value(&ctx, "demand_metadata_hits");
-+ prefetch_data_hits = za_get_value(&ctx, "prefetch_data_hits");
-+ prefetch_metadata_hits = za_get_value(&ctx, "prefetch_metadata_hits");
-+
-+ demand_data_misses = za_get_value(&ctx, "demand_data_misses");
-+ demand_metadata_misses = za_get_value(&ctx, "demand_metadata_misses");
-+ prefetch_data_misses = za_get_value(&ctx, "prefetch_data_misses");
-+ prefetch_metadata_misses = za_get_value(&ctx, "prefetch_metadata_misses");
-+
-+ hits = za_get_value(&ctx, "hits");
-+ misses = za_get_value(&ctx, "misses");
-+
-+ l2_size = za_get_value(&ctx, "l2_size");
-+ l2_read_bytes = za_get_value(&ctx, "l2_read_bytes");
-+ l2_write_bytes = za_get_value(&ctx, "l2_write_bytes");
-+ l2_hits = za_get_value(&ctx, "l2_hits");
-+ l2_misses = za_get_value(&ctx, "l2_misses");
+-
+-
+- za_submit_size (arcsize, targetsize, minlimit, maxlimit);
+- za_submit_gauge ("arc_l2_size", "", l2_size);
+-
+- za_submit_counts ("hits", demand_data_hits, demand_metadata_hits,
+- prefetch_data_hits, prefetch_metadata_hits);
+- za_submit_counts ("misses", demand_data_misses, demand_metadata_misses,
+- prefetch_data_misses, prefetch_metadata_misses);
++ /* Sizes */
++ za_read_gauge (&ctx, "size", "cache_size", "arc");
++ za_read_gauge (&ctx, "l2_size", "cache_size", "L2");
++
++ /* Operations */
++ za_read_derive (&ctx, "allocated","cache_operation", "allocated");
++ za_read_derive (&ctx, "deleted", "cache_operation", "deleted");
++ za_read_derive (&ctx, "stolen", "cache_operation", "stolen");
++
++ /* Issue indicators */
++ za_read_derive (&ctx, "mutex_miss", "mutex_operation", "miss");
++ za_read_derive (&ctx, "hash_collisions", "hash_collisions", "");
++
++ /* Evictions */
++ za_read_derive (&ctx, "evict_l2_cached", "cache_eviction", "cached");
++ za_read_derive (&ctx, "evict_l2_eligible", "cache_eviction", "eligible");
++ za_read_derive (&ctx, "evict_l2_ineligible", "cache_eviction", "ineligible");
++
++ /* Hits / misses */
++ za_read_derive (&ctx, "demand_data_hits", "cache_result", "demand_data-hit");
++ za_read_derive (&ctx, "demand_metadata_hits", "cache_result", "demand_metadata-hit");
++ za_read_derive (&ctx, "prefetch_data_hits", "cache_result", "prefetch_data-hit");
++ za_read_derive (&ctx, "prefetch_metadata_hits", "cache_result", "prefetch_metadata-hit");
++ za_read_derive (&ctx, "demand_data_misses", "cache_result", "demand_data-miss");
++ za_read_derive (&ctx, "demand_metadata_misses", "cache_result", "demand_metadata-miss");
++ za_read_derive (&ctx, "prefetch_data_misses", "cache_result", "prefetch_data-miss");
++ za_read_derive (&ctx, "prefetch_metadata_misses", "cache_result", "prefetch_metadata-miss");
++
++ /* Ratios */
++ arc_hits = za_get_value (&ctx, "hits");
++ arc_misses = za_get_value (&ctx, "misses");
++ l2_hits = za_get_value (&ctx, "l2_hits");
++ l2_misses = za_get_value (&ctx, "l2_misses");
++
++ za_submit_ratio ("arc", arc_hits, arc_misses);
++ za_submit_ratio ("L2", l2_hits, l2_misses);
++
++ /* I/O */
++ l2_io[0].derive = za_get_value (&ctx, "l2_read_bytes");
++ l2_io[1].derive = za_get_value (&ctx, "l2_write_bytes");
+- za_submit_gauge ("arc_ratio", "L1", hits / (hits + misses));
+- za_submit_gauge ("arc_ratio", "L2", l2_hits / (l2_hits + l2_misses));
+-
+- za_submit_bytes (l2_read_bytes, l2_write_bytes);
++ za_submit ("io_octets", "L2", l2_io, /* num values = */ 2);
- za_submit_size (arcsize, targetsize, minlimit, maxlimit);
-@@ -146,12 +191,23 @@
+ return (0);
+-}
++} /* int za_read */
static int za_init (void) /* {{{ */
{
More information about the svn-ports-head
mailing list