diff options
author | Ross Williams <ross@ross-williams.net> | 2019-07-07 23:27:00 +0000 |
---|---|---|
committer | Ross Williams <ross@ross-williams.net> | 2019-07-07 23:10:54 -0400 |
commit | a88d2e313df7f5f2b781d5b14ffe0e7710018c10 (patch) | |
tree | 623e2c81c9335e37653c870f64190b2ed22cc365 /linux | |
parent | fc8e9a2d3e25e35c0f9903baa345b1744b12b6cb (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.c | 40 | ||||
-rw-r--r-- | linux/LinuxProcessList.h | 10 | ||||
-rw-r--r-- | linux/Platform.c | 14 |
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) { |