mirror of https://github.com/xzeldon/htop.git
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:
parent
ff6914e4ad
commit
e450b58636
|
@ -151,7 +151,7 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, ui
|
||||||
ProcessList_getVMStats(&this->vm_stats);
|
ProcessList_getVMStats(&this->vm_stats);
|
||||||
|
|
||||||
/* Initialize the ZFS kstats, if zfs.kext loaded */
|
/* Initialize the ZFS kstats, if zfs.kext loaded */
|
||||||
this->zfs.enabled = openzfs_sysctl_init();
|
openzfs_sysctl_init(&this->zfs);
|
||||||
openzfs_sysctl_updateArcStats(&this->zfs);
|
openzfs_sysctl_updateArcStats(&this->zfs);
|
||||||
|
|
||||||
this->super.kernelThreads = 0;
|
this->super.kernelThreads = 0;
|
||||||
|
|
|
@ -246,18 +246,7 @@ void Platform_setSwapValues(Meter* mtr) {
|
||||||
void Platform_setZfsArcValues(Meter* this) {
|
void Platform_setZfsArcValues(Meter* this) {
|
||||||
DarwinProcessList* dpl = (DarwinProcessList*) this->pl;
|
DarwinProcessList* dpl = (DarwinProcessList*) this->pl;
|
||||||
|
|
||||||
this->total = dpl->zfs.max;
|
ZfsArcMeter_readStats(this, &(dpl->zfs));
|
||||||
this->values[0] = dpl->zfs.MFU;
|
|
||||||
this->values[1] = dpl->zfs.MRU;
|
|
||||||
this->values[2] = dpl->zfs.anon;
|
|
||||||
this->values[3] = dpl->zfs.header;
|
|
||||||
this->values[4] = dpl->zfs.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] = dpl->zfs.size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* Platform_getProcessEnv(pid_t pid) {
|
char* Platform_getProcessEnv(pid_t pid) {
|
||||||
|
|
|
@ -118,7 +118,7 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, ui
|
||||||
|
|
||||||
len = 2; sysctlnametomib("vfs.bufspace", MIB_vfs_bufspace, &len);
|
len = 2; sysctlnametomib("vfs.bufspace", MIB_vfs_bufspace, &len);
|
||||||
|
|
||||||
fpl->zfs.enabled = openzfs_sysctl_init();
|
openzfs_sysctl_init(&fpl->zfs);
|
||||||
openzfs_sysctl_updateArcStats(&fpl->zfs);
|
openzfs_sysctl_updateArcStats(&fpl->zfs);
|
||||||
|
|
||||||
int smp = 0;
|
int smp = 0;
|
||||||
|
|
|
@ -202,18 +202,7 @@ void Platform_setSwapValues(Meter* this) {
|
||||||
void Platform_setZfsArcValues(Meter* this) {
|
void Platform_setZfsArcValues(Meter* this) {
|
||||||
FreeBSDProcessList* fpl = (FreeBSDProcessList*) this->pl;
|
FreeBSDProcessList* fpl = (FreeBSDProcessList*) this->pl;
|
||||||
|
|
||||||
this->total = fpl->zfs.max;
|
ZfsArcMeter_readStats(this, &(fpl->zfs));
|
||||||
this->values[0] = fpl->zfs.MFU;
|
|
||||||
this->values[1] = fpl->zfs.MRU;
|
|
||||||
this->values[2] = fpl->zfs.anon;
|
|
||||||
this->values[3] = fpl->zfs.header;
|
|
||||||
this->values[4] = fpl->zfs.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] = fpl->zfs.size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Platform_setTasksValues(Meter* this) {
|
void Platform_setTasksValues(Meter* this) {
|
||||||
|
|
|
@ -218,18 +218,7 @@ void Platform_setSwapValues(Meter* this) {
|
||||||
void Platform_setZfsArcValues(Meter* this) {
|
void Platform_setZfsArcValues(Meter* this) {
|
||||||
LinuxProcessList* lpl = (LinuxProcessList*) this->pl;
|
LinuxProcessList* lpl = (LinuxProcessList*) this->pl;
|
||||||
|
|
||||||
this->total = lpl->zfs.max;
|
ZfsArcMeter_readStats(this, &(lpl->zfs));
|
||||||
this->values[0] = lpl->zfs.MFU;
|
|
||||||
this->values[1] = lpl->zfs.MRU;
|
|
||||||
this->values[2] = lpl->zfs.anon;
|
|
||||||
this->values[3] = lpl->zfs.header;
|
|
||||||
this->values[4] = lpl->zfs.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] = lpl->zfs.size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* Platform_getProcessEnv(pid_t pid) {
|
char* Platform_getProcessEnv(pid_t pid) {
|
||||||
|
|
|
@ -225,18 +225,7 @@ void Platform_setSwapValues(Meter* this) {
|
||||||
void Platform_setZfsArcValues(Meter* this) {
|
void Platform_setZfsArcValues(Meter* this) {
|
||||||
SolarisProcessList* spl = (SolarisProcessList*) this->pl;
|
SolarisProcessList* spl = (SolarisProcessList*) this->pl;
|
||||||
|
|
||||||
this->total = spl->zfs.max;
|
ZfsArcMeter_readStats(this, &(spl->zfs));
|
||||||
this->values[0] = spl->zfs.MFU;
|
|
||||||
this->values[1] = spl->zfs.MRU;
|
|
||||||
this->values[2] = spl->zfs.anon;
|
|
||||||
this->values[3] = spl->zfs.header;
|
|
||||||
this->values[4] = spl->zfs.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] = spl->zfs.size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int Platform_buildenv(void *accum, struct ps_prochandle *Phandle, uintptr_t addr, const char *str) {
|
static int Platform_buildenv(void *accum, struct ps_prochandle *Phandle, uintptr_t addr, const char *str) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ in the source distribution for its full text.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ZfsArcMeter.h"
|
#include "ZfsArcMeter.h"
|
||||||
|
#include "ZfsArcStats.h"
|
||||||
|
|
||||||
#include "CRT.h"
|
#include "CRT.h"
|
||||||
#include "Platform.h"
|
#include "Platform.h"
|
||||||
|
@ -17,6 +18,8 @@ in the source distribution for its full text.
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
/*{
|
/*{
|
||||||
|
#include "ZfsArcStats.h"
|
||||||
|
|
||||||
#include "Meter.h"
|
#include "Meter.h"
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
@ -24,6 +27,21 @@ int ZfsArcMeter_attributes[] = {
|
||||||
ZFS_MFU, ZFS_MRU, ZFS_ANON, ZFS_HEADER, ZFS_OTHER
|
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) {
|
static void ZfsArcMeter_updateValues(Meter* this, char* buffer, int size) {
|
||||||
int written;
|
int written;
|
||||||
Platform_setZfsArcValues(this);
|
Platform_setZfsArcValues(this);
|
||||||
|
|
|
@ -9,10 +9,14 @@ Released under the GNU GPL, see the COPYING file
|
||||||
in the source distribution for its full text.
|
in the source distribution for its full text.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "ZfsArcStats.h"
|
||||||
|
|
||||||
#include "Meter.h"
|
#include "Meter.h"
|
||||||
|
|
||||||
extern int ZfsArcMeter_attributes[];
|
extern int ZfsArcMeter_attributes[];
|
||||||
|
|
||||||
|
void ZfsArcMeter_readStats(Meter* this, ZfsArcStats* stats);
|
||||||
|
|
||||||
extern MeterClass ZfsArcMeter_class;
|
extern MeterClass ZfsArcMeter_class;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -25,13 +25,14 @@ static int MIB_kstat_zfs_misc_arcstats_other_size[5];
|
||||||
#include "zfs/ZfsArcStats.h"
|
#include "zfs/ZfsArcStats.h"
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
int openzfs_sysctl_init() {
|
void openzfs_sysctl_init(ZfsArcStats *stats) {
|
||||||
size_t len;
|
size_t len;
|
||||||
unsigned long long int arcSize;
|
unsigned long long int arcSize;
|
||||||
|
|
||||||
len = sizeof(arcSize);
|
len = sizeof(arcSize);
|
||||||
if (sysctlbyname("kstat.zfs.misc.arcstats.size", &arcSize, &len,
|
if (sysctlbyname("kstat.zfs.misc.arcstats.size", &arcSize, &len,
|
||||||
NULL, 0) == 0 && arcSize != 0) {
|
NULL, 0) == 0 && arcSize != 0) {
|
||||||
|
stats->enabled = 1;
|
||||||
len = 5; sysctlnametomib("kstat.zfs.misc.arcstats.size", MIB_kstat_zfs_misc_arcstats_size, &len);
|
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);
|
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.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.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);
|
sysctlnametomib("kstat.zfs.misc.arcstats.other_size", MIB_kstat_zfs_misc_arcstats_other_size, &len);
|
||||||
return 1;
|
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
stats->enabled = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* Do not edit this file. It was automatically generated. */
|
/* Do not edit this file. It was automatically generated. */
|
||||||
|
|
||||||
#ifndef HEADER_openzfs
|
#ifndef HEADER_openzfs_sysctl
|
||||||
#define HEADER_openzfs
|
#define HEADER_openzfs_sysctl
|
||||||
/*
|
/*
|
||||||
htop - zfs/openzfs_sysctl.h
|
htop - zfs/openzfs_sysctl.h
|
||||||
(C) 2014 Hisham H. Muhammad
|
(C) 2014 Hisham H. Muhammad
|
||||||
|
@ -11,7 +11,7 @@ in the source distribution for its full text.
|
||||||
|
|
||||||
#include "zfs/ZfsArcStats.h"
|
#include "zfs/ZfsArcStats.h"
|
||||||
|
|
||||||
int openzfs_sysctl_init();
|
void openzfs_sysctl_init(ZfsArcStats *stats);
|
||||||
|
|
||||||
void openzfs_sysctl_updateArcStats(ZfsArcStats *stats);
|
void openzfs_sysctl_updateArcStats(ZfsArcStats *stats);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue