On Thu, Jul 4, 2019 at 11:32 PM Inada Naoki <songofaca...@gmail.com> wrote:
>
> On Thu, Jul 4, 2019 at 8:09 PM Antoine Pitrou <solip...@pitrou.net> wrote:
> >
> > Ah, interesting.  Were you able to measure the memory footprint as well?
> >
>
> 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%)
> - logging_simple: 10028.4 kB +- 371.2 kB -> 22.2 MB +- 24.9 kB: 2.27x
> slower (+127%)

I think I understand why the mimalloc uses more than twice memory than the
pymalloc + glibc malloc in logging_format and logging_simple benchmarks.

These two benchmarks does like this:

    buf = [] # in StringIO
    for _ in range(10*1024):
        buf.append("important: some important information to be logged")
    s = "".join(buf)  # StringIO.getvalue()
    s.splitlines()

mimalloc uses size segregated allocator for ~512KiB.  And size class
is determined
top three bits.
On the other hand, list increases capacity by 9/8.  It means next size
class is used
on each realloc.  At last, all size classes has1~3 used/cached memory blocks.

This is almost worst case for mimalloc.  In more complex application,
there may be
more chance to reuse memory blocks.

In complex or huge application, this overhead will become relatively small.
It's speed is attractive.

But for memory efficiency, pymalloc + jemalloc / tcmalloc may be better for
common cases.

Regards,
-- 
Inada Naoki  <songofaca...@gmail.com>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/ORVLH5FAEO7LVE7SK44TQR6XK4YRRZ7L/

Reply via email to