summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e24ef93)
raw | patch | inline | side by side (parent: e24ef93)
author | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Sat, 29 Aug 2009 13:21:42 +0000 (15:21 +0200) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Sat, 29 Aug 2009 13:21:42 +0000 (15:21 +0200) |
configure.in | patch | blob | history | |
src/Makefile.am | patch | blob | history | |
src/arc.c | [deleted file] | patch | blob | history |
src/zfs_arc.c | [new file with mode: 0644] | patch | blob |
diff --git a/configure.in b/configure.in
index 19d5eefe7a41792f2f4079be013c0f30d3d3b148..11ca85ecb4a86cfd72185ee8d3ab22b28fdbc9b7 100644 (file)
--- a/configure.in
+++ b/configure.in
dependency_error="no"
plugin_ascent="no"
-plugin_arc="no"
plugin_battery="no"
plugin_bind="no"
plugin_conntrack="no"
plugin_vmem="no"
plugin_vserver="no"
plugin_wireless="no"
+plugin_zfs_arc="no"
# Linux
if test "x$ac_system" = "xLinux"
if test "x$with_kstat" = "xyes"
then
plugin_uptime="yes"
- plugin_arc="yes"
+ plugin_zfs_arc="yes"
fi
if test "x$with_devinfo$with_kstat" = "xyesyes"
AC_PLUGIN([apcups], [yes], [Statistics of UPSes by APC])
AC_PLUGIN([apple_sensors], [$with_libiokit], [Apple's hardware sensors])
AC_PLUGIN([ascent], [$plugin_ascent], [AscentEmu player statistics])
-AC_PLUGIN([arc], [$plugin_arc], [ARC statistics])
AC_PLUGIN([battery], [$plugin_battery], [Battery statistics])
AC_PLUGIN([bind], [$plugin_bind], [ISC Bind nameserver statistics])
AC_PLUGIN([conntrack], [$plugin_conntrack], [nf_conntrack statistics])
AC_PLUGIN([wireless], [$plugin_wireless], [Wireless statistics])
AC_PLUGIN([write_http], [$with_libcurl], [HTTP output plugin])
AC_PLUGIN([xmms], [$with_libxmms], [XMMS statistics])
+AC_PLUGIN([zfs_arc], [$plugin_zfs_arc], [ZFS ARC statistics])
dnl Default configuration file
# Load either syslog or logfile
apcups . . . . . . . $enable_apcups
apple_sensors . . . . $enable_apple_sensors
ascent . . . . . . . $enable_ascent
- arc . . . . . . . . . $enable_arc
battery . . . . . . . $enable_battery
bind . . . . . . . . $enable_bind
conntrack . . . . . . $enable_conntrack
wireless . . . . . . $enable_wireless
write_http . . . . . $enable_write_http
xmms . . . . . . . . $enable_xmms
+ zfs_arc . . . . . . . $enable_zfs_arc
EOF
diff --git a/src/Makefile.am b/src/Makefile.am
index 3ea0682f3d3c85ea205132b7974b59ab008c3b88..0dd5ff31e6968655dce9766d68a32fb2c7087fdb 100644 (file)
--- a/src/Makefile.am
+++ b/src/Makefile.am
collectd_DEPENDENCIES += ascent.la
endif
-if BUILD_PLUGIN_ARC
-pkglib_LTLIBRARIES += arc.la
-arc_la_SOURCES = arc.c
-arc_la_CFLAGS = $(AM_CFLAGS)
-arc_la_LDFLAGS = -module -avoid-version
-arc_la_LIBADD = -lkstat
-collectd_LDADD += "-dlopen" arc.la
-collectd_DEPENDENCIES += arc.la
-endif
-
if BUILD_PLUGIN_BATTERY
pkglib_LTLIBRARIES += battery.la
battery_la_SOURCES = battery.c
collectd_DEPENDENCIES += xmms.la
endif
+if BUILD_PLUGIN_ZFS_ARC
+pkglib_LTLIBRARIES += zfs_arc.la
+zfs_arc_la_SOURCES = zfs_arc.c
+zfs_arc_la_CFLAGS = $(AM_CFLAGS)
+zfs_arc_la_LDFLAGS = -module -avoid-version
+zfs_arc_la_LIBADD = -lkstat
+collectd_LDADD += "-dlopen" zfs_arc.la
+collectd_DEPENDENCIES += zfs_arc.la
+endif
+
dist_man_MANS = collectd.1 \
collectd.conf.5 \
diff --git a/src/arc.c b/src/arc.c
--- a/src/arc.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * collectd - src/arc.c
- * Copyright (C) 2009 Anthony Dewhurst
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; only version 2 of the License is applicable.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors:
- * Anthony Dewhurst <dewhurst at gmail>
- **/
-
-#include "collectd.h"
-#include "common.h"
-#include "plugin.h"
-
-/*
- * Global variables
- */
-static kstat_t *ksp;
-extern kstat_ctl_t *kc;
-
-static void arc_submit (const char* type, const char* type_instance, value_t values[], int values_len)
-{
- value_list_t vl = VALUE_LIST_INIT;
-
- vl.values = values;
- vl.values_len = values_len;
-
- sstrncpy (vl.host, hostname_g, sizeof (vl.host));
- sstrncpy (vl.plugin, "arc", sizeof (vl.plugin));
- sstrncpy (vl.type, type, sizeof (vl.type));
- sstrncpy (vl.type_instance, type_instance, sizeof (vl.type));
-
- plugin_dispatch_values (&vl);
-}
-
-static void arc_submit_gauge (const char* type, const char* type_instance, gauge_t value)
-{
- value_t values[1];
-
- values[0].gauge = value;
-
- arc_submit (type, type_instance, values, STATIC_ARRAY_SIZE(values));
-}
-
-static void arc_submit_size (gauge_t size, gauge_t size_target, gauge_t limit_min, gauge_t limit_max)
-{
- value_t values[4];
-
- values[0].gauge = size;
- values[1].gauge = size_target;
- values[2].gauge = limit_min;
- values[3].gauge = limit_max;
-
- arc_submit ("arc_size", "", values, STATIC_ARRAY_SIZE(values));
-}
-
-static void arc_submit_bytes (counter_t read, counter_t write)
-{
- value_t values[2];
-
- values[0].counter = read;
- values[1].counter = write;
-
- arc_submit ("arc_l2_bytes", "", values, STATIC_ARRAY_SIZE(values));
-}
-
-static void arc_submit_counts (char *type_instance, counter_t demand_data, counter_t demand_metadata,
- counter_t prefetch_data, counter_t prefetch_metadata)
-{
- value_t values[4];
-
- values[0].counter = demand_data;
- values[1].counter = demand_metadata;
- values[2].counter = prefetch_data;
- values[3].counter = prefetch_metadata;
-
- arc_submit ("arc_counts", type_instance, values, STATIC_ARRAY_SIZE(values));
-}
-
-static int arc_read (void)
-{
- gauge_t arcsize, targetsize, minlimit, maxlimit, hits, misses, l2_size, l2_hits, l2_misses;
- counter_t demand_data_hits, demand_metadata_hits, prefetch_data_hits, prefetch_metadata_hits;
- counter_t demand_data_misses, demand_metadata_misses, prefetch_data_misses, prefetch_metadata_misses;
- counter_t l2_read_bytes, l2_write_bytes;
-
- get_kstat (&ksp, "zfs", 0, "arcstats");
- if (ksp == NULL)
- {
- ERROR ("arc plugin: Cannot find zfs:0:arcstats kstat.");
- return (-1);
- }
-
- arcsize = get_kstat_value(ksp, "size");
- targetsize = get_kstat_value(ksp, "c");
- minlimit = get_kstat_value(ksp, "c_min");
- maxlimit = get_kstat_value(ksp, "c_max");
-
- demand_data_hits = get_kstat_value(ksp, "demand_data_hits");
- demand_metadata_hits = get_kstat_value(ksp, "demand_metadata_hits");
- prefetch_data_hits = get_kstat_value(ksp, "prefetch_data_hits");
- prefetch_metadata_hits = get_kstat_value(ksp, "prefetch_metadata_hits");
-
- demand_data_misses = get_kstat_value(ksp, "demand_data_misses");
- demand_metadata_misses = get_kstat_value(ksp, "demand_metadata_misses");
- prefetch_data_misses = get_kstat_value(ksp, "prefetch_data_misses");
- prefetch_metadata_misses = get_kstat_value(ksp, "prefetch_metadata_misses");
-
- hits = get_kstat_value(ksp, "hits");
- misses = get_kstat_value(ksp, "misses");
-
- l2_size = get_kstat_value(ksp, "l2_size");
- l2_read_bytes = get_kstat_value(ksp, "l2_read_bytes");
- 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");
-
-
- arc_submit_size (arcsize, targetsize, minlimit, maxlimit);
- arc_submit_gauge ("arc_l2_size", "", l2_size);
-
- arc_submit_counts ("hits", demand_data_hits, demand_metadata_hits,
- prefetch_data_hits, prefetch_metadata_hits);
- arc_submit_counts ("misses", demand_data_misses, demand_metadata_misses,
- prefetch_data_misses, prefetch_metadata_misses);
-
- arc_submit_gauge ("arc_ratio", "L1", hits / (hits + misses));
- arc_submit_gauge ("arc_ratio", "L2", l2_hits / (l2_hits + l2_misses));
-
- arc_submit_bytes (l2_read_bytes, l2_write_bytes);
-
- return (0);
-}
-
-static int arc_init (void) /* {{{ */
-{
- ksp = NULL;
-
- /* kstats chain already opened by update_kstat (using *kc), verify everything went fine. */
- if (kc == NULL)
- {
- ERROR ("arc plugin: kstat chain control structure not available.");
- return (-1);
- }
-
- return (0);
-} /* }}} int arc_init */
-
-void module_register (void)
-{
- plugin_register_init ("arc", arc_init);
- plugin_register_read ("arc", arc_read);
-} /* void module_register */
diff --git a/src/zfs_arc.c b/src/zfs_arc.c
--- /dev/null
+++ b/src/zfs_arc.c
@@ -0,0 +1,166 @@
+/**
+ * collectd - src/zfs_arc.c
+ * Copyright (C) 2009 Anthony Dewhurst
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; only version 2 of the License is applicable.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors:
+ * Anthony Dewhurst <dewhurst at gmail>
+ **/
+
+#include "collectd.h"
+#include "common.h"
+#include "plugin.h"
+
+/*
+ * Global variables
+ */
+static kstat_t *ksp;
+extern kstat_ctl_t *kc;
+
+static void za_submit (const char* type, const char* type_instance, value_t values[], int values_len)
+{
+ value_list_t vl = VALUE_LIST_INIT;
+
+ vl.values = values;
+ vl.values_len = values_len;
+
+ sstrncpy (vl.host, hostname_g, sizeof (vl.host));
+ sstrncpy (vl.plugin, "zfs_arc", sizeof (vl.plugin));
+ sstrncpy (vl.type, type, sizeof (vl.type));
+ sstrncpy (vl.type_instance, type_instance, sizeof (vl.type));
+
+ plugin_dispatch_values (&vl);
+}
+
+static void za_submit_gauge (const char* type, const char* type_instance, gauge_t value)
+{
+ value_t values[1];
+
+ values[0].gauge = value;
+
+ za_submit (type, type_instance, values, STATIC_ARRAY_SIZE(values));
+}
+
+static void za_submit_size (gauge_t size, gauge_t size_target, gauge_t limit_min, gauge_t limit_max)
+{
+ value_t values[4];
+
+ values[0].gauge = size;
+ values[1].gauge = size_target;
+ values[2].gauge = limit_min;
+ values[3].gauge = limit_max;
+
+ za_submit ("arc_size", "", values, STATIC_ARRAY_SIZE(values));
+}
+
+static void za_submit_bytes (counter_t read, counter_t write)
+{
+ value_t values[2];
+
+ values[0].counter = read;
+ values[1].counter = write;
+
+ za_submit ("arc_l2_bytes", "", values, STATIC_ARRAY_SIZE(values));
+}
+
+static void za_submit_counts (char *type_instance, counter_t demand_data, counter_t demand_metadata,
+ counter_t prefetch_data, counter_t prefetch_metadata)
+{
+ value_t values[4];
+
+ values[0].counter = demand_data;
+ values[1].counter = demand_metadata;
+ values[2].counter = prefetch_data;
+ values[3].counter = prefetch_metadata;
+
+ za_submit ("arc_counts", type_instance, values, STATIC_ARRAY_SIZE(values));
+}
+
+static int za_read (void)
+{
+ gauge_t arcsize, targetsize, minlimit, maxlimit, hits, misses, l2_size, l2_hits, l2_misses;
+ counter_t demand_data_hits, demand_metadata_hits, prefetch_data_hits, prefetch_metadata_hits;
+ counter_t demand_data_misses, demand_metadata_misses, prefetch_data_misses, prefetch_metadata_misses;
+ counter_t l2_read_bytes, l2_write_bytes;
+
+ get_kstat (&ksp, "zfs", 0, "arcstats");
+ if (ksp == NULL)
+ {
+ ERROR ("zfs_arc plugin: Cannot find zfs:0:arcstats kstat.");
+ return (-1);
+ }
+
+ arcsize = get_kstat_value(ksp, "size");
+ targetsize = get_kstat_value(ksp, "c");
+ minlimit = get_kstat_value(ksp, "c_min");
+ maxlimit = get_kstat_value(ksp, "c_max");
+
+ demand_data_hits = get_kstat_value(ksp, "demand_data_hits");
+ demand_metadata_hits = get_kstat_value(ksp, "demand_metadata_hits");
+ prefetch_data_hits = get_kstat_value(ksp, "prefetch_data_hits");
+ prefetch_metadata_hits = get_kstat_value(ksp, "prefetch_metadata_hits");
+
+ demand_data_misses = get_kstat_value(ksp, "demand_data_misses");
+ demand_metadata_misses = get_kstat_value(ksp, "demand_metadata_misses");
+ prefetch_data_misses = get_kstat_value(ksp, "prefetch_data_misses");
+ prefetch_metadata_misses = get_kstat_value(ksp, "prefetch_metadata_misses");
+
+ hits = get_kstat_value(ksp, "hits");
+ misses = get_kstat_value(ksp, "misses");
+
+ l2_size = get_kstat_value(ksp, "l2_size");
+ l2_read_bytes = get_kstat_value(ksp, "l2_read_bytes");
+ 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");
+
+
+ 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);
+
+ 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);
+
+ return (0);
+}
+
+static int za_init (void) /* {{{ */
+{
+ ksp = NULL;
+
+ /* kstats chain already opened by update_kstat (using *kc), verify everything went fine. */
+ if (kc == NULL)
+ {
+ ERROR ("zfs_arc plugin: kstat chain control structure not available.");
+ return (-1);
+ }
+
+ return (0);
+} /* }}} int za_init */
+
+void module_register (void)
+{
+ plugin_register_init ("zfs_arc", za_init);
+ plugin_register_read ("zfs_arc", za_read);
+} /* void module_register */
+
+/* vmi: set sw=8 noexpandtab fdm=marker : */