From: "'David Gibson'" <david@gibson.dropbear.id.au>
To: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
Cc: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org,
lse-tech@lists.sourceforge.net, raybry@sgi.com,
"'Andy Whitcroft'" <apw@shadowen.org>,
"'Andrew Morton'" <akpm@osdl.org>
Subject: Re: hugetlb demand paging patch part [2/3]
Date: Fri, 16 Apr 2004 13:27:25 +1000 [thread overview]
Message-ID: <20040416032725.GG12735@zax> (raw)
In-Reply-To: <200404160258.i3G2w8F13087@unix-os.sc.intel.com>
On Thu, Apr 15, 2004 at 07:58:07PM -0700, Chen, Kenneth W wrote:
> >>>> David Gibson wrote on Thursday, April 15, 2004 7:35 PM
> > > Yes, killing follow_hugetlb_page() is safe because follow_page() takes
> > > care of hugetlb page. See 2nd patch posted earlier in
> > > hugetlb_demanding_generic.patch
> >
> > Yes, I looked at it already. But what I'm asking about is applying
> > this patch *without* (or before) going to demand paging.
> >
> > Index: working-2.6/mm/memory.c
> > ===================================================================
> > +++ working-2.6/mm/memory.c 2004-04-16 11:46:31.935870496 +1000
> > @@ -766,16 +766,13 @@
> > || !(flags & vma->vm_flags))
> > return i ? : -EFAULT;
> >
> > - if (is_vm_hugetlb_page(vma)) {
> > - i = follow_hugetlb_page(mm, vma, pages, vmas,
> > - &start, &len, i);
> > - continue;
> > - }
> > spin_lock(&mm->page_table_lock);
> > do {
> > struct page *map;
> > int lookup_write = write;
> > while (!(map = follow_page(mm, start, lookup_write))) {
> > + /* hugepages should always be prefaulted */
> > + BUG_ON(is_vm_hugetlb_page(vma));
> > /*
> > * Shortcut for anonymous pages. We don't want
> > * to force the creation of pages tables for
> >
> > Yes, I looked at it already. But what I'm asking about is applying
> > this patch *without* (or before) going to demand paging.
Oh, drat. Looks like I included the old version of the patch again,
not the fixed version without the BUG_ON(). Corrected version
below for real this time.
> In that case, yes, it is not absolutely required. But we do special
> optimization for follow_hugetlb_pages() in the prefaulting implementation,
> at least for ia64 arch. It give a sizable gain on db benchmark.
Ah! So it's just an optimiziation - it makes a bit more sense to me
now. I had assumed that this case (hugepage get_user_pages()) would
be sufficiently rare that it would not require optimization.
Apparently not.
Do you know where the cycles are going without this optimization? In
particular, could it be just the find_vma() in hugepage_vma() called
before follow_huge_addr()? I note that IA64 is the only arch to have
a non-trivial hugepage_vma()/follow_huge_addr() and that its
follow_huge_addr() doesn't actually use the vma passed in.
So the only significance of the find_vma() is to determine that we're
in an allocated region and that therefore (with prefault) the hugepage
PTEs must be present. If you actually check for the presence of the
page table entries and the return code of huge_pte_offset() in
follow_huge_addr() (as your 1/3 patch does), then the only thing that
hugepage_vma() need do on ia64 is to check that the address lies in
region 1 (and of course change names and remove the vma parameters,
since they're no longer used).
If we could get rid of follow_hugetlb_pages() it would remove an ugly
function from every arch, which would be nice.
--
David Gibson | For every complex problem there is a
david AT gibson.dropbear.id.au | solution which is simple, neat and
| wrong.
http://www.ozlabs.org/people/dgibson
next prev parent reply other threads:[~2004-04-16 3:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-13 23:22 hugetlb demand paging patch part [2/3] Chen, Kenneth W
2004-04-15 7:17 ` David Gibson
2004-04-15 17:27 ` Chen, Kenneth W
2004-04-16 2:34 ` 'David Gibson'
2004-04-16 2:58 ` Chen, Kenneth W
2004-04-16 3:27 ` 'David Gibson' [this message]
2004-04-16 4:13 ` Chen, Kenneth W
2004-04-16 4:49 ` 'David Gibson'
2004-04-16 5:56 ` Chen, Kenneth W
2004-04-16 6:15 ` 'David Gibson'
2004-04-16 19:05 ` Ray Bryant
2004-04-17 12:05 ` 'David Gibson'
2004-04-18 17:36 ` [Lse-tech] " Ray Bryant
2004-04-19 0:47 ` 'David Gibson'
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=20040416032725.GG12735@zax \
--to=david@gibson.dropbear.id.au \
--cc=akpm@osdl.org \
--cc=apw@shadowen.org \
--cc=kenneth.w.chen@intel.com \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lse-tech@lists.sourceforge.net \
--cc=raybry@sgi.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox