* RE: ask for your help about a patch (commit: 9845cbb)
[not found] <534B46FE.1070704@cn.fujitsu.com>
@ 2014-04-14 10:37 ` Kirill A. Shutemov
2014-04-15 1:02 ` gux.fnst
0 siblings, 1 reply; 2+ messages in thread
From: Kirill A. Shutemov @ 2014-04-14 10:37 UTC (permalink / raw)
To: gux.fnst; +Cc: kirill.shutemov, linux-mm
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>
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: ask for your help about a patch (commit: 9845cbb)
2014-04-14 10:37 ` ask for your help about a patch (commit: 9845cbb) Kirill A. Shutemov
@ 2014-04-15 1:02 ` gux.fnst
0 siblings, 0 replies; 2+ messages in thread
From: gux.fnst @ 2014-04-15 1:02 UTC (permalink / raw)
To: Kirill A. Shutemov; +Cc: linux-mm
On 04/14/2014 06:37 PM, Kirill A. Shutemov wrote:
> gux.fnst wrote:
>> Hi Kirill,
> Hi Xing,
>
> Please always CC to mailing list for upstream-related questions.
> I've added linux-mm@ to CC.
OK, got it.
> 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 - “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.
>
Thank you very much.
Regards,
Xing Gu
--
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>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-04-15 1:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <534B46FE.1070704@cn.fujitsu.com>
2014-04-14 10:37 ` ask for your help about a patch (commit: 9845cbb) Kirill A. Shutemov
2014-04-15 1:02 ` gux.fnst
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.