summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2019-11-21 23:15:37 -0800
committerGiampaolo Rodola <g.rodola@gmail.com>2019-11-21 23:15:37 -0800
commit02a799a21d5e25a074ad968bb4e7ff012fb737c4 (patch)
tree0ddb848376f9e3333dd5571751b82faa9752a3fe
parent81796561fc3e485e64f2064043078cdeeab0c780 (diff)
downloadpsutil-shared-mem.tar.gz
also provide private wset, which is supposed to be different than USSshared-mem
-rw-r--r--psutil/_psutil_windows.c32
-rw-r--r--psutil/_pswindows.py8
-rwxr-xr-xpsutil/tests/test_process.py5
3 files changed, 15 insertions, 30 deletions
diff --git a/psutil/_psutil_windows.c b/psutil/_psutil_windows.c
index b8391a7a..20b86f0a 100644
--- a/psutil/_psutil_windows.c
+++ b/psutil/_psutil_windows.c
@@ -833,8 +833,8 @@ static PyObject *
psutil_proc_memory_wset(PyObject *self, PyObject *args) {
DWORD pid;
HANDLE hProcess;
- PSUTIL_PROCESS_WS_COUNTERS wsCounters;
PMEMORY_WORKING_SET_INFORMATION wsInfo;
+ SIZE_T uss, private, shared, shareable = 0;
ULONG_PTR i;
if (! PyArg_ParseTuple(args, "l", &pid))
@@ -847,42 +847,24 @@ psutil_proc_memory_wset(PyObject *self, PyObject *args) {
CloseHandle(hProcess);
return NULL;
}
- memset(&wsCounters, 0, sizeof(PSUTIL_PROCESS_WS_COUNTERS));
for (i = 0; i < wsInfo->NumberOfEntries; i++) {
- // This is what ProcessHacker does.
- /*
- wsCounters.NumberOfPages++;
- if (wsInfo->WorkingSetInfo[i].ShareCount > 1)
- wsCounters.NumberOfSharedPages++;
- if (wsInfo->WorkingSetInfo[i].ShareCount == 0)
- wsCounters.NumberOfPrivatePages++;
- if (wsInfo->WorkingSetInfo[i].Shared)
- wsCounters.NumberOfShareablePages++;
- */
-
- // This is what we do: count shared pages that only one process
- // is using as private (USS).
if (!wsInfo->WorkingSetInfo[i].Shared ||
wsInfo->WorkingSetInfo[i].ShareCount <= 1) {
- wsCounters.NumberOfPrivatePages++;
+ uss++;
}
-
- // shared memory info
if (wsInfo->WorkingSetInfo[i].ShareCount > 1)
- wsCounters.NumberOfSharedPages++;
+ shared++;
if (wsInfo->WorkingSetInfo[i].Shared)
- wsCounters.NumberOfShareablePages++;
+ shareable++;
+ if (wsInfo->WorkingSetInfo[i].ShareCount == 0)
+ private++;
}
HeapFree(GetProcessHeap(), 0, wsInfo);
CloseHandle(hProcess);
- return Py_BuildValue(
- "III",
- wsCounters.NumberOfPrivatePages,
- wsCounters.NumberOfSharedPages,
- wsCounters.NumberOfShareablePages);
+ return Py_BuildValue("IIII", uss, private, shared, shareable);
}
diff --git a/psutil/_pswindows.py b/psutil/_pswindows.py
index c5ef7c3b..0b061a8c 100644
--- a/psutil/_pswindows.py
+++ b/psutil/_pswindows.py
@@ -202,7 +202,8 @@ pmem = namedtuple(
'pagefile', 'peak_pagefile', 'private'])
# psutil.Process.memory_full_info()
pfullmem = namedtuple('pfullmem',
- pmem._fields + ('uss', 'shared', 'shareable'))
+ pmem._fields + ('uss', 'wset_private', 'wset_shared',
+ 'wset_shareable'))
# psutil.Process.memory_maps(grouped=True)
pmmap_grouped = namedtuple('pmmap_grouped', ['path', 'rss'])
# psutil.Process.memory_maps(grouped=False)
@@ -868,11 +869,12 @@ class Process(object):
@wrap_exceptions
def memory_full_info(self):
basic_mem = self.memory_info()
- uss, shared, shareable = cext.proc_memory_wset(self.pid)
+ uss, private, shared, shareable = cext.proc_memory_wset(self.pid)
uss *= getpagesize()
+ private *= getpagesize()
shared *= getpagesize()
shareable *= getpagesize()
- return pfullmem(*basic_mem + (uss, shared, shareable))
+ return pfullmem(*basic_mem + (uss, private, shared, shareable))
def memory_maps(self):
try:
diff --git a/psutil/tests/test_process.py b/psutil/tests/test_process.py
index a92e84ce..c63ee09f 100755
--- a/psutil/tests/test_process.py
+++ b/psutil/tests/test_process.py
@@ -613,8 +613,9 @@ class TestProcess(unittest.TestCase):
self.assertGreaterEqual(mem.pss, 0)
self.assertGreaterEqual(mem.swap, 0)
if WINDOWS:
- self.assertGreaterEqual(mem.shared, 0)
- self.assertGreaterEqual(mem.shareable, 0)
+ self.assertGreaterEqual(mem.wset_private, 0)
+ self.assertGreaterEqual(mem.wset_shared, 0)
+ self.assertGreaterEqual(mem.wset_shareable, 0)
@unittest.skipIf(not HAS_MEMORY_MAPS, "not supported")
def test_memory_maps(self):