// SPDX-License-Identifier: GPL-3.0-or-later
#include "zfs_common.h"
struct arcstats arcstats = { 0 };
void generate_charts_arcstats(const char *plugin, const char *module, int show_zero_charts, int update_every) {
static int do_arc_size = -1, do_l2_size = -1, do_reads = -1, do_l2bytes = -1, do_ahits = -1, do_dhits = -1, \
do_phits = -1, do_mhits = -1, do_l2hits = -1, do_list_hits = -1;
if(unlikely(do_arc_size == -1))
do_arc_size = do_l2_size = do_reads = do_l2bytes = do_ahits = do_dhits = do_phits = do_mhits \
= do_l2hits = do_list_hits = show_zero_charts;
// ARC reads
unsigned long long aread = arcstats.hits + arcstats.misses;
// Demand reads
unsigned long long dhit = arcstats.demand_data_hits + arcstats.demand_metadata_hits;
unsigned long long dmiss = arcstats.demand_data_misses + arcstats.demand_metadata_misses;
unsigned long long dread = dhit + dmiss;
// Prefetch reads
unsigned long long phit = arcstats.prefetch_data_hits + arcstats.prefetch_metadata_hits;
unsigned long long pmiss = arcstats.prefetch_data_misses + arcstats.prefetch_metadata_misses;
unsigned long long pread = phit + pmiss;
// Metadata reads
unsigned long long mhit = arcstats.prefetch_metadata_hits + arcstats.demand_metadata_hits;
unsigned long long mmiss = arcstats.prefetch_metadata_misses + arcstats.demand_metadata_misses;
unsigned long long mread = mhit + mmiss;
// l2 reads
unsigned long long l2hit = arcstats.l2_hits;
unsigned long long l2miss = arcstats.l2_misses;
unsigned long long l2read = l2hit + l2miss;
// --------------------------------------------------------------------
if(do_arc_size == CONFIG_BOOLEAN_YES || arcstats.size || arcstats.c || arcstats.c_min || arcstats.c_max) {
do_arc_size = CONFIG_BOOLEAN_YES;
static RRDSET *st_arc_size = NULL;
static RRDDIM *rd_arc_size = NULL;
static RRDDIM *rd_arc_target_size = NULL;
static RRDDIM *rd_arc_target_min_size = NULL;
static RRDDIM *rd_arc_target_max_size = NULL;
if (unlikely(!st_arc_size)) {
st_arc_size = rrdset_create_localhost(
"zfs"
, "arc_size"
, NULL
, ZFS_FAMILY_SIZE
, NULL
, "ZFS ARC Size"
, "MiB"
, plugin
, module
, NETDATA_CHART_PRIO_ZFS_ARC_SIZE
, update_every
, RRDSET_TYPE_AREA
);
rd_arc_size = rrddim_add(st_arc_size, "size", "arcsz", 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
rd_arc_target_size = rrddim_add(st_arc_size, "target", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
rd_arc_target_min_size = rrddim_add(st_arc_size, "min", "min (hard limit)", 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
rd_arc_target_max_size = rrddim_add(st_arc_size, "max", "max (high water)", 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
}
rrddim_set_by_pointer(st_arc_size, rd_arc_size, arcstats.size);
rrddim_set_by_pointer(st_arc_size, rd_arc_target_size, arcstats.c);
rrddim_set_by_pointer(st_arc_size, rd_arc_target_min_size, arcstats.c_min);
rrddim_set_by_pointer(st_arc_size