[Python-Dev] Re: obmalloc (was Have a big machine and spare time? Here's a possible Python bug.)

2019年7月04日 09:27:07 -0700

I guess that INADA-san used pyperformance --track-memory.
pyperf --track-memory doc:
"--track-memory: get the memory peak usage. it is less accurate than
tracemalloc, but has a lower overhead. On Linux, compute the sum of
Private_Clean and Private_Dirty memory mappings of /proc/self/smaps.
On Windows, get PeakPagefileUsage of GetProcessMemoryInfo() (of the
current process): the peak value of the Commit Charge during the
lifetime of this process."
https://pyperf.readthedocs.io/en/latest/runner.html#misc 
On Linux, pyperf uses read_smap_file() of pyperf._memory:
https://github.com/vstinner/pyperf/blob/master/pyperf/_memory.py
# Code to parse Linux /proc/%d/smaps files.
#
# See http://bmaurer.blogspot.com/2006/03/memory-usage-with-smaps.html for
# a quick introduction to smaps.
#
# Need Linux 2.6.16 or newer.
def read_smap_file():
 total = 0
 fp = open(proc_path("self/smaps"), "rb")
 with fp:
 for line in fp:
 # Include both Private_Clean and Private_Dirty sections.
 line = line.rstrip()
 if line.startswith(b"Private_") and line.endswith(b'kB'):
 parts = line.split()
 total += int(parts[1]) * 1024
 return total
It spawns a thread which reads /proc/self/smaps every milliseconds and
then report the *maximum*.
Victor
Le jeu. 4 juil. 2019 à 17:12, Tim Peters <[email protected]> a écrit :
>
> [Antoine Pitrou <[email protected]>]
> >> Ah, interesting. Were you able to measure the memory footprint as well?
>
> [Inada Naoki <[email protected]>]
> > Hmm, it is not good. mimalloc uses MADV_FREE so it may affect to some
> > benchmarks. I will look it later.
> >
> > ```
> > $ ./python -m pyperf compare_to pymalloc-mem.json mimalloc-mem.json -G
> > Slower (60):
> > - logging_format: 10.6 MB +- 384.2 kB -> 27.2 MB +- 21.3 kB: 2.58x
> > slower (+158%)
> > ...
>
> Could you say more about what's being measured here? Like, if this is
> on Linux, is it reporting RSS? VSS? Something else?
>
> mimalloc is "most like" obmalloc among those I've looked at in recent
> weeks. I noted before that its pools (they call them "pages") and
> arenas (called "segments") are at least 16x larger than obmalloc uses
> (64 KiB minimum pool/page size, and 4 MiB minimum arena/segment size,
> in mimalloc).
>
> Like all "modern" 64-bit allocators, it cares little about reserving
> largish blobs of address space, so I'd _expect_ Linuxy VSS to zoom.
> But it also releases (in some sense, ;like MADV_FREE) physical RAM
> back to the system at a granularity far smaller than arena'segment.
>
> At an extreme, the SuperMalloc I linked to earlier reserves a 512 MiB
> vector at the start, so no program linking to that can consume less
> than half a gig of address space. But it only expects to _use_ a few
> 4 KiB OS pages out of that. mimalloc doesn't do anything anywhere
> near _that_ gonzo (& since mimalloc comes out of Microsoft, it never
> will - "total virtual memory" on Windows is a system-wide resource,
> limited to the sum of physical RAM + pagefile size - no "overcommit"
> is allowed).
> _______________________________________________
> Python-Dev mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at 
> https://mail.python.org/archives/list/[email protected]/message/ES3BFCBXS7N56XGUHHSOPHRT3UAEGKVA/
-- 
Night gathers, and now my watch begins. It shall not end until my death.
_______________________________________________
Python-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/HF4UIZP5J3KKWQMLCHKJD3G6YZLHWWBE/

Reply via email to