Skip to content

Commit

Permalink
{Memory,Swap}Meter: add "compressed memory" metrics
Browse files Browse the repository at this point in the history
For now, the semantics are mostly fit for Linux zswap subsystem. For
instance, we add the third swap usage metric that indicates the amount
of memory that is accounted to swap but in fact stored elsewhere. This
exactly matches the definition of frontswap/zswap, and is probably of
little use to all other platforms.
  • Loading branch information
intelfx authored and BenBE committed Apr 23, 2023
1 parent b2ada27 commit b29b33e
Show file tree
Hide file tree
Showing 15 changed files with 71 additions and 14 deletions.
6 changes: 4 additions & 2 deletions Action.c
Original file line number Diff line number Diff line change
Expand Up @@ -674,10 +674,11 @@ static Htop_Reaction actionHelp(State* st) {
mvaddstr(line++, 0, "Memory bar: ");
addattrstr(CRT_colors[BAR_BORDER], "[");
addbartext(CRT_colors[MEMORY_USED], "", "used");
addbartext(CRT_colors[MEMORY_COMPRESSED], "/", "compressed");
addbartext(CRT_colors[MEMORY_BUFFERS_TEXT], "/", "buffers");
addbartext(CRT_colors[MEMORY_SHARED], "/", "shared");
addbartext(CRT_colors[MEMORY_CACHE], "/", "cache");
addbartext(CRT_colors[BAR_SHADOW], " ", "used");
addbartext(CRT_colors[BAR_SHADOW], " ", "used");
addbartext(CRT_colors[BAR_SHADOW], "/", "total");
addattrstr(CRT_colors[BAR_BORDER], "]");

Expand All @@ -687,10 +688,11 @@ static Htop_Reaction actionHelp(State* st) {
addbartext(CRT_colors[SWAP], "", "used");
#ifdef HTOP_LINUX
addbartext(CRT_colors[SWAP_CACHE], "/", "cache");
addbartext(CRT_colors[SWAP_FRONTSWAP], "/", "frontswap");
#else
addbartext(CRT_colors[SWAP_CACHE], " ", "");
#endif
addbartext(CRT_colors[BAR_SHADOW], " ", "used");
addbartext(CRT_colors[BAR_SHADOW], " ", "used");
addbartext(CRT_colors[BAR_SHADOW], "/", "total");
addattrstr(CRT_colors[BAR_BORDER], "]");

Expand Down
12 changes: 12 additions & 0 deletions CRT.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,13 +163,15 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[BAR_SHADOW] = A_BOLD | ColorPairGrayBlack,
[SWAP] = ColorPair(Red, Black),
[SWAP_CACHE] = ColorPair(Yellow, Black),
[SWAP_FRONTSWAP] = A_BOLD | ColorPairGrayBlack,
[GRAPH_1] = A_BOLD | ColorPair(Cyan, Black),
[GRAPH_2] = ColorPair(Cyan, Black),
[MEMORY_USED] = ColorPair(Green, Black),
[MEMORY_BUFFERS] = A_BOLD | ColorPair(Blue, Black),
[MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Blue, Black),
[MEMORY_CACHE] = ColorPair(Yellow, Black),
[MEMORY_SHARED] = ColorPair(Magenta, Black),
[MEMORY_COMPRESSED] = A_BOLD | ColorPairGrayBlack,
[HUGEPAGE_1] = ColorPair(Green, Black),
[HUGEPAGE_2] = ColorPair(Yellow, Black),
[HUGEPAGE_3] = ColorPair(Red, Black),
Expand Down Expand Up @@ -274,13 +276,15 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[BAR_SHADOW] = A_DIM,
[SWAP] = A_BOLD,
[SWAP_CACHE] = A_NORMAL,
[SWAP_FRONTSWAP] = A_DIM,
[GRAPH_1] = A_BOLD,
[GRAPH_2] = A_NORMAL,
[MEMORY_USED] = A_BOLD,
[MEMORY_BUFFERS] = A_NORMAL,
[MEMORY_BUFFERS_TEXT] = A_NORMAL,
[MEMORY_CACHE] = A_NORMAL,
[MEMORY_SHARED] = A_NORMAL,
[MEMORY_COMPRESSED] = A_DIM,
[HUGEPAGE_1] = A_BOLD,
[HUGEPAGE_2] = A_NORMAL,
[HUGEPAGE_3] = A_REVERSE | A_BOLD,
Expand Down Expand Up @@ -385,13 +389,15 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[BAR_SHADOW] = ColorPair(Black, White),
[SWAP] = ColorPair(Red, White),
[SWAP_CACHE] = ColorPair(Yellow, White),
[SWAP_FRONTSWAP] = A_BOLD | ColorPair(Black, White),
[GRAPH_1] = A_BOLD | ColorPair(Blue, White),
[GRAPH_2] = ColorPair(Blue, White),
[MEMORY_USED] = ColorPair(Green, White),
[MEMORY_BUFFERS] = ColorPair(Cyan, White),
[MEMORY_BUFFERS_TEXT] = ColorPair(Cyan, White),
[MEMORY_CACHE] = ColorPair(Yellow, White),
[MEMORY_SHARED] = ColorPair(Magenta, White),
[MEMORY_COMPRESSED] = A_BOLD | ColorPair(Black, White),
[HUGEPAGE_1] = ColorPair(Green, White),
[HUGEPAGE_2] = ColorPair(Yellow, White),
[HUGEPAGE_3] = ColorPair(Red, White),
Expand Down Expand Up @@ -496,13 +502,15 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[BAR_SHADOW] = ColorPairGrayBlack,
[SWAP] = ColorPair(Red, Black),
[SWAP_CACHE] = ColorPair(Yellow, Black),
[SWAP_FRONTSWAP] = ColorPairGrayBlack,
[GRAPH_1] = A_BOLD | ColorPair(Cyan, Black),
[GRAPH_2] = ColorPair(Cyan, Black),
[MEMORY_USED] = ColorPair(Green, Black),
[MEMORY_BUFFERS] = ColorPair(Cyan, Black),
[MEMORY_BUFFERS_TEXT] = ColorPair(Cyan, Black),
[MEMORY_CACHE] = ColorPair(Yellow, Black),
[MEMORY_SHARED] = ColorPair(Magenta, Black),
[MEMORY_COMPRESSED] = ColorPairGrayBlack,
[HUGEPAGE_1] = ColorPair(Green, Black),
[HUGEPAGE_2] = ColorPair(Yellow, Black),
[HUGEPAGE_3] = ColorPair(Red, Black),
Expand Down Expand Up @@ -607,13 +615,15 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[BAR_SHADOW] = ColorPair(Cyan, Blue),
[SWAP] = ColorPair(Red, Blue),
[SWAP_CACHE] = A_BOLD | ColorPair(Yellow, Blue),
[SWAP_FRONTSWAP] = A_BOLD | ColorPair(Black, Blue),
[GRAPH_1] = A_BOLD | ColorPair(Cyan, Blue),
[GRAPH_2] = ColorPair(Cyan, Blue),
[MEMORY_USED] = A_BOLD | ColorPair(Green, Blue),
[MEMORY_BUFFERS] = A_BOLD | ColorPair(Cyan, Blue),
[MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Cyan, Blue),
[MEMORY_CACHE] = A_BOLD | ColorPair(Yellow, Blue),
[MEMORY_SHARED] = A_BOLD | ColorPair(Magenta, Blue),
[MEMORY_COMPRESSED] = A_BOLD | ColorPair(Black, Blue),
[HUGEPAGE_1] = A_BOLD | ColorPair(Green, Blue),
[HUGEPAGE_2] = A_BOLD | ColorPair(Yellow, Blue),
[HUGEPAGE_3] = A_BOLD | ColorPair(Red, Blue),
Expand Down Expand Up @@ -718,13 +728,15 @@ static int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = {
[BAR_SHADOW] = ColorPair(Cyan, Black),
[SWAP] = ColorPair(Red, Black),
[SWAP_CACHE] = ColorPair(Yellow, Black),
[SWAP_FRONTSWAP] = ColorPair(Yellow, Black),
[GRAPH_1] = A_BOLD | ColorPair(Green, Black),
[GRAPH_2] = ColorPair(Green, Black),
[MEMORY_USED] = ColorPair(Green, Black),
[MEMORY_BUFFERS] = ColorPair(Blue, Black),
[MEMORY_BUFFERS_TEXT] = A_BOLD | ColorPair(Blue, Black),
[MEMORY_CACHE] = ColorPair(Yellow, Black),
[MEMORY_SHARED] = ColorPair(Magenta, Black),
[MEMORY_COMPRESSED] = ColorPair(Yellow, Black),
[HUGEPAGE_1] = ColorPair(Green, Black),
[HUGEPAGE_2] = ColorPair(Yellow, Black),
[HUGEPAGE_3] = ColorPair(Red, Black),
Expand Down
2 changes: 2 additions & 0 deletions CRT.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ typedef enum ColorElements_ {
TASKS_RUNNING,
SWAP,
SWAP_CACHE,
SWAP_FRONTSWAP,
PROCESS,
PROCESS_SHADOW,
PROCESS_TAG,
Expand Down Expand Up @@ -95,6 +96,7 @@ typedef enum ColorElements_ {
MEMORY_BUFFERS_TEXT,
MEMORY_CACHE,
MEMORY_SHARED,
MEMORY_COMPRESSED,
HUGEPAGE_1,
HUGEPAGE_2,
HUGEPAGE_3,
Expand Down
19 changes: 17 additions & 2 deletions MemoryMeter.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ static const int MemoryMeter_attributes[] = {
MEMORY_USED,
MEMORY_BUFFERS,
MEMORY_SHARED,
MEMORY_COMPRESSED,
MEMORY_CACHE
};

Expand All @@ -28,8 +29,9 @@ static void MemoryMeter_updateValues(Meter* this) {
size_t size = sizeof(this->txtBuffer);
int written;

/* shared and available memory are not supported on all platforms */
/* shared, compressed and available memory are not supported on all platforms */
this->values[MEMORY_METER_SHARED] = NAN;
this->values[MEMORY_METER_COMPRESSED] = NAN;
this->values[MEMORY_METER_AVAILABLE] = NAN;
Platform_setMemoryValues(this);

Expand All @@ -38,7 +40,13 @@ static void MemoryMeter_updateValues(Meter* this) {
"MEMORY_METER_AVAILABLE is not the last item in MemoryMeterValues");
this->curItems = MEMORY_METER_AVAILABLE;

written = Meter_humanUnit(buffer, this->values[MEMORY_METER_USED], size);
/* we actually want to show "used + compressed" */
double used = this->values[MEMORY_METER_USED];
if (!isnan(this->values[MEMORY_METER_COMPRESSED])) {
used += this->values[MEMORY_METER_COMPRESSED];
}

written = Meter_humanUnit(buffer, used, size);
METER_BUFFER_CHECK(buffer, size, written);

METER_BUFFER_APPEND_CHR(buffer, size, '/');
Expand Down Expand Up @@ -69,6 +77,13 @@ static void MemoryMeter_display(const Object* cast, RichString* out) {
RichString_appendAscii(out, CRT_colors[MEMORY_SHARED], buffer);
}

/* compressed memory is not supported on all platforms */
if (!isnan(this->values[MEMORY_METER_COMPRESSED])) {
Meter_humanUnit(buffer, this->values[MEMORY_METER_COMPRESSED], sizeof(buffer));
RichString_appendAscii(out, CRT_colors[METER_TEXT], " compressed:");
RichString_appendAscii(out, CRT_colors[MEMORY_COMPRESSED], buffer);
}

Meter_humanUnit(buffer, this->values[MEMORY_METER_CACHE], sizeof(buffer));
RichString_appendAscii(out, CRT_colors[METER_TEXT], " cache:");
RichString_appendAscii(out, CRT_colors[MEMORY_CACHE], buffer);
Expand Down
7 changes: 4 additions & 3 deletions MemoryMeter.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ typedef enum {
MEMORY_METER_USED = 0,
MEMORY_METER_BUFFERS = 1,
MEMORY_METER_SHARED = 2,
MEMORY_METER_CACHE = 3,
MEMORY_METER_AVAILABLE = 4,
MEMORY_METER_ITEMCOUNT = 5, // number of entries in this enum
MEMORY_METER_COMPRESSED = 3,
MEMORY_METER_CACHE = 4,
MEMORY_METER_AVAILABLE = 5,
MEMORY_METER_ITEMCOUNT = 6, // number of entries in this enum
} MemoryMeterValues;

extern const MeterClass MemoryMeter_class;
Expand Down
10 changes: 9 additions & 1 deletion SwapMeter.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ in the source distribution for its full text.

static const int SwapMeter_attributes[] = {
SWAP,
SWAP_CACHE
SWAP_CACHE,
SWAP_FRONTSWAP,
};

static void SwapMeter_updateValues(Meter* this) {
Expand All @@ -29,6 +30,7 @@ static void SwapMeter_updateValues(Meter* this) {
int written;

this->values[SWAP_METER_CACHE] = NAN; /* 'cached' not present on all platforms */
this->values[SWAP_METER_FRONTSWAP] = NAN; /* 'frontswap' not present on all platforms */
Platform_setSwapValues(this);

written = Meter_humanUnit(buffer, this->values[SWAP_METER_USED], size);
Expand All @@ -54,6 +56,12 @@ static void SwapMeter_display(const Object* cast, RichString* out) {
RichString_appendAscii(out, CRT_colors[METER_TEXT], " cache:");
RichString_appendAscii(out, CRT_colors[SWAP_CACHE], buffer);
}

if (!isnan(this->values[SWAP_METER_FRONTSWAP])) {
Meter_humanUnit(buffer, this->values[SWAP_METER_FRONTSWAP], sizeof(buffer));
RichString_appendAscii(out, CRT_colors[METER_TEXT], " frontswap:");
RichString_appendAscii(out, CRT_colors[SWAP_FRONTSWAP], buffer);
}
}

const MeterClass SwapMeter_class = {
Expand Down
3 changes: 2 additions & 1 deletion SwapMeter.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ in the source distribution for its full text.
typedef enum {
SWAP_METER_USED = 0,
SWAP_METER_CACHE = 1,
SWAP_METER_ITEMCOUNT = 2, // number of entries in this enum
SWAP_METER_FRONTSWAP = 2,
SWAP_METER_ITEMCOUNT = 3, // number of entries in this enum
} SwapMeterValues;

extern const MeterClass SwapMeter_class;
Expand Down
3 changes: 3 additions & 0 deletions darwin/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ void Platform_setMemoryValues(Meter* mtr) {
mtr->values[MEMORY_METER_USED] = (double)(vm->active_count + vm->wire_count) * page_K;
mtr->values[MEMORY_METER_BUFFERS] = (double)vm->purgeable_count * page_K;
// mtr->values[MEMORY_METER_SHARED] = "shared memory, like tmpfs and shm"
// mtr->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
mtr->values[MEMORY_METER_CACHE] = (double)vm->inactive_count * page_K;
// mtr->values[MEMORY_METER_AVAILABLE] = "available memory"
}
Expand All @@ -306,6 +307,8 @@ void Platform_setSwapValues(Meter* mtr) {

mtr->total = swapused.xsu_total / 1024;
mtr->values[SWAP_METER_USED] = swapused.xsu_used / 1024;
// mtr->values[SWAP_METER_CACHE] = "pages that are both in swap and RAM, like SwapCached on linux"
// mtr->values[SWAP_METER_FRONTSWAP] = "pages that are accounted to swap but stored elsewhere, like frontswap on linux"
}

void Platform_setZfsArcValues(Meter* this) {
Expand Down
4 changes: 3 additions & 1 deletion dragonflybsd/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ void Platform_setMemoryValues(Meter* this) {
this->values[MEMORY_METER_USED] = pl->usedMem;
this->values[MEMORY_METER_BUFFERS] = pl->buffersMem;
// this->values[MEMORY_METER_SHARED] = "shared memory, like tmpfs and shm"
// mtr->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
this->values[MEMORY_METER_CACHE] = pl->cachedMem;
// this->values[MEMORY_METER_AVAILABLE] = "available memory"
}
Expand All @@ -223,7 +224,8 @@ void Platform_setSwapValues(Meter* this) {
const ProcessList* pl = this->pl;
this->total = pl->totalSwap;
this->values[SWAP_METER_USED] = pl->usedSwap;
this->values[SWAP_METER_CACHE] = NAN;
// mtr->values[SWAP_METER_CACHE] = "pages that are both in swap and RAM, like SwapCached on linux"
// mtr->values[SWAP_METER_FRONTSWAP] = "pages that are accounted to swap but stored elsewhere, like frontswap on linux"
}

char* Platform_getProcessEnv(pid_t pid) {
Expand Down
4 changes: 3 additions & 1 deletion freebsd/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ void Platform_setMemoryValues(Meter* this) {
this->values[MEMORY_METER_USED] = pl->usedMem;
this->values[MEMORY_METER_BUFFERS] = pl->buffersMem;
this->values[MEMORY_METER_SHARED] = pl->sharedMem;
// this->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
this->values[MEMORY_METER_CACHE] = pl->cachedMem;
// this->values[MEMORY_METER_AVAILABLE] = "available memory"

Expand All @@ -254,7 +255,8 @@ void Platform_setSwapValues(Meter* this) {
const ProcessList* pl = this->pl;
this->total = pl->totalSwap;
this->values[SWAP_METER_USED] = pl->usedSwap;
this->values[SWAP_METER_CACHE] = NAN;
// this->values[SWAP_METER_CACHE] = "pages that are both in swap and RAM, like SwapCached on linux"
// this->values[SWAP_METER_FRONTSWAP] = "pages that are accounted to swap but stored elsewhere, like frontswap on linux"
}

void Platform_setZfsArcValues(Meter* this) {
Expand Down
1 change: 1 addition & 0 deletions linux/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ void Platform_setMemoryValues(Meter* this) {
this->values[MEMORY_METER_USED] = pl->usedMem;
this->values[MEMORY_METER_BUFFERS] = pl->buffersMem;
this->values[MEMORY_METER_SHARED] = pl->sharedMem;
// this->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
this->values[MEMORY_METER_CACHE] = pl->cachedMem;
this->values[MEMORY_METER_AVAILABLE] = pl->availableMem;

Expand Down
4 changes: 3 additions & 1 deletion netbsd/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@ void Platform_setMemoryValues(Meter* this) {
this->values[MEMORY_METER_USED] = pl->usedMem;
this->values[MEMORY_METER_BUFFERS] = pl->buffersMem;
// this->values[MEMORY_METER_SHARED] = "shared memory, like tmpfs and shm"
// this->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
this->values[MEMORY_METER_CACHE] = pl->cachedMem;
// this->values[MEMORY_METER_AVAILABLE] = "available memory"
}
Expand All @@ -282,7 +283,8 @@ void Platform_setSwapValues(Meter* this) {
const ProcessList* pl = this->pl;
this->total = pl->totalSwap;
this->values[SWAP_METER_USED] = pl->usedSwap;
this->values[SWAP_METER_CACHE] = NAN;
// this->values[SWAP_METER_CACHE] = "pages that are both in swap and RAM, like SwapCached on linux"
// this->values[SWAP_METER_FRONTSWAP] = "pages that are accounted to swap but stored elsewhere, like frontswap on linux"
}

char* Platform_getProcessEnv(pid_t pid) {
Expand Down
4 changes: 3 additions & 1 deletion openbsd/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ void Platform_setMemoryValues(Meter* this) {
this->values[MEMORY_METER_USED] = usedMem;
this->values[MEMORY_METER_BUFFERS] = buffersMem;
// this->values[MEMORY_METER_SHARED] = "shared memory, like tmpfs and shm"
// this->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
this->values[MEMORY_METER_CACHE] = cachedMem;
// this->values[MEMORY_METER_AVAILABLE] = "available memory"
}
Expand All @@ -239,7 +240,8 @@ void Platform_setSwapValues(Meter* this) {
const ProcessList* pl = this->pl;
this->total = pl->totalSwap;
this->values[SWAP_METER_USED] = pl->usedSwap;
this->values[SWAP_METER_CACHE] = NAN;
// this->values[SWAP_METER_CACHE] = "pages that are both in swap and RAM, like SwapCached on linux"
// this->values[SWAP_METER_FRONTSWAP] = "pages that are accounted to swap but stored elsewhere, like frontswap on linux"
}

char* Platform_getProcessEnv(pid_t pid) {
Expand Down
2 changes: 2 additions & 0 deletions pcp/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -537,6 +537,7 @@ void Platform_setMemoryValues(Meter* this) {
this->values[MEMORY_METER_USED] = pl->usedMem;
this->values[MEMORY_METER_BUFFERS] = pl->buffersMem;
this->values[MEMORY_METER_SHARED] = pl->sharedMem;
// this->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
this->values[MEMORY_METER_CACHE] = pl->cachedMem;
this->values[MEMORY_METER_AVAILABLE] = pl->availableMem;

Expand All @@ -556,6 +557,7 @@ void Platform_setSwapValues(Meter* this) {
this->total = pl->totalSwap;
this->values[SWAP_METER_USED] = pl->usedSwap;
this->values[SWAP_METER_CACHE] = pl->cachedSwap;
// this->values[SWAP_METER_FRONTSWAP] = "pages that are accounted to swap but stored elsewhere, like frontswap on linux"
}

void Platform_setZramValues(Meter* this) {
Expand Down
4 changes: 3 additions & 1 deletion solaris/Platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ void Platform_setMemoryValues(Meter* this) {
this->values[MEMORY_METER_USED] = pl->usedMem;
this->values[MEMORY_METER_BUFFERS] = pl->buffersMem;
// this->values[MEMORY_METER_SHARED] = "shared memory, like tmpfs and shm"
// this->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"
this->values[MEMORY_METER_CACHE] = pl->cachedMem;
// this->values[MEMORY_METER_AVAILABLE] = "available memory"
}
Expand All @@ -248,7 +249,8 @@ void Platform_setSwapValues(Meter* this) {
const ProcessList* pl = this->pl;
this->total = pl->totalSwap;
this->values[SWAP_METER_USED] = pl->usedSwap;
this->values[SWAP_METER_CACHE] = NAN;
// this->values[SWAP_METER_CACHE] = "pages that are both in swap and RAM, like SwapCached on linux"
// this->values[SWAP_METER_FRONTSWAP] = "pages that are accounted to swap but stored elsewhere, like frontswap on linux"
}

void Platform_setZfsArcValues(Meter* this) {
Expand Down

0 comments on commit b29b33e

Please sign in to comment.