mirror of
https://github.com/xzeldon/htop.git
synced 2025-07-13 04:34:35 +03:00
Support for ZFS Compressed ARC statistics
This commit is contained in:
@ -984,9 +984,14 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
|
||||
char buffer[128];
|
||||
while (fgets(buffer, 128, file)) {
|
||||
#define tryRead(label, variable) do { if (String_startsWith(buffer, label) && sscanf(buffer + strlen(label), " %*2u %32llu", variable)) { break; } } while(0)
|
||||
#define tryReadFlag(label, variable, flag) do { if (String_startsWith(buffer, label) && sscanf(buffer + strlen(label), " %*2u %32llu", variable)) { flag = 1; break; } else { flag = 0; } } while(0)
|
||||
switch (buffer[0]) {
|
||||
case 'c':
|
||||
tryRead("c_max", &lpl->zfs.max);
|
||||
tryReadFlag("compressed", &lpl->zfs.compressed, &lpl->zfs.isCompressed);
|
||||
break;
|
||||
case 'u':
|
||||
tryRead("uncompressed", &lpl->zfs.uncompressed);
|
||||
break;
|
||||
case 's':
|
||||
tryRead("size", &lpl->zfs.size);
|
||||
@ -1010,6 +1015,7 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
|
||||
break;
|
||||
}
|
||||
#undef tryRead
|
||||
#undef tryReadFlag
|
||||
}
|
||||
fclose(file);
|
||||
|
||||
@ -1021,6 +1027,10 @@ static inline void LinuxProcessList_scanZfsArcstats(LinuxProcessList* lpl) {
|
||||
lpl->zfs.anon /= 1024;
|
||||
lpl->zfs.header /= 1024;
|
||||
lpl->zfs.other = (dbufSize + dnodeSize + bonusSize) / 1024;
|
||||
if ( lpl->zfs.isCompressed ) {
|
||||
lpl->zfs.compressed /= 1024;
|
||||
lpl->zfs.uncompressed /= 1024;
|
||||
}
|
||||
}
|
||||
|
||||
static inline double LinuxProcessList_scanCPUTime(LinuxProcessList* this) {
|
||||
|
@ -22,6 +22,7 @@ in the source distribution for its full text.
|
||||
#include "ClockMeter.h"
|
||||
#include "HostnameMeter.h"
|
||||
#include "zfs/ZfsArcMeter.h"
|
||||
#include "zfs/ZfsCompressedArcMeter.h"
|
||||
#include "LinuxProcess.h"
|
||||
|
||||
#include <math.h>
|
||||
@ -128,6 +129,7 @@ MeterClass* Platform_meterTypes[] = {
|
||||
&RightCPUs2Meter_class,
|
||||
&BlankMeter_class,
|
||||
&ZfsArcMeter_class,
|
||||
&ZfsCompressedArcMeter_class,
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -221,6 +223,11 @@ void Platform_setZfsArcValues(Meter* this) {
|
||||
ZfsArcMeter_readStats(this, &(lpl->zfs));
|
||||
}
|
||||
|
||||
void Platform_setZfsCompressedArcValues(Meter* this) {
|
||||
LinuxProcessList* lpl = (LinuxProcessList*) this->pl;
|
||||
|
||||
ZfsCompressedArcMeter_readStats(this, &(lpl->zfs));
|
||||
}
|
||||
char* Platform_getProcessEnv(pid_t pid) {
|
||||
char procname[32+1];
|
||||
xSnprintf(procname, 32, "/proc/%d/environ", pid);
|
||||
|
@ -45,6 +45,8 @@ void Platform_setSwapValues(Meter* this);
|
||||
|
||||
void Platform_setZfsArcValues(Meter* this);
|
||||
|
||||
void Platform_setZfsCompressedArcValues(Meter* this);
|
||||
|
||||
char* Platform_getProcessEnv(pid_t pid);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user