summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilyam8 <ilya@netdata.cloud>2022-05-08 18:08:49 +0300
committerBenBE <BenBE@geshi.org>2022-05-30 07:50:57 +0200
commit491c6f1044630a4134393ef91df8bcf387ae5268 (patch)
tree952f9ef9f65fc56e4efb20a73d72e6920fa84c1d
parent98cbdc6dcad40a2f59ec0ec9ff752a46aa0762de (diff)
consider only shrinkable ZFS ARC as cache on Linux
-rw-r--r--linux/LinuxProcessList.c2
-rw-r--r--linux/Platform.c9
-rw-r--r--zfs/ZfsArcStats.h1
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;

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