summaryrefslogtreecommitdiffstats
path: root/collectors/freebsd.plugin
diff options
context:
space:
mode:
authorVladimir Kobal <vlad@prokk.net>2022-05-11 18:02:55 +0300
committerGitHub <noreply@github.com>2022-05-11 18:02:55 +0300
commit787c751455b1ca731cdad63d5dcd4fd9cf5bb4ff (patch)
treed9ed762da56d40f8812fb4afc60eb8ecbe914332 /collectors/freebsd.plugin
parentd7b33aa2237345e0c3b2c9718bb0bea043665c35 (diff)
Consider ZFS ARC shrinkable as cache on FreeBSD (#12879)
Diffstat (limited to 'collectors/freebsd.plugin')
-rw-r--r--collectors/freebsd.plugin/freebsd_kstat_zfs.c8
-rw-r--r--collectors/freebsd.plugin/freebsd_sysctl.c12
-rw-r--r--collectors/freebsd.plugin/plugin_freebsd.h3
3 files changed, 17 insertions, 6 deletions
diff --git a/collectors/freebsd.plugin/freebsd_kstat_zfs.c b/collectors/freebsd.plugin/freebsd_kstat_zfs.c
index 8b5cc5799f..142fdb9744 100644
--- a/collectors/freebsd.plugin/freebsd_kstat_zfs.c
+++ b/collectors/freebsd.plugin/freebsd_kstat_zfs.c
@@ -5,6 +5,8 @@
extern struct arcstats arcstats;
+unsigned long long zfs_arcstats_shrinkable_cache_size_bytes = 0;
+
// --------------------------------------------------------------------------------------------------------------------
// kstat.zfs.misc.arcstats
@@ -213,6 +215,12 @@ int do_kstat_zfs_misc_arcstats(int update_every, usec_t dt) {
// missing mib: GETSYSCTL_SIMPLE("kstat.zfs.misc.arcstats.arc_need_free", mibs.arc_need_free, arcstats.arc_need_free);
// missing mib: GETSYSCTL_SIMPLE("kstat.zfs.misc.arcstats.arc_sys_free", mibs.arc_sys_free, arcstats.arc_sys_free);
+ if (arcstats.size > arcstats.c_min) {
+ zfs_arcstats_shrinkable_cache_size_bytes = arcstats.size - arcstats.c_min;
+ } else {
+ zfs_arcstats_shrinkable_cache_size_bytes = 0;
+ }
+
generate_charts_arcstats("freebsd.plugin", "zfs", show_zero_charts, update_every);
generate_charts_arc_summary("freebsd.plugin", "zfs", show_zero_charts, update_every);
diff --git a/collectors/freebsd.plugin/freebsd_sysctl.c b/collectors/freebsd.plugin/freebsd_sysctl.c
index 3dc1fbfb16..eb339b23b8 100644
--- a/collectors/freebsd.plugin/freebsd_sysctl.c
+++ b/collectors/freebsd.plugin/freebsd_sysctl.c
@@ -1026,10 +1026,8 @@ int do_system_ram(int update_every, usec_t dt) {
rd_free = rrddim_add(st, "free", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
rd_active = rrddim_add(st, "active", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
rd_inactive = rrddim_add(st, "inactive", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
- rd_wired = rrddim_add(st, "wired", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
-#if __FreeBSD_version < 1200016
- rd_cache = rrddim_add(st, "cache", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
-#endif
+ rd_wired = rrddim_add(st, "wired", NULL, 1, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
+ rd_cache = rrddim_add(st, "cache", NULL, 1, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
#if defined(NETDATA_COLLECT_LAUNDRY)
rd_laundry = rrddim_add(st, "laundry", NULL, system_pagesize, MEGA_FACTOR, RRD_ALGORITHM_ABSOLUTE);
#endif
@@ -1040,9 +1038,11 @@ int do_system_ram(int update_every, usec_t dt) {
rrddim_set_by_pointer(st, rd_free, vmmeter_data.v_free_count);
rrddim_set_by_pointer(st, rd_active, vmmeter_data.v_active_count);
rrddim_set_by_pointer(st, rd_inactive, vmmeter_data.v_inactive_count);
- rrddim_set_by_pointer(st, rd_wired, vmmeter_data.v_wire_count);
+ rrddim_set_by_pointer(st, rd_wired, vmmeter_data.v_wire_count * system_pagesize - zfs_arcstats_shrinkable_cache_size_bytes);
#if __FreeBSD_version < 1200016
- rrddim_set_by_pointer(st, rd_cache, vmmeter_data.v_cache_count);
+ rrddim_set_by_pointer(st, rd_cache, vmmeter_data.v_cache_count * system_pagesize + zfs_arcstats_shrinkable_cache_size_bytes);
+#else
+ rrddim_set_by_pointer(st, rd_cache, zfs_arcstats_shrinkable_cache_size_bytes);
#endif
#if defined(NETDATA_COLLECT_LAUNDRY)
rrddim_set_by_pointer(st, rd_laundry, vmmeter_data.v_laundry_count);
diff --git a/collectors/freebsd.plugin/plugin_freebsd.h b/collectors/freebsd.plugin/plugin_freebsd.h
index 26f76b6bf8..3a4ec13a7b 100644
--- a/collectors/freebsd.plugin/plugin_freebsd.h
+++ b/collectors/freebsd.plugin/plugin_freebsd.h
@@ -49,4 +49,7 @@ extern int do_kstat_zfs_misc_arcstats(int update_every, usec_t dt);
extern int do_kstat_zfs_misc_zio_trim(int update_every, usec_t dt);
extern int do_ipfw(int update_every, usec_t dt);
+// metrics that need to be shared among data collectors
+extern unsigned long long zfs_arcstats_shrinkable_cache_size_bytes;
+
#endif /* NETDATA_PLUGIN_FREEBSD_H */