diff options
author | ilyam8 <ilya@netdata.cloud> | 2022-05-08 18:08:49 +0300 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2022-05-30 07:50:57 +0200 |
commit | 491c6f1044630a4134393ef91df8bcf387ae5268 (patch) | |
tree | 952f9ef9f65fc56e4efb20a73d72e6920fa84c1d | |
parent | 98cbdc6dcad40a2f59ec0ec9ff752a46aa0762de (diff) |
consider only shrinkable ZFS ARC as cache on Linux
-rw-r--r-- | linux/LinuxProcessList.c | 2 | ||||
-rw-r--r-- | linux/Platform.c | 9 | ||||
-rw-r--r-- | zfs/ZfsArcStats.h | 1 |
3 files changed, 10 insertions, 2 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index 7a7e0a28..e799661a 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -1922,6 +1922,7 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) { switch (buffer[0]) { case 'c': + tryRead("c_min", &lpl->zfs.min); tryRead("c_max", &lpl->zfs.max); tryReadFlag("compressed_size", &lpl->zfs.compressed, lpl->zfs.isCompressed); break; @@ -1956,6 +1957,7 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) { lpl->zfs.enabled = (lpl->zfs.size > 0 ? 1 : 0); lpl->zfs.size /= 1024; + lpl->zfs.min /= 1024; lpl->zfs.max /= 1024; lpl->zfs.MFU /= 1024; lpl->zfs.MRU /= 1024; diff --git a/linux/Platform.c b/linux/Platform.c index d9c23394..38b66e83 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -358,8 +358,13 @@ void Platform_setMemoryValues(Meter* this) { this->values[4] = pl->availableMem; if (lpl->zfs.enabled != 0 && !Running_containerized) { - this->values[0] -= lpl->zfs.size; - this->values[3] += lpl->zfs.size; + // ZFS does not shrink below the value of zfs_arc_min. + unsigned long long int shrinkableSize = 0; + if (lpl->zfs.size > lpl->zfs.min) + shrinkableSize = lpl->zfs.size - lpl->zfs.min; + this->values[0] -= shrinkableSize; + this->values[3] += shrinkableSize; + this->values[4] += shrinkableSize; } } diff --git a/zfs/ZfsArcStats.h b/zfs/ZfsArcStats.h index e2cb4117..1fe72361 100644 --- a/zfs/ZfsArcStats.h +++ b/zfs/ZfsArcStats.h @@ -10,6 +10,7 @@ in the source distribution for its full text. typedef struct ZfsArcStats_ { int enabled; int isCompressed; + unsigned long long int min; unsigned long long int max; unsigned long long int size; unsigned long long int MFU; |