mirror of https://github.com/xzeldon/htop.git
Reading swap data!
This commit is contained in:
parent
d8f2b5abf7
commit
0aa485cf47
|
@ -141,6 +141,10 @@ else
|
||||||
[AC_CHECK_HEADERS([ncurses.h],[:],[missing_headers="$missing_headers $ac_header"])])])])
|
[AC_CHECK_HEADERS([ncurses.h],[:],[missing_headers="$missing_headers $ac_header"])])])])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$my_htop_platform" = "freebsd"; then
|
||||||
|
AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
|
||||||
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(native_affinity, [AC_HELP_STRING([--enable-native-affinity], [enable native sched_setaffinity and sched_getaffinity for affinity support, disables hwloc])], ,enable_native_affinity="yes")
|
AC_ARG_ENABLE(native_affinity, [AC_HELP_STRING([--enable-native-affinity], [enable native sched_setaffinity and sched_getaffinity for affinity support, disables hwloc])], ,enable_native_affinity="yes")
|
||||||
if test "x$enable_native_affinity" = xyes -a "x$cross_compiling" = xno; then
|
if test "x$enable_native_affinity" = xyes -a "x$cross_compiling" = xno; then
|
||||||
AC_MSG_CHECKING([for usable sched_setaffinity])
|
AC_MSG_CHECKING([for usable sched_setaffinity])
|
||||||
|
|
|
@ -26,12 +26,15 @@ typedef struct FreeBSDProcessList_ {
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
static int MIB_vm_stats_vm_v_wire_count[4];
|
static int MIB_vm_stats_vm_v_wire_count[4];
|
||||||
|
static int MIB_vm_stats_vm_v_cache_count[4];
|
||||||
static int MIB_hw_physmem[2];
|
static int MIB_hw_physmem[2];
|
||||||
|
|
||||||
|
static int pageSizeKb;
|
||||||
|
|
||||||
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList) {
|
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList) {
|
||||||
FreeBSDProcessList* this = calloc(1, sizeof(FreeBSDProcessList));
|
FreeBSDProcessList* fpl = calloc(1, sizeof(FreeBSDProcessList));
|
||||||
ProcessList* pl = (ProcessList*) this;
|
ProcessList* pl = (ProcessList*) fpl;
|
||||||
ProcessList_init((ProcessList*)this, usersTable, pidWhiteList);
|
ProcessList_init(pl, usersTable, pidWhiteList);
|
||||||
|
|
||||||
int cpus = 1;
|
int cpus = 1;
|
||||||
size_t sizeof_cpus = sizeof(cpus);
|
size_t sizeof_cpus = sizeof(cpus);
|
||||||
|
@ -45,31 +48,51 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList) {
|
||||||
pl->cpus[i].totalPeriod = 1;
|
pl->cpus[i].totalPeriod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t len = 4;
|
size_t len;
|
||||||
sysctlnametomib("vm.stats.vm.v_wire_count", MIB_vm_stats_vm_v_wire_count, &len);
|
len = 4; sysctlnametomib("vm.stats.vm.v_wire_count", MIB_vm_stats_vm_v_wire_count, &len);
|
||||||
len = 2;
|
len = 4; sysctlnametomib("vm.stats.vm.v_cache_count", MIB_vm_stats_vm_v_cache_count, &len);
|
||||||
sysctlnametomib("hw.physmem", MIB_hw_physmem, &len);
|
len = 2; sysctlnametomib("hw.physmem", MIB_hw_physmem, &len);
|
||||||
|
pageSizeKb = PAGE_SIZE_KB;
|
||||||
|
|
||||||
|
fpl->kd = kvm_open(NULL, "/dev/null", NULL, 0, NULL);
|
||||||
|
assert(fpl->kd);
|
||||||
|
|
||||||
return (ProcessList*) this;
|
return pl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProcessList_delete(ProcessList* this) {
|
||||||
|
const FreeBSDProcessList* fpl = (FreeBSDProcessList*) this;
|
||||||
|
if (fpl->kd) kvm_close(fpl->kd);
|
||||||
|
|
||||||
|
ProcessList_done(this);
|
||||||
|
free(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void FreeBSDProcessList_scanMemoryInfo(ProcessList* pl) {
|
static inline void FreeBSDProcessList_scanMemoryInfo(ProcessList* pl) {
|
||||||
const FreeBSDProcessList* fpl = (FreeBSDProcessList*) pl;
|
const FreeBSDProcessList* fpl = (FreeBSDProcessList*) pl;
|
||||||
|
|
||||||
unsigned long long int swapFree = 0;
|
|
||||||
size_t len = sizeof(pl->totalMem);
|
size_t len = sizeof(pl->totalMem);
|
||||||
sysctl(MIB_hw_physmem, 2, &(pl->totalMem), &len, NULL, 0);
|
sysctl(MIB_hw_physmem, 2, &(pl->totalMem), &len, NULL, 0);
|
||||||
pl->totalMem /= 1024;
|
pl->totalMem /= 1024;
|
||||||
sysctl(MIB_vm_stats_vm_v_wire_count, 4, &(pl->usedMem), &len, NULL, 0);
|
sysctl(MIB_vm_stats_vm_v_wire_count, 4, &(pl->usedMem), &len, NULL, 0);
|
||||||
pl->usedMem *= PAGE_SIZE / 1024;
|
pl->usedMem *= pageSizeKb;
|
||||||
pl->freeMem = pl->totalMem - pl->usedMem;
|
pl->freeMem = pl->totalMem - pl->usedMem;
|
||||||
|
sysctl(MIB_vm_stats_vm_v_cache_count, 4, &(pl->cachedMem), &len, NULL, 0);
|
||||||
|
pl->cachedMem *= pageSizeKb;
|
||||||
|
|
||||||
pl->sharedMem = 0;
|
struct kvm_swap swap[16];
|
||||||
pl->buffersMem = 0;
|
int nswap = kvm_getswapinfo(fpl->kd, swap, sizeof(swap)/sizeof(swap[0]), 0);
|
||||||
pl->cachedMem = 0;
|
|
||||||
pl->totalSwap = 0;
|
pl->totalSwap = 0;
|
||||||
swapFree = 0;
|
pl->usedSwap = 0;
|
||||||
pl->usedSwap = pl->totalSwap - swapFree;
|
for (int i = 0; i < nswap; i++) {
|
||||||
|
pl->totalSwap += swap[i].ksw_total;
|
||||||
|
pl->usedSwap += swap[i].ksw_used;
|
||||||
|
}
|
||||||
|
pl->totalSwap *= pageSizeKb;
|
||||||
|
pl->usedSwap *= pageSizeKb;
|
||||||
|
|
||||||
|
pl->sharedMem = 0; // currently unused
|
||||||
|
pl->buffersMem = 0; // not exposed to userspace
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessList_scan(ProcessList* this) {
|
void ProcessList_scan(ProcessList* this) {
|
||||||
|
|
|
@ -18,9 +18,10 @@ typedef struct FreeBSDProcessList_ {
|
||||||
} FreeBSDProcessList;
|
} FreeBSDProcessList;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList);
|
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList);
|
||||||
|
|
||||||
|
void ProcessList_delete(ProcessList* this);
|
||||||
|
|
||||||
void ProcessList_scan(ProcessList* this);
|
void ProcessList_scan(ProcessList* this);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue