unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Nix <nix@esperi.org.uk>
To: Dmitry Antipov <dmantipov@yandex.ru>
Cc: emacs-devel@gnu.org
Subject: Re: Emacs bzr memory footprint
Date: Fri, 21 Oct 2011 16:22:30 +0100	[thread overview]
Message-ID: <87sjmml689.fsf@spindle.srvr.nix> (raw)
In-Reply-To: <4EA18204.4010604@yandex.ru> (Dmitry Antipov's message of "Fri, 21 Oct 2011 18:30:28 +0400")

On 21 Oct 2011, Dmitry Antipov uttered the following:
> Nevertheless, glibc malloc design assumes that smaller (below
> threshold above) chunks may be still allocated with mmap().

Really? I double-checked the glibc-2.12 malloc source, and mmap()s only
used for large allocations above that minimum threshold, for multiple
(threaded) arenas, and if sbrk() fails. (It normally uses a sliding
threshold to define 'minimum', but that threshold only goes *up* from
the minimum, never down. However, because Emacs sets the threshold
explicitly, the dynamic behaviour is halted and mmap() should be used
for all requests >64Kb.)

btw, regarding

,----[ src/alloc.c ]
| /* Specify maximum number of areas to mmap.  It would be nice to use a
|    value that explicitly means "no limit".  */
| 
| #define MMAP_MAX_AREAS 100000000
`----

there is a reason glibc malloc uses a default value of 65536, which is
simply that older Linux kernels used to get rather unhappy with programs
that defined many tens of thousands of VMAs (mmapped regions, roughly).
I think the first two programs to trigger this were Java and
User-Mode Linux: the latter mmap()ed one 4Kb chunk per 4Kb of guest
memory, and soon ended up causing exponential slowdowns inside the
kernel memory allocator.

More recent kernels (anything in the 2.6 line, certainly) don't have
this problem, so I think the huge value Emacs uses is probably fine. (If
the problem recurs, you *will* hear about it: it's hard to miss it when
a text editor gets stuck inside the kernel for several seconds inside
a not-too-large mmap(). But I suspect anyone still running a kernel old
enough to have this problem also has too little memory to see it with
regions of the size Emacs will mmap().)

> Run emacs with:
>
> strace -e signal=none -e trace=mmap,mremap,munmap emacs
>
> and you will see a lot of allocation requests of very different sizes.

Yep. However, a lot of those may come from other libraries: a good few
of them mmap() data in from files (especially at startup), mmap() small
anonymous regions and the like.

> On the other side, lisp data is newer mapped, and in some cases this
> is the main reason which causes sbrk()'ed heap fragmentation. Don't
> beat toolkits, don't beat system libraries. Now I'm observing the case
> where 4 GCs reduces amount of lisp data (live + free lists) from 30M
> to 8M, and mallinfo().fordblks raises from 1M to 22M. This 21M of
> fragmented heap is 'locked' into malloc freelists; they can be
> re-used, but will never released back to OS.

That's exactly what I feared :(

-- 
NULL && (void)



  reply	other threads:[~2011-10-21 15:22 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-13  9:24 Emacs bzr memory footprint Carsten Mattner
2011-10-13 10:01 ` Eli Zaretskii
2011-10-13 10:33   ` Andreas Schwab
2011-10-13 10:46     ` Eli Zaretskii
2011-10-13 13:08       ` Carsten Mattner
2011-10-13 13:38         ` Eli Zaretskii
2011-10-13 15:22           ` Miles Bader
2011-10-13 15:30             ` Eli Zaretskii
2011-10-13 16:16               ` Stefan Monnier
2011-10-13 17:33                 ` Dmitry Antipov
2011-10-13 18:42                   ` Eli Zaretskii
2011-10-14  3:09                     ` Dmitry Antipov
2011-10-13 16:46             ` Stephen J. Turnbull
2011-10-13 16:59               ` Carsten Mattner
2011-10-13 13:13   ` Carsten Mattner
2011-10-13 13:43     ` Eli Zaretskii
2011-10-13 14:10       ` Dave Abrahams
2011-10-13 14:46         ` Eli Zaretskii
2011-10-13 15:05           ` Dave Abrahams
2011-10-13 14:22       ` Stefan Monnier
2011-10-13 16:55         ` Carsten Mattner
2011-10-13 17:09           ` Stefan Monnier
2011-10-14 12:11             ` Carsten Mattner
2011-10-14 21:02             ` John Wiegley
2011-10-15  1:22               ` Stefan Monnier
2011-10-13 17:22           ` Richard Riley
2011-10-13 16:12       ` Chong Yidong
2011-10-13 20:18     ` chad
2011-10-14 12:13       ` Carsten Mattner
2011-10-14 12:18         ` Carsten Mattner
2011-10-14 15:49           ` Sven Joachim
2011-10-14 16:30             ` Ted Zlatanov
2011-10-14 16:48               ` Sven Joachim
2011-10-14 17:16                 ` Carsten Mattner
2011-10-15 18:12                 ` Sven Joachim
2011-10-20 13:35                 ` Nix
2011-10-20 23:02                   ` John Wiegley
2011-10-21  0:19                     ` Nix
2011-10-21  8:19                       ` Eli Zaretskii
2011-10-21 12:05                         ` Nix
2011-10-21 12:36                           ` Eli Zaretskii
2011-10-21 12:47                             ` Nix
2011-10-21 14:30                               ` Dmitry Antipov
2011-10-21 15:22                                 ` Nix [this message]
2011-10-21 18:29                                   ` Dmitry Antipov
2011-10-21 18:36                                     ` Nix
2011-10-21 13:30                       ` Stefan Monnier
2011-10-21 15:02                         ` Nix
2011-10-21 17:52                           ` Stefan Monnier
2011-10-21 19:12                             ` Nix
2011-10-21 15:34                         ` Dmitry Antipov
2011-10-21 18:00                           ` Stefan Monnier
2011-10-21 18:27                             ` Óscar Fuentes
2011-10-21 18:58                               ` Eli Zaretskii
2011-10-21 19:11                               ` Nix
2011-10-21 20:18                                 ` Eli Zaretskii
2011-10-21 20:21                                   ` Nix
2011-10-22  7:34                             ` Carsten Mattner
2011-10-22  8:30                               ` Stephen J. Turnbull
2011-10-22 12:03                                 ` Carsten Mattner
2011-10-22 16:08                                   ` Stephen J. Turnbull
2011-10-27 22:10                                     ` Ted Zlatanov
2011-10-28  6:40                                       ` Eli Zaretskii
2011-10-28  9:34                                         ` Stephen J. Turnbull
2011-10-28  9:47                                           ` Eli Zaretskii
2011-10-28 10:22                                             ` Stephen J. Turnbull
2011-10-28 10:36                                               ` Eli Zaretskii
2011-10-28 11:52                                                 ` valgrind warnings [Re: Emacs bzr memory footprint] Dan Nicolaescu
2011-10-28 14:08                                                   ` Stephen J. Turnbull
2011-10-28 14:38                                                   ` Dan Nicolaescu
2011-10-28 15:17                                                     ` Chong Yidong
2011-10-28 15:35                                                       ` Eli Zaretskii
2011-10-28 15:27                                                     ` Eli Zaretskii
2011-10-28 16:34                                                       ` Dan Nicolaescu
2011-10-28 18:36                                                         ` Eli Zaretskii
2011-10-28 18:51                                                           ` Eli Zaretskii
2011-10-28 18:52                                                           ` Dan Nicolaescu
2011-10-28 19:03                                                             ` Eli Zaretskii
2011-10-28 15:08                                                   ` Ted Zlatanov
2011-12-04 21:11                                                     ` Florian Weimer
2011-10-28 20:20                                                   ` Dan Nicolaescu
2011-10-29  3:40                                                     ` Chong Yidong
2011-10-29  7:04                                                       ` Andreas Schwab
2011-10-29 16:25                                                         ` Stefan Monnier
2011-11-04 12:51                                                           ` Dan Nicolaescu
2011-11-04 13:08                                                             ` Andreas Schwab
2011-11-04 15:50                                                             ` valgrind warnings Paul Eggert
2011-11-04 17:37                                                             ` valgrind warnings [Re: Emacs bzr memory footprint] Stefan Monnier
2011-11-04 19:10                                                               ` Dan Nicolaescu
2011-11-04 20:56                                                                 ` Paul Eggert
2011-11-05 22:08                                                                   ` Dan Nicolaescu
2011-11-06  2:34                                                                     ` Paul Eggert
2011-11-06 12:37                                                                       ` Dan Nicolaescu
2011-11-07  1:13                                                                         ` Paul Eggert
2011-10-29  9:10                                                     ` Eli Zaretskii
2011-10-22  8:44                               ` Emacs bzr memory footprint Sven Joachim
2011-10-22 11:57                                 ` Carsten Mattner
2011-10-23 18:04                               ` Stefan Monnier
2011-10-25 17:35                         ` Nix
2011-10-25 20:23                           ` Stefan Monnier
2011-10-25 20:34                             ` Nix
2011-10-26 14:52                             ` gnutls memory leak [Was: Re: Emacs bzr memory footprint] Chong Yidong
2011-10-27  6:10                               ` Chong Yidong
2011-10-27 22:01                                 ` Ted Zlatanov
2011-10-28 12:04                                   ` Ted Zlatanov
2011-10-28 17:29                                     ` Nix
2011-10-27 22:03                               ` Ted Zlatanov
2011-10-13 21:23 ` Emacs bzr memory footprint Dan Nicolaescu
2011-10-14 13:04 ` Carsten Mattner
2011-10-14 18:13 ` James Cloos
2011-10-17 20:52   ` Juri Linkov
2011-10-17 23:34     ` James Cloos
2011-10-18  7:24       ` Andreas Schwab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87sjmml689.fsf@spindle.srvr.nix \
    --to=nix@esperi.org.uk \
    --cc=dmantipov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).