[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <BANLkTinJbYrQoye7qjPzPxP8_deCSK0g7w@mail.gmail.com>
Date: Fri, 20 May 2011 14:36:13 +0900
From: Minchan Kim <minchan.kim@...il.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com>,
Andrea Arcangeli <aarcange@...hat.com>
Cc: Andrew Lutomirski <luto@....edu>,
KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>,
fengguang.wu@...el.com, andi@...stfloor.org, linux-mm@...ck.org,
linux-kernel@...r.kernel.org, mgorman@...e.de, hannes@...xchg.org,
riel@...hat.com
Subject: Re: Kernel falls apart under light memory pressure (i.e. linking vmlinux)
On Fri, May 20, 2011 at 2:08 PM, KAMEZAWA Hiroyuki
<kamezawa.hiroyu@...fujitsu.com> wrote:
> On Fri, 20 May 2011 13:20:15 +0900
> Minchan Kim <minchan.kim@...il.com> wrote:
>
>> So I want to resolve your problem asap.
>> We don't have see report about that. Could you do git-bisect?
>> FYI, Recently, big change of mm is compaction,transparent huge pages.
>> Kame, could you point out thing related to memcg if you have a mind?
>>
>
> I don't doubt memcg at this stage because it never modify page->flags.
> Consdering the case, PageActive() is set against off-LRU pages after
> clear_active_flags() clears it.
>
> Hmm, I think I don't understand the lock system fully but...how do you
> think this ?
>
> ==
>
> At splitting a hugepage, the routine marks all pmd as "splitting".
>
> But assume a racy case where 2 threads run into spit at the
> same time, one thread wins compound_lock() and do split, another
> thread should not touch splitted pages.
Sorry. Now I don't have a time to review in detail.
When I look it roughly, page_lock_anon_vma have to prevent it.
But Andrea needs current this problem and he will catch something we lost. :)
>
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com>
> Index: mmotm-May11/mm/huge_memory.c
> ===================================================================
> --- mmotm-May11.orig/mm/huge_memory.c
> +++ mmotm-May11/mm/huge_memory.c
> @@ -1150,7 +1150,7 @@ static int __split_huge_page_splitting(s
> return ret;
> }
>
> -static void __split_huge_page_refcount(struct page *page)
> +static bool __split_huge_page_refcount(struct page *page)
> {
> int i;
> unsigned long head_index = page->index;
> @@ -1161,6 +1161,11 @@ static void __split_huge_page_refcount(s
> spin_lock_irq(&zone->lru_lock);
> compound_lock(page);
>
> + if (!PageCompound(page)) {
> + compound_unlock(page);
> + spin_unlock_irq(&zone->lru_lock);
> + return false;
> + }
> for (i = 1; i < HPAGE_PMD_NR; i++) {
> struct page *page_tail = page + i;
>
> @@ -1258,6 +1263,7 @@ static void __split_huge_page_refcount(s
> * to be pinned by the caller.
> */
> BUG_ON(page_count(page) <= 0);
> + return true;
> }
>
> static int __split_huge_page_map(struct page *page,
> @@ -1367,7 +1373,8 @@ static void __split_huge_page(struct pag
> mapcount, page_mapcount(page));
> BUG_ON(mapcount != page_mapcount(page));
>
> - __split_huge_page_refcount(page);
> + if (!__split_huge_page_refcount(page))
> + return;
>
> mapcount2 = 0;
> list_for_each_entry(avc, &anon_vma->head, same_anon_vma) {
>
>
--
Kind regards,
Minchan Kim
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists