From wtp@bsdserwis.com  Tue Feb 26 14:41:47 2013
Return-Path: <wtp@bsdserwis.com>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1])
	by hub.freebsd.org (Postfix) with ESMTP id D6353EF0
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 26 Feb 2013 14:41:47 +0000 (UTC)
	(envelope-from wtp@bsdserwis.com)
Received: from mx1.bsdserwis.com (ns37332.ovh.net [91.121.4.86])
	by mx1.freebsd.org (Postfix) with ESMTP id 5104286F
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 26 Feb 2013 14:41:47 +0000 (UTC)
Received: by mx1.bsdserwis.com (Postfix, from userid 1000)
	id 4FDD514DC707; Tue, 26 Feb 2013 15:41:46 +0100 (CET)
Message-Id: <20130226144146.4FDD514DC707@mx1.bsdserwis.com>
Date: Tue, 26 Feb 2013 15:41:46 +0100 (CET)
From: Krzysztof Stryjek <ports@bsdserwis.com>
Reply-To: Krzysztof Stryjek <ports@bsdserwis.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: net-mgmt/collectd: small modification for zfs statisticts
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         176440
>Category:       ports
>Synopsis:       net-mgmt/collectd: small modification for zfs statisticts
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Tue Feb 26 14:50:00 UTC 2013
>Closed-Date:    Thu Feb 28 15:34:13 UTC 2013
>Last-Modified:  Thu Feb 28 15:40:01 UTC 2013
>Originator:     Krzysztof Stryjek
>Release:        FreeBSD 7.3-STABLE amd64
>Organization:
private
>Environment:
System: FreeBSD test.local 7.3-STABLE FreeBSD 7.3-STABLE #1: Fri May 7 15:18:19 CEST 2010 toor@cmd.bsdserwis.com:/usr/src/sys/TEST7 amd64

>Description:
	After last update of collectd, collectd deamon cuses core dumps
because of zfs_arc plugin (floating point). There is correct patch which
does not make collectd to crash.

>How-To-Repeat:
	Just build current net-mgmt/collectd port.
>Fix:

	I'm attaching patch file which should be attached by previous update

------------------------------- patch -------------------------------
diff -ruN collectd/Makefile collectd.new/Makefile
--- collectd/Makefile	2013-02-24 05:20:27.000000000 +0100
+++ collectd.new/Makefile	2013-02-26 15:33:50.000000000 +0100
@@ -3,7 +3,7 @@
 
 PORTNAME=	collectd
 PORTVERSION=	4.10.8
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	net-mgmt
 MASTER_SITES=	http://collectd.org/files/
 
diff -ruN collectd/files/patch-src__zfs_arc.c collectd.new/files/patch-src__zfs_arc.c
--- collectd/files/patch-src__zfs_arc.c	2013-02-23 17:34:16.000000000 +0100
+++ collectd.new/files/patch-src__zfs_arc.c	2013-02-26 15:29:28.000000000 +0100
@@ -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) /* {{{ */
  {

------------------------------- patch -------------------------------
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: pawel 
State-Changed-When: Thu Feb 28 15:34:11 UTC 2013 
State-Changed-Why:  
Committed. Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=176440 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: ports/176440: commit references a PR
Date: Thu, 28 Feb 2013 15:33:35 +0000 (UTC)

 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@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) /* {{{ */
   {
 _______________________________________________
 svn-ports-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-ports-all
 To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
 
>Unformatted:
