consider only shrinkable ZFS ARC as cache on Linux

This commit is contained in:
ilyam8 2022-05-08 18:08:49 +03:00 committed by BenBE
parent 98cbdc6dca
commit 491c6f1044
3 changed files with 10 additions and 2 deletions

View File

@ -1922,6 +1922,7 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
switch (buffer[0]) { switch (buffer[0]) {
case 'c': case 'c':
tryRead("c_min", &lpl->zfs.min);
tryRead("c_max", &lpl->zfs.max); tryRead("c_max", &lpl->zfs.max);
tryReadFlag("compressed_size", &lpl->zfs.compressed, lpl->zfs.isCompressed); tryReadFlag("compressed_size", &lpl->zfs.compressed, lpl->zfs.isCompressed);
break; break;
@ -1956,6 +1957,7 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
lpl->zfs.enabled = (lpl->zfs.size > 0 ? 1 : 0); lpl->zfs.enabled = (lpl->zfs.size > 0 ? 1 : 0);
lpl->zfs.size /= 1024; lpl->zfs.size /= 1024;
lpl->zfs.min /= 1024;
lpl->zfs.max /= 1024; lpl->zfs.max /= 1024;
lpl->zfs.MFU /= 1024; lpl->zfs.MFU /= 1024;
lpl->zfs.MRU /= 1024; lpl->zfs.MRU /= 1024;

View File

@ -358,8 +358,13 @@ void Platform_setMemoryValues(Meter* this) {
this->values[4] = pl->availableMem; this->values[4] = pl->availableMem;
if (lpl->zfs.enabled != 0 && !Running_containerized) { if (lpl->zfs.enabled != 0 && !Running_containerized) {
this->values[0] -= lpl->zfs.size; // ZFS does not shrink below the value of zfs_arc_min.
this->values[3] += lpl->zfs.size; 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;
} }
} }

View File

@ -10,6 +10,7 @@ in the source distribution for its full text.
typedef struct ZfsArcStats_ { typedef struct ZfsArcStats_ {
int enabled; int enabled;
int isCompressed; int isCompressed;
unsigned long long int min;
unsigned long long int max; unsigned long long int max;
unsigned long long int size; unsigned long long int size;
unsigned long long int MFU; unsigned long long int MFU;