All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	linux-mm@kvack.org, Andi Kleen <ak@linux.intel.com>,
	"H. Peter Anvin" <hpa@linux.intel.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 10/10] thp: implement refcounting for huge zero page
Date: Wed, 24 Oct 2012 02:38:01 +0300	[thread overview]
Message-ID: <20121023233801.GA21591@shutemov.name> (raw)
In-Reply-To: <20121023155915.7d5ef9d1.akpm@linux-foundation.org>

On Tue, Oct 23, 2012 at 03:59:15PM -0700, Andrew Morton wrote:
> On Tue, 23 Oct 2012 10:00:18 +0300
> "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> wrote:
> 
> > > Well, how hard is it to trigger the bad behavior?  One can easily
> > > create a situation in which that page's refcount frequently switches
> > > from 0 to 1 and back again.  And one can easily create a situation in
> > > which the shrinkers are being called frequently.  Run both at the same
> > > time and what happens?
> > 
> > If the goal is to trigger bad behavior then:
> > 
> > 1. read from an area where a huge page can be mapped to get huge zero page
> >    mapped. hzp is allocated here. refcounter == 2.
> > 2. write to the same page. refcounter == 1.
> > 3. echo 3 > /proc/sys/vm/drop_caches. refcounter == 0 -> free the hzp.
> > 4. goto 1.
> > 
> > But it's unrealistic. /proc/sys/vm/drop_caches is only root-accessible.
> 
> Yes, drop_caches is uninteresting.
> 
> > We can trigger shrinker only under memory pressure. But in this, most
> > likely we will get -ENOMEM on hzp allocation and will go to fallback path
> > (4k zero page).
> 
> I disagree.  If, for example, there is a large amount of clean
> pagecache being generated then the shrinkers will be called frequently
> and memory reclaim will be running at a 100% success rate.  The
> hugepage allocation will be successful in such a situation?

Yes.

Shrinker callbacks are called from shrink_slab() which happens after page
cache reclaim, so on next reclaim round page cache will reclaim first and
we will avoid frequent alloc-free pattern.

One more thing we can do: increase shrinker->seeks to something like
DEFAULT_SEEKS * 4. In this case shrink_slab() will call our callback after
callbacks with DEFAULT_SEEKS.

-- 
 Kirill A. Shutemov

--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	linux-mm@kvack.org, Andi Kleen <ak@linux.intel.com>,
	"H. Peter Anvin" <hpa@linux.intel.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 10/10] thp: implement refcounting for huge zero page
Date: Wed, 24 Oct 2012 02:38:01 +0300	[thread overview]
Message-ID: <20121023233801.GA21591@shutemov.name> (raw)
In-Reply-To: <20121023155915.7d5ef9d1.akpm@linux-foundation.org>

On Tue, Oct 23, 2012 at 03:59:15PM -0700, Andrew Morton wrote:
> On Tue, 23 Oct 2012 10:00:18 +0300
> "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> wrote:
> 
> > > Well, how hard is it to trigger the bad behavior?  One can easily
> > > create a situation in which that page's refcount frequently switches
> > > from 0 to 1 and back again.  And one can easily create a situation in
> > > which the shrinkers are being called frequently.  Run both at the same
> > > time and what happens?
> > 
> > If the goal is to trigger bad behavior then:
> > 
> > 1. read from an area where a huge page can be mapped to get huge zero page
> >    mapped. hzp is allocated here. refcounter == 2.
> > 2. write to the same page. refcounter == 1.
> > 3. echo 3 > /proc/sys/vm/drop_caches. refcounter == 0 -> free the hzp.
> > 4. goto 1.
> > 
> > But it's unrealistic. /proc/sys/vm/drop_caches is only root-accessible.
> 
> Yes, drop_caches is uninteresting.
> 
> > We can trigger shrinker only under memory pressure. But in this, most
> > likely we will get -ENOMEM on hzp allocation and will go to fallback path
> > (4k zero page).
> 
> I disagree.  If, for example, there is a large amount of clean
> pagecache being generated then the shrinkers will be called frequently
> and memory reclaim will be running at a 100% success rate.  The
> hugepage allocation will be successful in such a situation?

