diff options
author | Nathan Scott <nathans@redhat.com> | 2023-05-02 09:02:22 +1000 |
---|---|---|
committer | Nathan Scott <nathans@redhat.com> | 2023-05-08 13:06:07 +1000 |
commit | 0bdade1b6cb40c5bd374a93ac0489058a7421bb5 (patch) | |
tree | 0e0225f7dbf6867402c5ed3481a705d01941f42e /linux | |
parent | e4ebe18b67c366d367231a1123b057c82018cf5b (diff) |
Introduce Machine class for host-specific info (split from ProcessList)
First stage in sanitizing the process list structure so that htop
can support other types of lists too (cgroups, filesystems, ...),
in the not-too-distant future.
This introduces struct Machine for system-wide information while
keeping process-list information in ProcessList (now much less).
Next step is to propogate this separation into each platform, to
match these core changes.
Diffstat (limited to 'linux')
-rw-r--r-- | linux/HugePageMeter.c | 2 | ||||
-rw-r--r-- | linux/LinuxProcess.c | 6 | ||||
-rw-r--r-- | linux/LinuxProcess.h | 4 | ||||
-rw-r--r-- | linux/LinuxProcessList.c | 106 | ||||
-rw-r--r-- | linux/LinuxProcessList.h | 8 | ||||
-rw-r--r-- | linux/Platform.c | 39 |
6 files changed, 94 insertions, 71 deletions
diff --git a/linux/HugePageMeter.c b/linux/HugePageMeter.c index 1efde2f2..0e429444 100644 --- a/linux/HugePageMeter.c +++ b/linux/HugePageMeter.c @@ -43,7 +43,7 @@ static void HugePageMeter_updateValues(Meter* this) { memory_t usedTotal = 0; unsigned nextUsed = 0; - const LinuxProcessList* lpl = (const LinuxProcessList*) this->pl; + const LinuxProcessList* lpl = (const LinuxProcessList*) this->host->pl; this->total = lpl->totalHugePageMem; this->values[0] = 0; HugePageMeter_active_labels[0] = " used:"; diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c index 8f9c3462..a3a4c821 100644 --- a/linux/LinuxProcess.c +++ b/linux/LinuxProcess.c @@ -106,10 +106,10 @@ const ProcessFieldData Process_fields[LAST_PROCESSFIELD] = { #endif }; -Process* LinuxProcess_new(const Settings* settings) { +Process* LinuxProcess_new(const Machine* host) { LinuxProcess* this = xCalloc(1, sizeof(LinuxProcess)); Object_setClass(this, Class(LinuxProcess)); - Process_init(&this->super, settings); + Process_init(&this->super, host); return &this->super; } @@ -197,7 +197,7 @@ bool LinuxProcess_changeAutogroupPriorityBy(Process* this, Arg delta) { static void LinuxProcess_writeField(const Process* this, RichString* str, ProcessField field) { const LinuxProcess* lp = (const LinuxProcess*) this; - bool coloring = this->settings->highlightMegabytes; + bool coloring = this->host->settings->highlightMegabytes; char buffer[256]; buffer[255] = '\0'; int attr = CRT_colors[DEFAULT_COLOR]; size_t n = sizeof(buffer) - 1; diff --git a/linux/LinuxProcess.h b/linux/LinuxProcess.h index 3e5d3804..6c309893 100644 --- a/linux/LinuxProcess.h +++ b/linux/LinuxProcess.h @@ -14,9 +14,9 @@ in the source distribution for its full text. #include <sys/types.h> #include "linux/IOPriority.h" +#include "Machine.h" #include "Object.h" #include "Process.h" -#include "Settings.h" #define PROCESS_FLAG_LINUX_IOPRIO 0x00000100 @@ -118,7 +118,7 @@ extern const ProcessFieldData Process_fields[LAST_PROCESSFIELD]; extern const ProcessClass LinuxProcess_class; -Process* LinuxProcess_new(const Settings* settings); +Process* LinuxProcess_new(const Machine* host); void Process_delete(Object* cast); diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index 2ecdefc3..911fc3e1 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -216,6 +216,7 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) { * https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/getsysstats.c;hb=HEAD */ + Machine* host = super->host; LinuxProcessList* this = (LinuxProcessList*) super; unsigned int existing = 0, active = 0; @@ -224,15 +225,15 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) { this->cpuData = xCalloc(2, sizeof(CPUData)); this->cpuData[0].online = true; /* average is always "online" */ this->cpuData[1].online = true; - super->activeCPUs = 1; - super->existingCPUs = 1; + host->activeCPUs = 1; + host->existingCPUs = 1; } DIR* dir = opendir("/sys/devices/system/cpu"); if (!dir) return; - unsigned int currExisting = super->existingCPUs; + unsigned int currExisting = host->existingCPUs; const struct dirent* entry; while ((entry = readdir(dir)) != NULL) { @@ -288,20 +289,20 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) { #ifdef HAVE_SENSORS_SENSORS_H /* When started with offline CPUs, libsensors does not monitor those, * even when they become online. */ - if (super->existingCPUs != 0 && (active > super->activeCPUs || currExisting > super->existingCPUs)) + if (host->existingCPUs != 0 && (active > host->activeCPUs || currExisting > host->existingCPUs)) LibSensors_reload(); #endif - super->activeCPUs = active; + host->activeCPUs = active; assert(existing == currExisting); - super->existingCPUs = currExisting; + host->existingCPUs = currExisting; } -ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidMatchList, uid_t userId) { +ProcessList* ProcessList_new(Machine* host, Hashtable* pidMatchList) { LinuxProcessList* this = xCalloc(1, sizeof(LinuxProcessList)); ProcessList* pl = &(this->super); - ProcessList_init(pl, Class(LinuxProcess), usersTable, pidMatchList, userId); + ProcessList_init(pl, Class(LinuxProcess), host, pidMatchList); LinuxProcessList_initTtyDrivers(this); // Initialize page size @@ -594,7 +595,7 @@ static bool LinuxProcessList_readStatusFile(Process* process, openat_arg_t procF return true; } -static bool LinuxProcessList_updateUser(ProcessList* processList, Process* process, openat_arg_t procFd) { +static bool LinuxProcessList_updateUser(const Machine* host, Process* process, openat_arg_t procFd) { struct stat sstat; #ifdef HAVE_OPENAT int statok = fstat(procFd, &sstat); @@ -606,7 +607,7 @@ static bool LinuxProcessList_updateUser(ProcessList* processList, Process* proce if (process->st_uid != sstat.st_uid) { process->st_uid = sstat.st_uid; - process->user = UsersTable_getRef(processList->usersTable, sstat.st_uid); + process->user = UsersTable_getRef(host->usersTable, sstat.st_uid); } return true; @@ -1421,14 +1422,14 @@ static char* LinuxProcessList_updateTtyDevice(TtyDriver* ttyDrivers, unsigned lo return out; } -static bool isOlderThan(const ProcessList* pl, const Process* proc, unsigned int seconds) { - assert(pl->realtimeMs > 0); +static bool isOlderThan(const Machine* host, const Process* proc, unsigned int seconds) { + assert(host->realtimeMs > 0); /* Starttime might not yet be parsed */ if (proc->starttime_ctime <= 0) return false; - uint64_t realtime = pl->realtimeMs / 1000; + uint64_t realtime = host->realtimeMs / 1000; if (realtime < (uint64_t)proc->starttime_ctime) return false; @@ -1438,9 +1439,10 @@ static bool isOlderThan(const ProcessList* pl, const Process* proc, unsigned int static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_t parentFd, const char* dirname, const Process* parent, double period) { ProcessList* pl = (ProcessList*) this; - const struct dirent* entry; - const Settings* settings = pl->settings; + const Machine* host = pl->host; + const Settings* settings = host->settings; const ScreenSettings* ss = settings->ss; + const struct dirent* entry; #ifdef HAVE_OPENAT int dirFd = openat(parentFd, dirname, O_RDONLY | O_DIRECTORY | O_NOFOLLOW); @@ -1457,7 +1459,7 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_ return false; } - const unsigned int activeCPUs = pl->activeCPUs; + const unsigned int activeCPUs = host->activeCPUs; const bool hideKernelThreads = settings->hideKernelThreads; const bool hideUserlandThreads = settings->hideUserlandThreads; const bool hideRunningInContainer = settings->hideRunningInContainer; @@ -1543,7 +1545,7 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_ bool scanMainThread = !hideUserlandThreads && !Process_isKernelThread(proc) && !parent; if (ss->flags & PROCESS_FLAG_IO) - LinuxProcessList_readIoFile(lp, procFd, scanMainThread, pl->realtimeMs); + LinuxProcessList_readIoFile(lp, procFd, scanMainThread, host->realtimeMs); if (!LinuxProcessList_readStatmFile(lp, procFd)) goto errorReadingProcess; @@ -1552,15 +1554,15 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_ bool prev = proc->usesDeletedLib; if (!proc->isKernelThread && !proc->isUserlandThread && - ((ss->flags & PROCESS_FLAG_LINUX_LRS_FIX) || (settings->highlightDeletedExe && !proc->procExeDeleted && isOlderThan(pl, proc, 10)))) { + ((ss->flags & PROCESS_FLAG_LINUX_LRS_FIX) || (settings->highlightDeletedExe && !proc->procExeDeleted && isOlderThan(host, proc, 10)))) { // Check if we really should recalculate the M_LRS value for this process - uint64_t passedTimeInMs = pl->realtimeMs - lp->last_mlrs_calctime; + uint64_t passedTimeInMs = host->realtimeMs - lp->last_mlrs_calctime; uint64_t recheck = ((uint64_t)rand()) % 2048; if (passedTimeInMs > recheck) { - lp->last_mlrs_calctime = pl->realtimeMs; + lp->last_mlrs_calctime = host->realtimeMs; LinuxProcessList_readMaps(lp, procFd, ss->flags & PROCESS_FLAG_LINUX_LRS_FIX, settings->highlightDeletedExe); } } else { @@ -1610,10 +1612,10 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_ /* period might be 0 after system sleep */ float percent_cpu = (period < 1E-6) ? 0.0F : ((lp->utime + lp->stime - lasttimes) / period * 100.0); proc->percent_cpu = CLAMP(percent_cpu, 0.0F, activeCPUs * 100.0F); - proc->percent_mem = proc->m_resident / (double)(pl->totalMem) * 100.0; + proc->percent_mem = proc->m_resident / (double)(host->totalMem) * 100.0; Process_updateCPUFieldWidths(proc->percent_cpu); - if (! LinuxProcessList_updateUser(pl, proc, procFd)) + if (! LinuxProcessList_updateUser(host, proc, procFd)) goto errorReadingProcess; if (!LinuxProcessList_readStatusFile(proc, procFd)) @@ -1733,6 +1735,7 @@ errorReadingProcess: } static inline void LinuxProcessList_scanMemoryInfo(ProcessList* this) { + Machine* host = this->host; LinuxProcessList *lpl = (LinuxProcessList *)this; memory_t availableMem = 0; memory_t freeMem = 0; @@ -1809,16 +1812,16 @@ static inline void LinuxProcessList_scanMemoryInfo(ProcessList* this) { * - Shmem in part of Cached (see https://lore.kernel.org/patchwork/patch/648763/), * do not show twice by subtracting from Cached and do not subtract twice from used. */ - this->totalMem = totalMem; - this->cachedMem = cachedMem + sreclaimableMem - sharedMem; - this->sharedMem = sharedMem; + host->totalMem = totalMem; + host->cachedMem = cachedMem + sreclaimableMem - sharedMem; + host->sharedMem = sharedMem; const memory_t usedDiff = freeMem + cachedMem + sreclaimableMem + buffersMem; - this->usedMem = (totalMem >= usedDiff) ? totalMem - usedDiff : totalMem - freeMem; - this->buffersMem = buffersMem; - this->availableMem = availableMem != 0 ? MINIMUM(availableMem, totalMem) : freeMem; - this->totalSwap = swapTotalMem; - this->usedSwap = swapTotalMem - swapFreeMem - swapCacheMem; - this->cachedSwap = swapCacheMem; + host->usedMem = (totalMem >= usedDiff) ? totalMem - usedDiff : totalMem - freeMem; + host->buffersMem = buffersMem; + host->availableMem = availableMem != 0 ? MINIMUM(availableMem, totalMem) : freeMem; + host->totalSwap = swapTotalMem; + host->usedSwap = swapTotalMem - swapFreeMem - swapCacheMem; + host->cachedSwap = swapCacheMem; lpl->zswap.usedZswapComp = zswapCompMem; lpl->zswap.usedZswapOrig = zswapOrigMem; } @@ -1880,6 +1883,7 @@ static void LinuxProcessList_scanHugePages(LinuxProcessList* this) { } static inline void LinuxProcessList_scanZswapInfo(LinuxProcessList *this) { + const Machine* host = this->super.host; long max_pool_percent = 0; int r; char buf[256]; @@ -1893,7 +1897,7 @@ static inline void LinuxProcessList_scanZswapInfo(LinuxProcessList *this) { return; } - this->zswap.totalZswapPool = this->super.totalMem * max_pool_percent / 100; + this->zswap.totalZswapPool = host->totalMem * max_pool_percent / 100; /* the rest of the metrics are set in LinuxProcessList_scanMemoryInfo() */ } @@ -2027,7 +2031,8 @@ static inline double LinuxProcessList_scanCPUTime(ProcessList* super) { if (!file) CRT_fatalError("Cannot open " PROCSTATFILE); - unsigned int existingCPUs = super->existingCPUs; + Machine* host = super->host; + unsigned int existingCPUs = host->existingCPUs; unsigned int lastAdjCpuId = 0; for (unsigned int i = 0; i <= existingCPUs; i++) { @@ -2056,7 +2061,7 @@ static inline double LinuxProcessList_scanCPUTime(ProcessList* super) { adjCpuId = cpuid + 1; } - if (adjCpuId > super->existingCPUs) + if (adjCpuId > host->existingCPUs) break; for (unsigned int j = lastAdjCpuId + 1; j < adjCpuId; j++) { @@ -2104,7 +2109,7 @@ static inline double LinuxProcessList_scanCPUTime(ProcessList* super) { cpuData->totalTime = totaltime; } - double period = (double)this->cpuData[0].totalPeriod / super->activeCPUs; + double period = (double)this->cpuData[0].totalPeriod / host->activeCPUs; char buffer[PROC_LINE_LENGTH + 1]; while (fgets(buffer, sizeof(buffer), file)) { @@ -2120,7 +2125,8 @@ static inline double LinuxProcessList_scanCPUTime(ProcessList* super) { } static int scanCPUFrequencyFromSysCPUFreq(LinuxProcessList* this) { - unsigned int existingCPUs = this->super.existingCPUs; + const Machine* host = this->super.host; + unsigned int existingCPUs = host->existingCPUs; int numCPUsWithFrequency = 0; unsigned long totalFrequency = 0; @@ -2139,7 +2145,7 @@ static int scanCPUFrequencyFromSysCPUFreq(LinuxProcessList* this) { } for (unsigned int i = 0; i < existingCPUs; ++i) { - if (!ProcessList_isCPUonline(&this->super, i)) + if (!Machine_isCPUonline(host, i)) continue; char pathBuffer[64]; @@ -2187,7 +2193,7 @@ static void scanCPUFrequencyFromCPUinfo(LinuxProcessList* this) { if (file == NULL) return; - unsigned int existingCPUs = this->super.existingCPUs; + unsigned int existingCPUs = this->super.host->existingCPUs; int numCPUsWithFrequency = 0; double totalFrequency = 0; int cpuid = -1; @@ -2228,7 +2234,7 @@ static void scanCPUFrequencyFromCPUinfo(LinuxProcessList* this) { } static void LinuxProcessList_scanCPUFrequency(LinuxProcessList* this) { - unsigned int existingCPUs = this->super.existingCPUs; + unsigned int existingCPUs = this->super.host->existingCPUs; for (unsigned int i = 0; i <= existingCPUs; i++) { this->cpuData[i].frequency = NAN; @@ -2243,7 +2249,9 @@ static void LinuxProcessList_scanCPUFrequency(LinuxProcessList* this) { void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate) { LinuxProcessList* this = (LinuxProcessList*) super; - const Settings* settings = super->settings; + + const Machine* host = super->host; + const Settings* settings = host->settings; LinuxProcessList_scanMemoryInfo(super); LinuxProcessList_scanHugePages(this); @@ -2259,7 +2267,7 @@ void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate) { #ifdef HAVE_SENSORS_SENSORS_H if (settings->showCPUTemperature) - LibSensors_getCPUTemperatures(this->cpuData, this->super.existingCPUs, this->super.activeCPUs); + LibSensors_getCPUTemperatures(this->cpuData, host->existingCPUs, host->activeCPUs); #endif // in pause mode only gather global data for meters (CPU/memory/...) @@ -2288,9 +2296,19 @@ void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate) { LinuxProcessList_recurseProcTree(this, rootFd, PROCDIR, NULL, period); } -bool ProcessList_isCPUonline(const ProcessList* super, unsigned int id) { - assert(id < super->existingCPUs); +Machine* Machine_new(UsersTable* usersTable, uid_t userId) { + Machine* this = xCalloc(1, sizeof(Machine)); + Machine_init(this, usersTable, userId); + return this; +} + +void Machine_delete(Machine* host) { + free(host); +} + +bool Machine_isCPUonline(const Machine* host, unsigned int id) { + assert(id < host->existingCPUs); - const LinuxProcessList* this = (const LinuxProcessList*) super; + const LinuxProcessList* this = (const LinuxProcessList*) host->pl; return this->cpuData[id + 1].online; } diff --git a/linux/LinuxProcessList.h b/linux/LinuxProcessList.h index 9cfdf24a..69bae5c0 100644 --- a/linux/LinuxProcessList.h +++ b/linux/LinuxProcessList.h @@ -117,12 +117,16 @@ typedef struct LinuxProcessList_ { #define PROC_LINE_LENGTH 4096 #endif -ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidMatchList, uid_t userId); +ProcessList* ProcessList_new(Machine* host, Hashtable* pidMatchList); void ProcessList_delete(ProcessList* pl); void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate); -bool ProcessList_isCPUonline(const ProcessList* super, unsigned int id); +Machine* Machine_new(UsersTable* usersTable, uid_t userId); + +bool Machine_isCPUonline(const Machine* host, unsigned int id); + +void Machine_delete(Machine* host); #endif diff --git a/linux/Platform.c b/linux/Platform.c index 782f1546..68cefce9 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -304,7 +304,8 @@ int Platform_getMaxPid(void) { } double Platform_setCPUValues(Meter* this, unsigned int cpu) { - const LinuxProcessList* pl = (const LinuxProcessList*) this->pl; + const Machine* host = this->host; + const LinuxProcessList* pl = (const LinuxProcessList*) host->pl; const CPUData* cpuData = &(pl->cpuData[cpu]); double total = (double) ( cpuData->totalPeriod == 0 ? 1 : cpuData->totalPeriod); double percent; @@ -317,7 +318,7 @@ double Platform_setCPUValues(Meter* this, unsigned int cpu) { v[CPU_METER_NICE] = cpuData->nicePeriod / total * 100.0; v[CPU_METER_NORMAL] = cpuData->userPeriod / total * 100.0; - if (this->pl->settings->detailedCPUTime) { + if (host->settings->detailedCPUTime) { v[CPU_METER_KERNEL] = cpuData->systemPeriod / total * 100.0; v[CPU_METER_IRQ] = cpuData->irqPeriod / total * 100.0; v[CPU_METER_SOFTIRQ] = cpuData->softIrqPeriod / total * 100.0; @@ -326,7 +327,7 @@ double Platform_setCPUValues(Meter* this, unsigned int cpu) { v[CPU_METER_IOWAIT] = cpuData->ioWaitPeriod / total * 100.0; this->curItems = 8; percent = v[CPU_METER_NICE] + v[CPU_METER_NORMAL] + v[CPU_METER_KERNEL] + v[CPU_METER_IRQ] + v[CPU_METER_SOFTIRQ]; - if (this->pl->settings->accountGuestInCPUMeter) { + if (host->settings->accountGuestInCPUMeter) { percent += v[CPU_METER_STEAL] + v[CPU_METER_GUEST]; } } else { @@ -352,16 +353,16 @@ double Platform_setCPUValues(Meter* this, unsigned int cpu) { } void Platform_setMemoryValues(Meter* this) { - const ProcessList* pl = this->pl; - const LinuxProcessList* lpl = (const LinuxProcessList*) pl; + const Machine* host = this->host; + const LinuxProcessList* lpl = (const LinuxProcessList*) host->pl; - this->total = pl->totalMem; - this->values[MEMORY_METER_USED] = pl->usedMem; - this->values[MEMORY_METER_BUFFERS] = pl->buffersMem; - this->values[MEMORY_METER_SHARED] = pl->sharedMem; + this->total = host->totalMem; + this->values[MEMORY_METER_USED] = host->usedMem; + this->values[MEMORY_METER_BUFFERS] = host->buffersMem; + this->values[MEMORY_METER_SHARED] = host->sharedMem; this->values[MEMORY_METER_COMPRESSED] = 0; /* compressed */ - this->values[MEMORY_METER_CACHE] = pl->cachedMem; - this->values[MEMORY_METER_AVAILABLE] = pl->availableMem; + this->values[MEMORY_METER_CACHE] = host->cachedMem; + this->values[MEMORY_METER_AVAILABLE] = host->availableMem; if (lpl->zfs.enabled != 0 && !Running_containerized) { // ZFS does not shrink below the value of zfs_arc_min. @@ -380,12 +381,12 @@ void Platform_setMemoryValues(Meter* this) { } void Platform_setSwapValues(Meter* this) { - const ProcessList* pl = this->pl; - const LinuxProcessList* lpl = (const LinuxProcessList*) pl; + const Machine* host = this->host; + const LinuxProcessList* lpl = (const LinuxProcessList*) host->pl; - this->total = pl->totalSwap; - this->values[SWAP_METER_USED] = pl->usedSwap; - this->values[SWAP_METER_CACHE] = pl->cachedSwap; + this->total = host->totalSwap; + this->values[SWAP_METER_USED] = host->usedSwap; + this->values[SWAP_METER_CACHE] = host->cachedSwap; this->values[SWAP_METER_FRONTSWAP] = 0; /* frontswap -- memory that is accounted to swap but resides elsewhere */ if (lpl->zswap.usedZswapOrig > 0 || lpl->zswap.usedZswapComp > 0) { @@ -410,20 +411,20 @@ void Platform_setSwapValues(Meter* this) { } void Platform_setZramValues(Meter* this) { - const LinuxProcessList* lpl = (const LinuxProcessList*) this->pl; + const LinuxProcessList* lpl = (const LinuxProcessList*) this->host->pl; this->total = lpl->zram.totalZram; this->values[ZRAM_METER_COMPRESSED] = lpl->zram.usedZramComp; this->values[ZRAM_METER_UNCOMPRESSED] = lpl->zram.usedZramOrig; } void Platform_setZfsArcValues(Meter* this) { - const LinuxProcessList* lpl = (const LinuxProcessList*) this->pl; + const LinuxProcessList* lpl = (const LinuxProcessList*) this->host->pl; ZfsArcMeter_readStats(this, &(lpl->zfs)); } void Platform_setZfsCompressedArcValues(Meter* this) { - const LinuxProcessList* lpl = (const LinuxProcessList*) this->pl; + const LinuxProcessList* lpl = (const LinuxProcessList*) this->host->pl; ZfsCompressedArcMeter_readStats(this, &(lpl->zfs)); } |