Skip to content

Commit d2cc803

Browse files
lcheylusvstinner
andauthored
Add BSD support for track-memory (#220)
- Add BSD bool variable (= true if running on BSD OS) - Use psutil to get memory infos on BSD - Use psutil.memory_info().rss on BSD instead of memory_full_info().uss (not supported) Signed-off-by: Laurent Cheylus <[email protected]> Co-authored-by: Victor Stinner <[email protected]>
1 parent 2fcee60 commit d2cc803

File tree

4 files changed

+18
-10
lines changed

4 files changed

+18
-10
lines changed

pyperf/_psutil_memory.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os
22
try:
3-
from pyperf._utils import USE_PSUTIL
3+
from pyperf._utils import USE_PSUTIL, BSD
44
if not USE_PSUTIL:
55
raise ImportError
66
else:
@@ -21,7 +21,12 @@ def __init__(self):
2121
self._quit = False
2222

2323
def get(self):
24-
usage = self.process.memory_full_info().uss
24+
if BSD:
25+
# USS (Unique Set Size) is not supported on BSD,
26+
# use RSS (Resident Set Size) instead.
27+
usage = self.process.memory_info().rss
28+
else:
29+
usage = self.process.memory_full_info().uss
2530
self.peak_usage = max(self.peak_usage, usage)
2631

2732
def run(self):

pyperf/_runner.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
set_highest_priority)
1313
from pyperf._formatter import format_timedelta
1414
from pyperf._hooks import get_hook_names
15-
from pyperf._utils import (MS_WINDOWS, MAC_OS, abs_executable,
15+
from pyperf._utils import (MS_WINDOWS, abs_executable,
1616
WritePipe, get_python_names,
1717
merge_profile_stats)
18+
from pyperf._system import OS_LINUX
1819
from pyperf._worker import WorkerProcessTask
1920

2021

@@ -346,10 +347,10 @@ def _process_args_impl(self):
346347
if args.track_memory:
347348
if MS_WINDOWS:
348349
from pyperf._win_memory import check_tracking_memory
349-
elif MAC_OS:
350-
from pyperf._psutil_memory import check_tracking_memory
351-
else:
350+
elif OS_LINUX:
352351
from pyperf._linux_memory import check_tracking_memory
352+
else:
353+
from pyperf._psutil_memory import check_tracking_memory
353354
err_msg = check_tracking_memory()
354355
if err_msg:
355356
raise CLIError("unable to track the memory usage "

pyperf/_utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
USE_PSUTIL = not bool(sysconfig.get_config_var('Py_GIL_DISABLED'))
1616
MS_WINDOWS = (sys.platform == 'win32')
1717
MAC_OS = (sys.platform == 'darwin')
18+
BSD = ('bsd' in sys.platform)
1819

1920
if MS_WINDOWS:
2021
import msvcrt

pyperf/_worker.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from pyperf._formatter import (format_number, format_value, format_values,
88
format_timedelta)
99
from pyperf._hooks import instantiate_selected_hooks
10-
from pyperf._utils import MS_WINDOWS, MAC_OS, percentile, median_abs_dev
10+
from pyperf._utils import MS_WINDOWS, percentile, median_abs_dev
11+
from pyperf._system import OS_LINUX
1112

1213

1314
MAX_LOOPS = 2 ** 32
@@ -327,12 +328,12 @@ def start(self):
327328
if MS_WINDOWS:
328329
from pyperf._win_memory import get_peak_pagefile_usage
329330
self.get_peak_profile_usage = get_peak_pagefile_usage
330-
elif MAC_OS:
331-
from pyperf._psutil_memory import PeakMemoryUsageThread
331+
elif OS_LINUX:
332+
from pyperf._linux_memory import PeakMemoryUsageThread
332333
self.mem_thread = PeakMemoryUsageThread()
333334
self.mem_thread.start()
334335
else:
335-
from pyperf._linux_memory import PeakMemoryUsageThread
336+
from pyperf._psutil_memory import PeakMemoryUsageThread
336337
self.mem_thread = PeakMemoryUsageThread()
337338
self.mem_thread.start()
338339

0 commit comments

Comments
 (0)