Yes.

Shrinker callbacks are called from shrink_slab() which happens after page
cache reclaim, so on next reclaim round page cache will reclaim first and
we will avoid frequent alloc-free pattern.

One more thing we can do: increase shrinker->seeks to something like
DEFAULT_SEEKS * 4. In this case shrink_slab() will call our callback after
callbacks with DEFAULT_SEEKS.

-- 
 Kirill A. Shutemov

  reply	other threads:[~2012-10-23 23:36 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-15  6:00 [PATCH v4 00/10, REBASED] Introduce huge zero page Kirill A. Shutemov
2012-10-15  6:00 ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 01/10] thp: huge zero page: basic preparation Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 02/10] thp: zap_huge_pmd(): zap huge zero pmd Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 03/10] thp: copy_huge_pmd(): copy huge zero page Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 04/10] thp: do_huge_pmd_wp_page(): handle " Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 05/10] thp: change_huge_pmd(): keep huge zero page write-protected Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 06/10] thp: change split_huge_page_pmd() interface Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 07/10] thp: implement splitting pmd for huge zero page Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 08/10] thp: setup huge zero page on non-write page fault Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 09/10] thp: lazy huge zero page allocation Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-15  6:00 ` [PATCH v4 10/10] thp: implement refcounting for huge zero page Kirill A. Shutemov
2012-10-15  6:00   ` Kirill A. Shutemov
2012-10-18 23:45   ` Andrew Morton
2012-10-18 23:45     ` Andrew Morton
2012-10-18 23:59     ` Kirill A. Shutemov
2012-10-18 23:59       ` Kirill A. Shutemov
2012-10-23  6:35       ` Kirill A. Shutemov
2012-10-23  6:35         ` Kirill A. Shutemov
2012-10-23  6:43         ` Andrew Morton
2012-10-23  6:43           ` Andrew Morton
2012-10-23  7:00           ` Kirill A. Shutemov
2012-10-23 22:59             ` Andrew Morton
2012-10-23 22:59               ` Andrew Morton
2012-10-23 23:38               ` Kirill A. Shutemov [this message]
2012-10-23 23:38                 ` Kirill A. Shutemov
2012-10-24 19:22                 ` Andrew Morton
2012-10-24 19:22                   ` Andrew Morton
2012-10-24 19:45                   ` Kirill A. Shutemov
2012-10-24 20:25                     ` Andrew Morton
2012-10-24 20:25                       ` Andrew Morton
2012-10-24 20:33                       ` Kirill A. Shutemov
2012-10-24 20:44                         ` Andi Kleen
2012-10-24 20:44                           ` Andi Kleen
2012-10-25 20:49                       ` Kirill A. Shutemov
2012-10-25 21:05                         ` Andrew Morton
2012-10-25 21:05                           ` Andrew Morton
2012-10-25 21:22                           ` Kirill A. Shutemov
2012-10-25 21:22                             ` Kirill A. Shutemov
2012-10-25 21:37                             ` Andrew Morton
2012-10-25 21:37                               ` Andrew Morton
2012-10-25 22:10                               ` Kirill A. Shutemov
2012-10-16  9:53 ` [PATCH v4 00/10, REBASED] Introduce " Ni zhan Chen
2012-10-16  9:53   ` Ni zhan Chen
2012-10-16 10:54   ` Kirill A. Shutemov
2012-10-16 10:54     ` Kirill A. Shutemov
2012-10-16 11:13     ` Ni zhan Chen
2012-10-16 11:13       ` Ni zhan Chen
2012-10-16 11:28       ` Kirill A. Shutemov
2012-10-16 11:28         ` Kirill A. Shutemov
2012-10-16 11:37         ` Ni zhan Chen
2012-10-16 11:37           ` Ni zhan Chen
2012-10-26 15:14 ` [PATCH] thp, vmstat: implement HZP_ALLOC and HZP_ALLOC_FAILED events Kirill A. Shutemov
2012-10-26 15:14   ` Kirill A. Shutemov

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=20121023233801.GA21591@shutemov.name \
    --to=kirill@shutemov.name \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@linux.intel.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.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.
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.