Refactor openzfs_sysctl_init() and ZfsArcMeter...

openzfs_sysctl_init() now returns void instead of int.
The ZfsArcStats->enabled flag is set inside the init function
now, instead of having to be set from its return value.
Preparation for more flag setting in Compressed ARC commit.

ZfsArcMeter_readStats() added and all Meter->values[] setting
moved to it, eliminating duplicated code in
{darwin,freebsd,linux,solaris}/Platform.c.
This commit is contained in:
Ross Williams
2019-09-03 18:21:33 +00:00
parent ff6914e4ad
commit e450b58636
10 changed files with 34 additions and 56 deletions

View File

@ -6,6 +6,7 @@ in the source distribution for its full text.
*/
#include "ZfsArcMeter.h"
#include "ZfsArcStats.h"
#include "CRT.h"
#include "Platform.h"
@ -17,6 +18,8 @@ in the source distribution for its full text.
#include <assert.h>
/*{
#include "ZfsArcStats.h"
#include "Meter.h"
}*/
@ -24,6 +27,21 @@ int ZfsArcMeter_attributes[] = {
ZFS_MFU, ZFS_MRU, ZFS_ANON, ZFS_HEADER, ZFS_OTHER
};
void ZfsArcMeter_readStats(Meter* this, ZfsArcStats* stats) {
this->total = stats->max;
this->values[0] = stats->MFU;
this->values[1] = stats->MRU;
this->values[2] = stats->anon;
this->values[3] = stats->header;
this->values[4] = stats->other;
// "Hide" the last value so it can
// only be accessed by index and is not
// displayed by the Bar or Graph style
Meter_setItems(this, 5);
this->values[5] = stats->size;
}
static void ZfsArcMeter_updateValues(Meter* this, char* buffer, int size) {
int written;
Platform_setZfsArcValues(this);

View File

@ -9,10 +9,14 @@ Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
#include "ZfsArcStats.h"
#include "Meter.h"
extern int ZfsArcMeter_attributes[];
void ZfsArcMeter_readStats(Meter* this, ZfsArcStats* stats);
extern MeterClass ZfsArcMeter_class;
#endif

View File

@ -25,13 +25,14 @@ static int MIB_kstat_zfs_misc_arcstats_other_size[5];
#include "zfs/ZfsArcStats.h"
}*/
int openzfs_sysctl_init() {
void openzfs_sysctl_init(ZfsArcStats *stats) {
size_t len;
unsigned long long int arcSize;
len = sizeof(arcSize);
if (sysctlbyname("kstat.zfs.misc.arcstats.size", &arcSize, &len,
NULL, 0) == 0 && arcSize != 0) {
stats->enabled = 1;
len = 5; sysctlnametomib("kstat.zfs.misc.arcstats.size", MIB_kstat_zfs_misc_arcstats_size, &len);
sysctlnametomib("kstat.zfs.misc.arcstats.c_max", MIB_kstat_zfs_misc_arcstats_c_max, &len);
@ -40,9 +41,8 @@ int openzfs_sysctl_init() {
sysctlnametomib("kstat.zfs.misc.arcstats.anon_size", MIB_kstat_zfs_misc_arcstats_anon_size, &len);
sysctlnametomib("kstat.zfs.misc.arcstats.hdr_size", MIB_kstat_zfs_misc_arcstats_hdr_size, &len);
sysctlnametomib("kstat.zfs.misc.arcstats.other_size", MIB_kstat_zfs_misc_arcstats_other_size, &len);
return 1;
} else {
return 0;
stats->enabled = 0;
}
}

View File

@ -1,7 +1,7 @@
/* Do not edit this file. It was automatically generated. */
#ifndef HEADER_openzfs
#define HEADER_openzfs
#ifndef HEADER_openzfs_sysctl
#define HEADER_openzfs_sysctl
/*
htop - zfs/openzfs_sysctl.h
(C) 2014 Hisham H. Muhammad
@ -11,7 +11,7 @@ in the source distribution for its full text.
#include "zfs/ZfsArcStats.h"
int openzfs_sysctl_init();
void openzfs_sysctl_init(ZfsArcStats *stats);
void openzfs_sysctl_updateArcStats(ZfsArcStats *stats);