linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
To: "gux.fnst" <gux.fnst@cn.fujitsu.com>
Cc: kirill.shutemov@linux.intel.com, linux-mm@kvack.org
Subject: RE: ask for your help about a patch (commit: 9845cbb)
Date: Mon, 14 Apr 2014 13:37:47 +0300 (EEST)	[thread overview]
Message-ID: <20140414103747.70943E0098@blue.fi.intel.com> (raw)
In-Reply-To: <534B46FE.1070704@cn.fujitsu.com>

gux.fnst wrote:
> Hi Kirill,

Hi Xing,

Please always CC to mailing list for upstream-related questions.
I've added linux-mm@ to CC.

> 
> Currently I'm doing some kernel test work, including that reproducing
> some existing kernel bugs. Here I may need your some help.
> 
> On 2014-02-25, you committed a patch (commit: 9845cbb) about thp.
> 
> mm, thp: fix infinite loop on memcg OOM
> ---------------------------------------------------------------------------------------------------------------------------
> Masayoshi Mizuma reported a bug with the hang of an application under 
> the memcg limit.
> It happens on write-protection fault to huge zero page.
> 
> If we successfully allocate a huge page to replace zero page but hit the 
> memcg limit we
> need to split the zero page with split_huge_page_pmd() and fallback to 
> small pages.
> 
> The other part of the problem is that VM_FAULT_OOM has special meaning in
> do_huge_pmd_wp_page() context. __handle_mm_fault() expects the page to 
> be split if
> it sees VM_FAULT_OOM and it will will retry page fault handling. This 
> causes an infinite loop
> if the page was not split.
> 
> do_huge_pmd_wp_zero_page_fallback() can return VM_FAULT_OOM if it failed 
> to allocate
> one small page, so fallback to small pages will not help.
> 
> The solution for this part is to replace VM_FAULT_OOM with 
> VM_FAULT_FALLBACK is
> fallback required.
> ---------------------------------------------------------------------------------------------------------------------------
> 
> It is a little difficult to reproduce this problem fixed by this patch 
> for me. Could you give me some
> hint about how to do this - a??allocate a huge page to replace zero page 
> but hit the memcg limit"?

I used this script:

#!/bin/sh -efu

set -efux

mount -t cgroup none /sys/fs/cgroup
mkdir /sys/fs/cgroup/test
echo "10M" > /sys/fs/cgroup/test/memory.limit_in_bytes
echo "10M" > /sys/fs/cgroup/test/memory.memsw.limit_in_bytes

echo $$ > /sys/fs/cgroup/test/tasks
/host/home/kas/var/mmaptest_zero
echo ok

Where /host/home/kas/var/mmaptest_zero is:

#include <assert.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>

#define MB (1024 * 1024)
#define SIZE (256 * MB)

int main(int argc, char **argv)
{
	int i;
	char *p;

	posix_memalign((void **)&p, 2 * MB, SIZE);
	printf("p: %p\n", p);
	fork();
	for (i = 0; i < SIZE; i += 4096)
		assert(p[i] == 0);

	for (i = 0; i < SIZE; i += 4096)
		p[i] = 1;

	pause();
	return 0;
}

Without the patch it hangs, but should trigger OOM.

-- 
 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>

       reply	other threads:[~2014-04-14 10:37 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <534B46FE.1070704@cn.fujitsu.com>
2014-04-14 10:37 ` Kirill A. Shutemov [this message]
2014-04-15  1:02   ` gux.fnst

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=20140414103747.70943E0098@blue.fi.intel.com \
    --to=kirill.shutemov@linux.intel.com \
    --cc=gux.fnst@cn.fujitsu.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox