diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2015-11-25 20:17:29 +0100 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2015-11-25 20:17:29 +0100 |
commit | 8485b4ef130c50a63e79dafe6f77f5e72d4a289a (patch) | |
tree | c00f18bde2a074de6d0f622f039264a581e16df3 | |
parent | 1c20a66a1be79481f31bbcbea6e22b7edf1709c0 (diff) | |
download | psutil-8485b4ef130c50a63e79dafe6f77f5e72d4a289a.tar.gz |
#714: [OpenBSD] return virtual cached memory
-rw-r--r-- | HISTORY.rst | 8 | ||||
-rw-r--r-- | psutil/__init__.py | 2 | ||||
-rw-r--r-- | psutil/arch/bsd/openbsd.c | 33 |
3 files changed, 30 insertions, 13 deletions
diff --git a/HISTORY.rst b/HISTORY.rst index cca4c653..0dd2ebff 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,5 +1,13 @@ Bug tracker at https://github.com/giampaolo/psutil/issues +3.3.1 - XXXX-XX-XX +================== + +**Bug fixes** + +- #714: [OpenBSD] virtual_memory().cached value was always set to 0. + + 3.3.0 - 2015-11-25 ================== diff --git a/psutil/__init__.py b/psutil/__init__.py index 80aa261b..fa89f973 100644 --- a/psutil/__init__.py +++ b/psutil/__init__.py @@ -161,7 +161,7 @@ __all__ = [ ] __all__.extend(_psplatform.__extra__all__) __author__ = "Giampaolo Rodola'" -__version__ = "3.3.0" +__version__ = "3.3.1" version_info = tuple([int(num) for num in __version__.split('.')]) AF_LINK = _psplatform.AF_LINK _TOTAL_PHYMEM = None diff --git a/psutil/arch/bsd/openbsd.c b/psutil/arch/bsd/openbsd.c index d7aa8972..fc1673c3 100644 --- a/psutil/arch/bsd/openbsd.c +++ b/psutil/arch/bsd/openbsd.c @@ -19,6 +19,7 @@ #include <sys/sysctl.h> #include <sys/user.h> #include <sys/proc.h> +#include <sys/mount.h> // for VFS_* #include <sys/swap.h> // for swap_mem #include <signal.h> #include <kvm.h> @@ -321,25 +322,33 @@ error: PyObject * psutil_virtual_mem(PyObject *self, PyObject *args) { - unsigned int total; - size_t size = sizeof(total); - struct uvmexp uvmexp; - int mib[] = {CTL_VM, VM_UVMEXP}; - long pagesize = getpagesize(); + int uvmexp_mib[] = {CTL_VM, VM_UVMEXP}; + int bcstats_mib[] = {CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT}; + size_t size; + struct uvmexp uvmexp; + struct bcachestats bcstats; + long pagesize = getpagesize(); + size = sizeof(uvmexp); + if (sysctl(uvmexp_mib, 2, &uvmexp, &size, NULL, 0) < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } - if (sysctl(mib, 2, &uvmexp, &size, NULL, 0) < 0) { - warn("failed to get vm.uvmexp"); + // This is how "top" calculates cached memory. + size = sizeof(bcstats); + if (sysctl(bcstats_mib, 3, &bcstats, &size, NULL, 0) < 0) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } + return Py_BuildValue("KKKKKKKK", - (unsigned long long) uvmexp.npages * pagesize, - (unsigned long long) uvmexp.free * pagesize, - (unsigned long long) uvmexp.active * pagesize, + (unsigned long long) uvmexp.npages * pagesize, + (unsigned long long) uvmexp.free * pagesize, + (unsigned long long) uvmexp.active * pagesize, (unsigned long long) uvmexp.inactive * pagesize, - (unsigned long long) uvmexp.wired * pagesize, - (unsigned long long) 0, // cached + (unsigned long long) uvmexp.wired * pagesize, + (unsigned long long) bcstats.numbufpages * pagesize, // cached (unsigned long long) 0, // buffers (unsigned long long) 0 // shared ); |