summaryrefslogtreecommitdiffstats
path: root/linux
diff options
context:
space:
mode:
authorRoss Williams <ross@ross-williams.net>2019-07-07 23:27:00 +0000
committerRoss Williams <ross@ross-williams.net>2019-07-07 23:10:54 -0400
commita88d2e313df7f5f2b781d5b14ffe0e7710018c10 (patch)
tree623e2c81c9335e37653c870f64190b2ed22cc365 /linux
parentfc8e9a2d3e25e35c0f9903baa345b1744b12b6cb (diff)
Refactor common OpenZFS sysctl access
Darwin and FreeBSD export zfs kstats through the same APIs, so moving functions into a common file.
Diffstat (limited to 'linux')
-rw-r--r--linux/LinuxProcessList.c40
-rw-r--r--linux/LinuxProcessList.h10
-rw-r--r--linux/Platform.c14
3 files changed, 26 insertions, 38 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index 4d19185c..3e889104 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -46,6 +46,7 @@ in the source distribution for its full text.
/*{
#include "ProcessList.h"
+#include "zfs/ZfsArcStats.h"
extern long long btime;
@@ -95,14 +96,7 @@ typedef struct LinuxProcessList_ {
int netlink_family;
#endif
- int zfsArcEnabled;
- unsigned long long int memZfsArc;
- unsigned long long int zfsArcMax;
- unsigned long long int zfsArcMFU;
- unsigned long long int zfsArcMRU;
- unsigned long long int zfsArcAnon;
- unsigned long long int zfsArcHeader;
- unsigned long long int zfsArcOther;
+ ZfsArcStats zfs;
} LinuxProcessList;
#ifndef PROCDIR
@@ -984,7 +978,7 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
FILE* file = fopen(PROCARCSTATSFILE, "r");
if (file == NULL) {
- lpl->zfsArcEnabled = 0;
+ lpl->zfs.enabled = 0;
return;
}
char buffer[128];
@@ -992,13 +986,13 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
#define tryRead(label, variable) do { if (String_startsWith(buffer, label) && sscanf(buffer + strlen(label), " %*2u %32llu", variable)) { break; } } while(0)
switch (buffer[0]) {
case 'c':
- tryRead("c_max", &lpl->zfsArcMax);
+ tryRead("c_max", &lpl->zfs.max);
break;
case 's':
- tryRead("size", &lpl->memZfsArc);
+ tryRead("size", &lpl->zfs.size);
break;
case 'h':
- tryRead("hdr_size", &lpl->zfsArcHeader);
+ tryRead("hdr_size", &lpl->zfs.header);
break;
case 'd':
tryRead("dbuf_size", &dbufSize);
@@ -1008,25 +1002,25 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
tryRead("bonus_size", &bonusSize);
break;
case 'a':
- tryRead("anon_size", &lpl->zfsArcAnon);
+ tryRead("anon_size", &lpl->zfs.anon);
break;
case 'm':
- tryRead("mfu_size", &lpl->zfsArcMFU);
- tryRead("mru_size", &lpl->zfsArcMRU);
+ tryRead("mfu_size", &lpl->zfs.MFU);
+ tryRead("mru_size", &lpl->zfs.MRU);
break;
}
#undef tryRead
}
fclose(file);
- lpl->zfsArcEnabled = (lpl->memZfsArc > 0 ? 1 : 0);
- lpl->memZfsArc /= 1024;
- lpl->zfsArcMax /= 1024;
- lpl->zfsArcMFU /= 1024;
- lpl->zfsArcMRU /= 1024;
- lpl->zfsArcAnon /= 1024;
- lpl->zfsArcHeader /= 1024;
- lpl->zfsArcOther = (dbufSize + dnodeSize + bonusSize) / 1024;
+ lpl->zfs.enabled = (lpl->zfs.size > 0 ? 1 : 0);
+ lpl->zfs.size /= 1024;
+ lpl->zfs.max /= 1024;
+ lpl->zfs.MFU /= 1024;
+ lpl->zfs.MRU /= 1024;
+ lpl->zfs.anon /= 1024;
+ lpl->zfs.header /= 1024;
+ lpl->zfs.other = (dbufSize + dnodeSize + bonusSize) / 1024;
}
static inline double LinuxProcessList_scanCPUTime(LinuxProcessList* this) {
diff --git a/linux/LinuxProcessList.h b/linux/LinuxProcessList.h
index 749231e1..353fe603 100644
--- a/linux/LinuxProcessList.h
+++ b/linux/LinuxProcessList.h
@@ -19,6 +19,7 @@ in the source distribution for its full text.
#include "ProcessList.h"
+#include "zfs/ZfsArcStats.h"
extern long long btime;
@@ -68,14 +69,7 @@ typedef struct LinuxProcessList_ {
int netlink_family;
#endif
- int zfsArcEnabled;
- unsigned long long int memZfsArc;
- unsigned long long int zfsArcMax;
- unsigned long long int zfsArcMFU;
- unsigned long long int zfsArcMRU;
- unsigned long long int zfsArcAnon;
- unsigned long long int zfsArcHeader;
- unsigned long long int zfsArcOther;
+ ZfsArcStats zfs;
} LinuxProcessList;
#ifndef PROCDIR
diff --git a/linux/Platform.c b/linux/Platform.c
index 4e73c61e..e2a3c6d3 100644
--- a/linux/Platform.c
+++ b/linux/Platform.c
@@ -218,18 +218,18 @@ void Platform_setSwapValues(Meter* this) {
void Platform_setZfsArcValues(Meter* this) {
LinuxProcessList* lpl = (LinuxProcessList*) this->pl;
- this->total = lpl->zfsArcMax;
- this->values[0] = lpl->zfsArcMFU;
- this->values[1] = lpl->zfsArcMRU;
- this->values[2] = lpl->zfsArcAnon;
- this->values[3] = lpl->zfsArcHeader;
- this->values[4] = lpl->zfsArcOther;
+ this->total = lpl->zfs.max;
+ 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->memZfsArc;
+ this->values[5] = lpl->zfs.size;
}
char* Platform_getProcessEnv(pid_t pid) {

© 2014-2024 Faster IT GmbH | imprint | privacy policy