FreeBSD Bugzilla – Attachment 124490 Details for
Bug 167970
[patch] sysutils/htop miscalculates memory usage
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
patch-ProcessList.c
patch-ProcessList.c (text/x-csrc; charset=US-ASCII), 2.28 KB, created by
vsjcfm
on 2012-05-17 08:03:56 UTC
(
hide
)
Description:
patch-ProcessList.c
Filename:
MIME Type:
Creator:
vsjcfm
Created:
2012-05-17 08:03:56 UTC
Size:
2.28 KB
patch
obsolete
>--- ./ProcessList.c.orig 2012-02-03 01:45:11.000000000 +0200 >+++ ./ProcessList.c 2012-05-16 17:39:50.000000000 +0300 >@@ -25,6 +25,19 @@ > #include <time.h> > #include <assert.h> > >+#ifndef PAGE_SIZE >+#define PAGE_SIZE sysconf(_SC_PAGESIZE) >+#endif >+ >+#ifdef __FreeBSD__ >+#define KB 1024 >+#define SYSCTLBYNAME(name, var, len) sysctlbyname(name, &(var), &(len), NULL, 0) >+#include <kvm.h> >+#include <paths.h> >+#include <fcntl.h> >+#include <sys/sysctl.h> >+#endif >+ > /*{ > #include "Vector.h" > #include "Hashtable.h" >@@ -749,11 +762,13 @@ > > void ProcessList_scan(ProcessList* this) { > unsigned long long int usertime, nicetime, systemtime, systemalltime, idlealltime, idletime, totaltime, virtalltime; >- unsigned long long int swapFree = 0; >+ int cpus = this->cpuCount; >+ FILE* file = NULL; > >- FILE* file = fopen(PROCMEMINFOFILE, "r"); >+ #ifndef __FreeBSD__ >+ unsigned long long int swapFree = 0; >+ file = fopen(PROCMEMINFOFILE, "r"); > assert(file != NULL); >- int cpus = this->cpuCount; > { > char buffer[128]; > while (fgets(buffer, 128, file)) { >@@ -788,6 +803,33 @@ > this->usedMem = this->totalMem - this->freeMem; > this->usedSwap = this->totalSwap - swapFree; > fclose(file); >+ #endif >+ >+ #ifdef __FreeBSD__ >+ kvm_t *kd = NULL; >+ struct kvm_swap kvmswapinfo[1]; >+ size_t len = 0; >+ >+ kd = kvm_open(NULL, _PATH_DEVNULL, NULL, O_RDONLY, NULL); >+ assert(kd != NULL); >+ kvm_getswapinfo(kd, kvmswapinfo, 1, 0); >+ this->totalSwap = kvmswapinfo[0].ksw_total * PAGE_SIZE / KB; >+ this->usedSwap = kvmswapinfo[0].ksw_used * PAGE_SIZE / KB; >+ kvm_close(kd); >+ len = sizeof(this->totalMem); >+ SYSCTLBYNAME("vm.stats.vm.v_page_count", this->totalMem, len); >+ this->totalMem *= PAGE_SIZE / KB; >+ len = sizeof(this->cachedMem); >+ SYSCTLBYNAME("vm.stats.vm.v_cache_count", this->cachedMem, len); >+ this->cachedMem *= PAGE_SIZE / KB; >+ len = sizeof(this->buffersMem); >+ SYSCTLBYNAME("vfs.bufspace", this->buffersMem, len); >+ this->buffersMem /= KB; >+ len = sizeof(this->usedMem); >+ SYSCTLBYNAME("vm.stats.vm.v_active_count", this->usedMem, len); >+ this->usedMem = this->usedMem * PAGE_SIZE / KB + this->cachedMem + this->buffersMem; >+ this->freeMem = this->totalMem - this->usedMem; >+ #endif > > file = fopen(PROCSTATFILE, "r"); > assert(file != NULL);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 167970
:
124486
|
124487
|
124488
|
124489
| 124490