diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2023-04-15 13:39:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-15 13:39:02 +0200 |
commit | a0b096c88421548593ecebe93bbe369385087f3b (patch) | |
tree | 6a9706d587ea2ff06d1cb7f4c26b712d4ccdd706 /psutil/arch | |
parent | 9322179812d3177719c7bab23301646bbf862974 (diff) | |
download | psutil-a0b096c88421548593ecebe93bbe369385087f3b.tar.gz |
[NetBSD] virtual_memory() metrics are completely wrong (#2235), fixes #2234
Match values shown by **htop**. This is before. In here:
* available mem is almost the same as total (unrealistic)
* used is higher than total; there's also a failing test:
```
MEMORY
------
Total : 972.7M
Available : 959.1M
Percent : 1.4
Used : 1.1G
Free : 173.6M
Active : 434.3M
Inactive : 258.4M
Buffers : 509.4M
Cached : 692.9M
Shared : 0.0B
Wired : 280.0K
```
Now:
```
MEMORY
------
Total : 972.7M
Available : 538.1M
Percent : 44.7
Used : 434.5M
Free : 173.6M
Active : 434.2M
Inactive : 258.4M
Buffers : 509.4M
Cached : 692.9M
Shared : 0.0B
Wired : 280.0K
```
Diffstat (limited to 'psutil/arch')
-rw-r--r-- | psutil/arch/netbsd/mem.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/psutil/arch/netbsd/mem.c b/psutil/arch/netbsd/mem.c index 26ab8e69..456479ba 100644 --- a/psutil/arch/netbsd/mem.c +++ b/psutil/arch/netbsd/mem.c @@ -31,8 +31,7 @@ psutil_virtual_mem(PyObject *self, PyObject *args) { size_t size; struct uvmexp_sysctl uv; int mib[] = {CTL_VM, VM_UVMEXP2}; - long pagesize = psutil_getpagesize(); - unsigned long long available; + long long cached; size = sizeof(uv); if (sysctl(mib, 2, &uv, &size, NULL, 0) < 0) { @@ -40,17 +39,18 @@ psutil_virtual_mem(PyObject *self, PyObject *args) { return NULL; } - // follow zabbix - available = uv.inactive + uv.execpages + uv.filepages + uv.free; + // Note: zabbix does not include anonpages, but that doesn't match the + // "Cached" value in /proc/meminfo. + // https://github.com/zabbix/zabbix/blob/af5e0f8/src/libs/zbxsysinfo/netbsd/memory.c#L182 + cached = (uv.filepages + uv.execpages + uv.anonpages) << uv.pageshift; return Py_BuildValue( - "KKKKKKK", - (unsigned long long) uv.npages << uv.pageshift, // total - (unsigned long long) uv.free << uv.pageshift, // free - (unsigned long long) uv.active << uv.pageshift, // active - (unsigned long long) uv.inactive << uv.pageshift, // inactive - (unsigned long long) uv.wired << uv.pageshift, // wired - (unsigned long long) (uv.filepages + uv.execpages) * pagesize, // cached - available << uv.pageshift // available + "LLLLLL", + (long long) uv.npages << uv.pageshift, // total + (long long) uv.free << uv.pageshift, // free + (long long) uv.active << uv.pageshift, // active + (long long) uv.inactive << uv.pageshift, // inactive + (long long) uv.wired << uv.pageshift, // wired + cached // cached ); } |