Fix some of the memory stats.

This commit is contained in:
Santhosh Raju 2024-02-22 15:50:02 +01:00
parent 9831fef7ab
commit 7a80b8eee8

View file

@ -118,6 +118,7 @@ namespace Shared {
long pageSize, clkTck, coreCount, physicalCoreCount, arg_max; long pageSize, clkTck, coreCount, physicalCoreCount, arg_max;
int totalMem_len, kfscale; int totalMem_len, kfscale;
long bootTime; long bootTime;
size_t size;
void init() { void init() {
//? Shared global variables init //? Shared global variables init
@ -132,8 +133,8 @@ namespace Shared {
coreCount = ncpu; coreCount = ncpu;
} }
pageSize = sysconf(_SC_PAGE_SIZE); size = sizeof(pageSize);
if (pageSize <= 0) { if (sysctlbyname("hw.pagesize", &pageSize, &size, nullptr, 0) < 0) {
pageSize = 4096; pageSize = 4096;
Logger::warning("Could not get system page size. Defaulting to 4096, processes memory usage might be incorrect."); Logger::warning("Could not get system page size. Defaulting to 4096, processes memory usage might be incorrect.");
} }
@ -144,12 +145,10 @@ namespace Shared {
Logger::warning("Could not get system clock ticks per second. Defaulting to 100, processes cpu usage might be incorrect."); Logger::warning("Could not get system clock ticks per second. Defaulting to 100, processes cpu usage might be incorrect.");
} }
int64_t memsize = 0; size = sizeof(totalMem);
size_t size = sizeof(memsize); if (sysctlbyname("hw.physmem", &totalMem, &size, nullptr, 0) < 0) {
if (sysctlbyname("hw.physmem", &memsize, &size, nullptr, 0) < 0) {
Logger::warning("Could not get memory size"); Logger::warning("Could not get memory size");
} }
totalMem = memsize;
struct timeval result; struct timeval result;
size = sizeof(result); size = sizeof(result);
@ -599,9 +598,9 @@ namespace Mem {
auto &mem = current_mem; auto &mem = current_mem;
static bool snapped = (getenv("BTOP_SNAPPED") != nullptr); static bool snapped = (getenv("BTOP_SNAPPED") != nullptr);
u_int memActive, memWire, cachedMem; uint64_t memActive, memWired, memCached, memFree, memInactive;
// u_int freeMem;
size_t size; size_t size;
static int uvmexp_mib[] = {CTL_VM, VM_UVMEXP2}; static int uvmexp_mib[] = {CTL_VM, VM_UVMEXP2};
struct uvmexp_sysctl uvmexp; struct uvmexp_sysctl uvmexp;
size = sizeof(uvmexp); size = sizeof(uvmexp);
@ -609,21 +608,21 @@ namespace Mem {
Logger::error("uvmexp sysctl failed"); Logger::error("uvmexp sysctl failed");
bzero(&uvmexp, sizeof(uvmexp)); bzero(&uvmexp, sizeof(uvmexp));
} }
memActive = (uvmexp.active + uvmexp.wired) * Shared::pageSize;
memWire = uvmexp.wired; memActive = (uvmexp.active + uvmexp.bootpages) * Shared::pageSize;
// freeMem = uvmexp.free * Shared::pageSize; memWired = uvmexp.wired * Shared::pageSize;
cachedMem = (uvmexp.filepages + uvmexp.execpages) * Shared::pageSize; memInactive = uvmexp.inactive * Shared::pageSize;
mem.stats.at("used") = memActive; memFree = uvmexp.free * Shared::pageSize;
mem.stats.at("available") = Shared::totalMem - memActive - memWire; memCached = (uvmexp.filepages + uvmexp.execpages + uvmexp.anonpages) * Shared::pageSize;
mem.stats.at("cached") = cachedMem; mem.stats.at("used") = memActive + memWired;
mem.stats.at("free") = Shared::totalMem - memActive - memWire; mem.stats.at("available") = memInactive + memCached;
mem.stats.at("cached") = memCached;
mem.stats.at("free") = memFree;
if (show_swap) { if (show_swap) {
uint64_t total = uvmexp.swpages * Shared::pageSize; mem.stats.at("swap_total") = uvmexp.swpages * Shared::pageSize;
mem.stats.at("swap_total") = total; mem.stats.at("swap_used") = uvmexp.swpginuse * Shared::pageSize;
uint64_t swapped = uvmexp.swpginuse * Shared::pageSize; mem.stats.at("swap_free") = (uvmexp.swpages - uvmexp.swpginuse) * Shared::pageSize;
mem.stats.at("swap_used") = swapped;
mem.stats.at("swap_free") = total - swapped;
} }
if (show_swap and mem.stats.at("swap_total") > 0) { if (show_swap and mem.stats.at("swap_total") > 0) {