All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@digeo.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: Linus Torvalds <torvalds@transmeta.com>,
	Andrew Morton <akpm@zip.com.au>,
	Saurabh Desai <sdesai@austin.ibm.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	NPT library mailing list <phil-list@redhat.com>
Subject: Re: [patch] mmap-speedup-2.5.42-C3
Date: Tue, 15 Oct 2002 11:09:59 -0700	[thread overview]
Message-ID: <3DAC59F7.18678FA6@digeo.com> (raw)
In-Reply-To: Pine.LNX.4.44.0210151438440.10496-100000@localhost.localdomain

Ingo Molnar wrote:
> 
> ...
> 
> Saurabh reported a slowdown after the first couple of thousands of
> threads, which i can reproduce as well. The reason for this slowdown is
> the get_unmapped_area() implementation, which tries to achieve the most
> compact virtual memory allocation, by searching for the vma at
> TASK_UNMAPPED_BASE, and then linearly searching for a hole. With thousands
> of linearly allocated vmas this is an increasingly painful thing to do ...

We've had reports of problems with that linear search before - for
a single-threaded application which was mapping a lot of little windows
into a huge file.
 
> ...
> 
> there are various solutions to this problem, none of which solve the
> problem in a 100% sufficient way, so i went for the simplest approach: i
> added code to cache the 'last known hole' address in mm->free_area_cache,
> which is used as a hint to get_unmapped_area().

This will have no effect on current kernel behaviour other than speeding
it up.  Looks good.
 
> ...
> The most generic and still perfectly-compact VM allocation solution would
> be to have a vma tree for the 'inverse virtual memory space', ie. a tree
> of free virtual memory ranges, which could be searched and iterated like
> the space of allocated vmas. I think we could do this by extending vmas,
> but the drawback is larger vmas. This does not save us from having to scan
> vmas linearly still, because the size constraint is still present, but at
> least most of the anon-mmap activities are constant sized. (both malloc()
> and the thread-stack allocator uses mostly fixed sizes.)

Yup.  We'd need to be able to perform a search based on "size of hole"
rather than virtual address.  That really needs a whole new data structure
and supporting search code, I think...  It also may have side effects
to do with fragmentation of the virtual address space.

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@digeo.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: Linus Torvalds <torvalds@transmeta.com>,
	Andrew Morton <akpm@zip.com.au>,
	Saurabh Desai <sdesai@austin.ibm.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	NPT library mailing list <phil-list@redhat.com>
Subject: Re: [patch] mmap-speedup-2.5.42-C3
Date: Tue, 15 Oct 2002 11:09:59 -0700	[thread overview]
Message-ID: <3DAC59F7.18678FA6@digeo.com> (raw)
In-Reply-To: Pine.LNX.4.44.0210151438440.10496-100000@localhost.localdomain

Ingo Molnar wrote:
> 
> ...
> 
> Saurabh reported a slowdown after the first couple of thousands of
> threads, which i can reproduce as well. The reason for this slowdown is
> the get_unmapped_area() implementation, which tries to achieve the most
> compact virtual memory allocation, by searching for the vma at
> TASK_UNMAPPED_BASE, and then linearly searching for a hole. With thousands
> of linearly allocated vmas this is an increasingly painful thing to do ...

We've had reports of problems with that linear search before - for
a single-threaded application which was mapping a lot of little windows
into a huge file.
 
> ...
> 
> there are various solutions to this problem, none of which solve the
> problem in a 100% sufficient way, so i went for the simplest approach: i
> added code to cache the 'last known hole' address in mm->free_area_cache,
> which is used as a hint to get_unmapped_area().

This will have no effect on current kernel behaviour other than speeding
it up.  Looks good.
 
> ...
> The most generic and still perfectly-compact VM allocation solution would
> be to have a vma tree for the 'inverse virtual memory space', ie. a tree
> of free virtual memory ranges, which could be searched and iterated like
> the space of allocated vmas. I think we could do this by extending vmas,
> but the drawback is larger vmas. This does not save us from having to scan
> vmas linearly still, because the size constraint is still present, but at
> least most of the anon-mmap activities are constant sized. (both malloc()
> and the thread-stack allocator uses mostly fixed sizes.)

Yup.  We'd need to be able to perform a search based on "size of hole"
rather than virtual address.  That really needs a whole new data structure
and supporting search code, I think...  It also may have side effects
to do with fragmentation of the virtual address space.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/

  reply	other threads:[~2002-10-15 18:04 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-15 13:11 [patch] mmap-speedup-2.5.42-C3 Ingo Molnar
2002-10-15 13:11 ` Ingo Molnar
2002-10-15 18:09 ` Andrew Morton [this message]
2002-10-15 18:09   ` Andrew Morton
2002-10-15 21:30   ` Andi Kleen
2002-10-16  8:03     ` Ingo Molnar
2002-10-16  8:07       ` Jakub Jelinek
2002-10-16  8:27         ` Ingo Molnar
2002-10-16  8:22           ` Jakub Jelinek
2002-10-16  9:16         ` Andi Kleen
2002-10-16  9:47           ` Ingo Molnar
2002-10-16 12:08             ` Jakub Jelinek
2002-10-16  1:14 ` Saurabh Desai
2002-10-16  1:14   ` Saurabh Desai
2002-10-16  8:14   ` Ingo Molnar
2002-10-16  8:14     ` Ingo Molnar
2002-10-16 14:52     ` Linus Torvalds
2002-10-16 14:52       ` Linus Torvalds
2002-10-16 15:49       ` Arjan van de Ven
2002-10-16 16:10         ` Andrew Morton
2002-10-16 16:10           ` Andrew Morton

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

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

  git send-email \
    --in-reply-to=3DAC59F7.18678FA6@digeo.com \
    --to=akpm@digeo.com \
    --cc=akpm@zip.com.au \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mingo@elte.hu \
    --cc=phil-list@redhat.com \
    --cc=sdesai@austin.ibm.com \
    --cc=torvalds@transmeta.com \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.